From c61a1195728a635410bd619f26662ce7d0834b6e Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 19 Jul 2010 19:03:42 -0500 Subject: [PATCH 001/161] add caller table to fifo --- src/mod/applications/mod_fifo/mod_fifo.c | 70 +++++++++++++++++++++++- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/src/mod/applications/mod_fifo/mod_fifo.c b/src/mod/applications/mod_fifo/mod_fifo.c index 0d0efd679a..0deeff2a31 100644 --- a/src/mod/applications/mod_fifo/mod_fifo.c +++ b/src/mod/applications/mod_fifo/mod_fifo.c @@ -264,6 +264,11 @@ struct fifo_node { typedef struct fifo_node fifo_node_t; +static void fifo_caller_add(fifo_node_t *node, switch_core_session_t *session); +static void fifo_caller_del(const char *uuid); + + + struct callback { char *buf; size_t len; @@ -411,6 +416,8 @@ static void node_remove_uuid(fifo_node_t *node, const char *uuid) node->start_waiting = 0; } + fifo_caller_del(uuid); + return; } @@ -920,7 +927,6 @@ static switch_status_t messagehook (switch_core_session_t *session, switch_core_ return SWITCH_STATUS_SUCCESS; } - static void add_outbound_call(const char *key, switch_call_cause_t *cancel_cause) { switch_mutex_lock(globals.orig_mutex); @@ -944,6 +950,9 @@ static void cancel_outbound_call(const char *key, switch_call_cause_t cause) *cancel_cause = cause; } switch_mutex_unlock(globals.orig_mutex); + + fifo_caller_del(key); + } static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void *obj) @@ -1781,7 +1790,7 @@ SWITCH_STANDARD_APP(fifo_track_call_function) col2 = "manual_calls_out_total_count"; } - sql = switch_mprintf("update fifo_outbound set start_time=%ld,outbound_fail_count=0,use_count=use_count+1,%s=%s+1,%s=%s+1 where uuid='%q'", + sql = switch_mprintf("update fifo_outbound set stop_time=0,start_time=%ld,outbound_fail_count=0,use_count=use_count+1,%s=%s+1,%s=%s+1 where uuid='%q'", (long) switch_epoch_time_now(NULL), col1, col1, col2, col2, data); fifo_execute_sql(sql, globals.sql_mutex); switch_safe_free(sql); @@ -1808,6 +1817,41 @@ SWITCH_STANDARD_APP(fifo_track_call_function) switch_core_event_hook_add_state_change(session, hanguphook); } + +static void fifo_caller_add(fifo_node_t *node, switch_core_session_t *session) +{ + char *sql; + switch_channel_t *channel = switch_core_session_get_channel(session); + + sql = switch_mprintf("insert into fifo_callers (fifo_name,uuid,caller_caller_id_name,caller_caller_id_number,timestamp) " + "values ('%q','%q','%q','%q',%ld)", + node->name, + switch_core_session_get_uuid(session), + switch_str_nil(switch_channel_get_variable(channel, "caller_id_name")), + switch_str_nil(switch_channel_get_variable(channel, "caller_id_number")), + switch_epoch_time_now(NULL)); + + fifo_execute_sql(sql, globals.sql_mutex); + switch_safe_free(sql); +} + +static void fifo_caller_del(const char *uuid) +{ + char *sql; + + if (uuid) { + sql = switch_mprintf("delete from fifo_callers where uuid='%q'", uuid); + } else { + sql = switch_mprintf("delete from fifo_callers", uuid); + } + + fifo_execute_sql(sql, globals.sql_mutex); + switch_safe_free(sql); + +} + + + typedef enum { STRAT_MORE_PPL, STRAT_WAITING_LONGER, @@ -2017,6 +2061,8 @@ SWITCH_STANDARD_APP(fifo_function) fifo_queue_push(node->fifo_list[p], call_event); + fifo_caller_add(node, session); + call_event = NULL; switch_snprintf(tmp, sizeof(tmp), "%d", fifo_queue_size(node->fifo_list[p])); switch_channel_set_variable(channel, "fifo_position", tmp); @@ -2343,6 +2389,11 @@ SWITCH_STANDARD_APP(fifo_function) } } + if (pop) { + fifo_caller_del(switch_str_nil(switch_event_get_header(pop, "unique-id"))); + } + + if (pop && !node_consumer_wait_count(node)) { switch_mutex_lock(node->mutex); node->start_waiting = 0; @@ -2531,7 +2582,7 @@ SWITCH_STANDARD_APP(fifo_function) } if (outbound_id) { - sql = switch_mprintf("update fifo_outbound set start_time=%ld,use_count=use_count+1,outbound_fail_count=0 where uuid='%s'", + sql = switch_mprintf("update fifo_outbound set stop_time=0,start_time=%ld,use_count=use_count+1,outbound_fail_count=0 where uuid='%s'", switch_epoch_time_now(NULL), outbound_id); fifo_execute_sql(sql, globals.sql_mutex); switch_safe_free(sql); @@ -3356,6 +3407,16 @@ const char bridge_sql[] = ");\n" ; +const char callers_sql[] = + "create table fifo_callers (\n" + " fifo_name varchar(255) not null,\n" + " uuid varchar(255) not null,\n" + " caller_caller_id_name varchar(255),\n" + " caller_caller_id_number varchar(255),\n" + " timestamp integer\n" + ");\n" +; + static void extract_fifo_outbound_uuid(char *string, char *uuid, switch_size_t len) @@ -3437,6 +3498,7 @@ static switch_status_t load_config(int reload, int del_all) switch_cache_db_test_reactive(dbh, "delete from fifo_outbound where static = 1 or taking_calls < 0 or stop_time < 0", "drop table fifo_outbound", outbound_sql); switch_cache_db_test_reactive(dbh, "delete from fifo_bridge", "drop table fifo_bridge", bridge_sql); + switch_cache_db_test_reactive(dbh, "delete from fifo_callers", "drop table fifo_callers", callers_sql); switch_cache_db_release_db_handle(&dbh); fifo_execute_sql("update fifo_outbound set start_time=0,stop_time=0,ring_count=0,use_count=0," @@ -3633,6 +3695,8 @@ static switch_status_t load_config(int reload, int del_all) goto top; } } + + fifo_caller_del(NULL); switch_mutex_unlock(globals.mutex); } From cf9ddfa807d80f9263ef6e473e1b3aa341657111 Mon Sep 17 00:00:00 2001 From: Rupa Schomaker Date: Mon, 19 Jul 2010 22:56:09 -0500 Subject: [PATCH 002/161] limit_hash_usage - no session in api --- src/mod/applications/mod_commands/mod_commands.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/mod/applications/mod_commands/mod_commands.c b/src/mod/applications/mod_commands/mod_commands.c index f41e95cca1..a645105994 100644 --- a/src/mod/applications/mod_commands/mod_commands.c +++ b/src/mod/applications/mod_commands/mod_commands.c @@ -4283,9 +4283,12 @@ end: SWITCH_STANDARD_API(limit_hash_usage_function) { char *mydata = NULL; + switch_status_t ret = SWITCH_STATUS_SUCCESS; if (!zstr(cmd)) { - mydata = switch_core_session_sprintf(session, "hash %s", cmd); - return limit_usage_function(mydata, session, stream); + mydata = switch_mprintf("hash %s", cmd); + ret = limit_usage_function(mydata, session, stream); + switch_safe_free(mydata); + return ret; } else { stream->write_function(stream, "USAGE: limit_hash_usage %s\n", LIMIT_HASH_USAGE_USAGE); return SWITCH_STATUS_SUCCESS; From 5c2fa74f50624f8e42ca6aac5db7c90ada00655c Mon Sep 17 00:00:00 2001 From: Giovanni Maruzzelli Date: Tue, 20 Jul 2010 11:10:58 -0500 Subject: [PATCH 003/161] let's use XFlush instead of XSync, helps broken XLib Signed-off-by: root --- src/mod/endpoints/mod_skypopen/configs/client.c | 3 ++- src/mod/endpoints/mod_skypopen/mod_skypopen.c | 12 ++++++++++-- src/mod/endpoints/mod_skypopen/skypopen_protocol.c | 6 +++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/mod/endpoints/mod_skypopen/configs/client.c b/src/mod/endpoints/mod_skypopen/configs/client.c index 87c4c6c422..062281d641 100644 --- a/src/mod/endpoints/mod_skypopen/configs/client.c +++ b/src/mod/endpoints/mod_skypopen/configs/client.c @@ -87,7 +87,8 @@ int skypopen_send_message(struct SkypopenHandles *SkypopenHandles, const char *m pos += i; } while (pos <= len); - XSync(disp, False); + //giovanni XSync(disp, False); + XFlush(disp); ok = X11_errors_untrap(); if (!ok) diff --git a/src/mod/endpoints/mod_skypopen/mod_skypopen.c b/src/mod/endpoints/mod_skypopen/mod_skypopen.c index 97d0ce6778..3c41524550 100644 --- a/src/mod/endpoints/mod_skypopen/mod_skypopen.c +++ b/src/mod/endpoints/mod_skypopen/mod_skypopen.c @@ -364,6 +364,8 @@ static switch_status_t remove_interface(char *the_interface) if (tech_pvt->running && tech_pvt->SkypopenHandles.disp) { XEvent e; Atom atom1 = XInternAtom(tech_pvt->SkypopenHandles.disp, "SKYPECONTROLAPI_MESSAGE_BEGIN", False); + switch_sleep(1000);//giovanni + XFlush(tech_pvt->SkypopenHandles.disp); //giovanni memset(&e, 0, sizeof(e)); e.xclient.type = ClientMessage; e.xclient.message_type = atom1; /* leading message */ @@ -372,7 +374,8 @@ static switch_status_t remove_interface(char *the_interface) e.xclient.format = 8; XSendEvent(tech_pvt->SkypopenHandles.disp, tech_pvt->SkypopenHandles.win, False, 0, &e); - XSync(tech_pvt->SkypopenHandles.disp, False); + //giovanni XSync(tech_pvt->SkypopenHandles.disp, False); + XFlush(tech_pvt->SkypopenHandles.disp); //giovanni } #endif } @@ -1500,6 +1503,7 @@ static switch_status_t load_config(int reload_type) SKYPOPEN_P_LOG, interface_id, globals.SKYPOPEN_INTERFACES[interface_id].skype_user); +/* giovanni*/ skypopen_signaling_write(&globals.SKYPOPEN_INTERFACES[interface_id], "PROTOCOL 7"); switch_sleep(10000); skypopen_signaling_write(&globals.SKYPOPEN_INTERFACES[interface_id], "SET AUTOAWAY OFF"); @@ -1516,6 +1520,7 @@ static switch_status_t load_config(int reload_type) skypopen_signaling_write(&globals.SKYPOPEN_INTERFACES[interface_id], "SET SILENT_MODE ON"); switch_sleep(10000); } +/* giovanni */ } else { ERRORA ("The Skype client to which we are connected FAILED to gave us CURRENTUSERHANDLE=%s, interface_id=%d FAILED to start. No Skype client logged in as '%s' has been found. Please (re)launch a Skype client logged in as '%s'. Skypopen exiting now\n", @@ -1742,6 +1747,8 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skypopen_shutdown) XEvent e; Atom atom1 = XInternAtom(tech_pvt->SkypopenHandles.disp, "SKYPECONTROLAPI_MESSAGE_BEGIN", False); + switch_sleep(1000);//giovanni + XFlush(tech_pvt->SkypopenHandles.disp); //giovanni memset(&e, 0, sizeof(e)); e.xclient.type = ClientMessage; e.xclient.message_type = atom1; /* leading message */ @@ -1750,7 +1757,8 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skypopen_shutdown) e.xclient.format = 8; XSendEvent(tech_pvt->SkypopenHandles.disp, tech_pvt->SkypopenHandles.win, False, 0, &e); - XSync(tech_pvt->SkypopenHandles.disp, False); + //giovanni XSync(tech_pvt->SkypopenHandles.disp, False); + XFlush(tech_pvt->SkypopenHandles.disp); //giovanni } #endif } diff --git a/src/mod/endpoints/mod_skypopen/skypopen_protocol.c b/src/mod/endpoints/mod_skypopen/skypopen_protocol.c index 77568c6e5c..6f4fc33b65 100644 --- a/src/mod/endpoints/mod_skypopen/skypopen_protocol.c +++ b/src/mod/endpoints/mod_skypopen/skypopen_protocol.c @@ -1458,6 +1458,9 @@ int skypopen_send_message(private_t * tech_pvt, const char *message_P) unsigned int len = strlen(message_P); XEvent e; +skypopen_sleep(1000);//giovanni + XFlush(disp);//giovanni + memset(&e, 0, sizeof(e)); e.xclient.type = ClientMessage; e.xclient.message_type = atom1; /* leading message */ @@ -1476,7 +1479,8 @@ int skypopen_send_message(private_t * tech_pvt, const char *message_P) pos += i; } while (pos <= len); - XSync(disp, False); + //giovanni XSync(disp, False); + XFlush(disp); ok = X11_errors_untrap(); if (!ok) { From 28eb6e0ad9e5990e367a67a892c84fd2979add77 Mon Sep 17 00:00:00 2001 From: Steve Underwood Date: Wed, 21 Jul 2010 00:22:24 +0800 Subject: [PATCH 004/161] Fixed the wording of a FAX log message --- src/mod/applications/mod_spandsp/mod_spandsp_fax.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mod/applications/mod_spandsp/mod_spandsp_fax.c b/src/mod/applications/mod_spandsp/mod_spandsp_fax.c index 05ad60805b..b4b42d738d 100644 --- a/src/mod/applications/mod_spandsp/mod_spandsp_fax.c +++ b/src/mod/applications/mod_spandsp/mod_spandsp_fax.c @@ -975,7 +975,7 @@ void mod_spandsp_fax_process_fax(switch_core_session_t *session, const char *dat pvt->filename = switch_core_session_strdup(session, data); if (pvt->app_mode == FUNCTION_TX) { if ((switch_file_exists(pvt->filename, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS)) { - switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Cannot send inexistant fax file [%s]\n", + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Cannot send non-existant fax file [%s]\n", switch_str_nil(pvt->filename)); goto done; } From 12a0ec741b52e51a652aeb04a37809842639a1b5 Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 20 Jul 2010 14:42:43 -0400 Subject: [PATCH 005/161] Add esl_connect_timeout to specify custom connection timeouts --- libs/esl/src/esl.c | 54 +++++++++++++++++++++++++++++++++++++- libs/esl/src/include/esl.h | 5 +++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c index abfe9eb1a8..c63f2b1a00 100644 --- a/libs/esl/src/esl.c +++ b/libs/esl/src/esl.c @@ -34,6 +34,7 @@ #include #ifndef WIN32 #define closesocket(x) close(x) +#include #else #include #endif @@ -606,12 +607,13 @@ ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_list } -ESL_DECLARE(esl_status_t) esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password) +ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, long timeout) { char sendbuf[256]; int rval = 0; const char *hval; struct addrinfo hints = { 0 }, *result; + int fd_flags; #ifdef WIN32 WORD wVersionRequested = MAKEWORD(2, 0); WSADATA wsaData; @@ -647,8 +649,58 @@ ESL_DECLARE(esl_status_t) esl_connect(esl_handle_t *handle, const char *host, es handle->sockaddr.sin_family = AF_INET; handle->sockaddr.sin_port = htons(port); + if (timeout != -1) { +#ifdef WIN32 + u_long arg = 1; + if (ioctlsocket(handle->sock, FIONBIO, &arg) == SOCKET_ERROR) { + snprintf(handle->err, sizeof(handle->err), "Socket Connection Error"); + goto fail; + } +#else + fd_flags = fcntl(handle->sock, F_GETFL, 0); + if (fcntl(handle->sock, F_SETFL, fd_flags | O_NONBLOCK)) { + snprintf(handle->err, sizeof(handle->err), "Socket Connection Error"); + goto fail; + } +#endif + } + rval = connect(handle->sock, (struct sockaddr*)&handle->sockaddr, sizeof(handle->sockaddr)); + if (timeout != -1) { + fd_set wfds; + struct timeval tv = { timeout / 1000, (timeout % 1000) * 1000 }; + int r; + + FD_ZERO(&wfds); + FD_SET(handle->sock, &wfds); + + r = select(handle->sock + 1, NULL, &wfds, NULL, &tv); + + if (r <= 0) { + snprintf(handle->err, sizeof(handle->err), "Connection timed out"); + goto fail; + } + + if (!FD_ISSET(handle->sock, &wfds)) { + snprintf(handle->err, sizeof(handle->err), "Connection timed out"); + goto fail; + } + +#ifdef WIN32 + { + u_long arg = 0; + if (ioctlsocket(handle->sock, FIONBIO, &arg) == SOCKET_ERROR) { + snprintf(handle->err, sizeof(handle->err), "Socket Connection Error"); + goto fail; + } + } +#else + fcntl(handle->sock, F_SETFL, fd_flags); +#endif + rval = 0; + } + freeaddrinfo(result); result = NULL; diff --git a/libs/esl/src/include/esl.h b/libs/esl/src/include/esl.h index 7b98988acc..d87f83f26b 100644 --- a/libs/esl/src/include/esl.h +++ b/libs/esl/src/include/esl.h @@ -387,8 +387,11 @@ ESL_DECLARE(esl_status_t) esl_sendevent(esl_handle_t *handle, esl_event_t *event \param port Port to be connected \param password FreeSWITCH server username (optional) \param password FreeSWITCH server password + \param timeout Connection timeout, in miliseconds */ -ESL_DECLARE(esl_status_t) esl_connect(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password); +ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, long timeout); +#define esl_connect(_handle, _host, _port, _user, _password) esl_connect_timeout(_handle, _host, _port, _user, _password, -1) + /*! \brief Disconnect a handle \param handle Handle to be disconnected From 7431fbe9fd2963268b4747e954416fdde0d8e763 Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 20 Jul 2010 14:44:33 -0400 Subject: [PATCH 006/161] mod_hash: use 5 seconds connection timeouts for remote connections --- src/mod/applications/mod_hash/mod_hash.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mod/applications/mod_hash/mod_hash.c b/src/mod/applications/mod_hash/mod_hash.c index c0e8b55c15..9ccfaf800a 100644 --- a/src/mod/applications/mod_hash/mod_hash.c +++ b/src/mod/applications/mod_hash/mod_hash.c @@ -743,7 +743,7 @@ static void *SWITCH_THREAD_FUNC limit_remote_thread(switch_thread_t *thread, voi limit_remote_t *remote = (limit_remote_t*)obj; while (remote->state > REMOTE_OFF) { if (remote->state != REMOTE_UP) { - if (esl_connect(&remote->handle, remote->host, remote->port, remote->username, remote->password) == ESL_SUCCESS) { + if (esl_connect_timeout(&remote->handle, remote->host, remote->port, remote->username, remote->password, 5000) == ESL_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Connected to remote FreeSWITCH (%s) at %s:%d\n", remote->name, remote->host, remote->port); From 8a7f38c6500ee24314f28ba215191e10c143c73f Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 20 Jul 2010 15:22:19 -0500 Subject: [PATCH 007/161] FSCORE-636 --- src/switch_channel.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/switch_channel.c b/src/switch_channel.c index e82af1e792..e4c0c154f8 100644 --- a/src/switch_channel.c +++ b/src/switch_channel.c @@ -3033,8 +3033,8 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_timestamps(switch_channel_t * switch_caller_profile_t *caller_profile, *ocp; switch_app_log_t *app_log, *ap; char *last_app = NULL, *last_arg = NULL; - char start[80] = "", resurrect[80] = "", answer[80] = "", progress[80] = "", progress_media[80] = "", end[80] = "", tmp[80] = "", profile_start[80] = - ""; + char start[80] = "", resurrect[80] = "", answer[80] = "", progress[80] = "", progress_media[80] = "", end[80] = "", tmp[80] = "", + profile_start[80] = ""; int32_t duration = 0, legbillsec = 0, billsec = 0, mduration = 0, billmsec = 0, legbillmsec = 0, progressmsec = 0, progress_mediamsec = 0; int32_t answersec = 0, answermsec = 0; switch_time_t answerusec = 0; @@ -3114,7 +3114,7 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_timestamps(switch_channel_t * if (caller_profile->times->resurrected) { switch_time_exp_lt(&tm, caller_profile->times->resurrected); - switch_strftime_nocheck(answer, &retsize, sizeof(resurrect), fmt, &tm); + switch_strftime_nocheck(resurrect, &retsize, sizeof(resurrect), fmt, &tm); switch_channel_set_variable(channel, "resurrect_stamp", resurrect); } @@ -3136,13 +3136,13 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_timestamps(switch_channel_t * tt_created = (time_t) (caller_profile->times->created / 1000000); mtt_created = (time_t) (caller_profile->times->created / 1000); - tt_prof_created = (time_t) (caller_profile->times->profile_created / 1000000); - mtt_prof_created = (time_t) (caller_profile->times->profile_created / 1000); switch_snprintf(tmp, sizeof(tmp), "%" TIME_T_FMT, tt_created); switch_channel_set_variable(channel, "start_epoch", tmp); switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, caller_profile->times->created); switch_channel_set_variable(channel, "start_uepoch", tmp); + tt_prof_created = (time_t) (caller_profile->times->profile_created / 1000000); + mtt_prof_created = (time_t) (caller_profile->times->profile_created / 1000); switch_snprintf(tmp, sizeof(tmp), "%" TIME_T_FMT, tt_prof_created); switch_channel_set_variable(channel, "profile_start_epoch", tmp); switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, caller_profile->times->profile_created); @@ -3176,7 +3176,6 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_timestamps(switch_channel_t * switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, caller_profile->times->progress_media); switch_channel_set_variable(channel, "progress_media_uepoch", tmp); - tt_hungup = (time_t) (caller_profile->times->hungup / 1000000); mtt_hungup = (time_t) (caller_profile->times->hungup / 1000); switch_snprintf(tmp, sizeof(tmp), "%" TIME_T_FMT, tt_hungup); @@ -3184,9 +3183,9 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_timestamps(switch_channel_t * switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, caller_profile->times->hungup); switch_channel_set_variable(channel, "end_uepoch", tmp); - uduration = caller_profile->times->hungup - caller_profile->times->created; duration = (int32_t) (tt_hungup - tt_created); mduration = (int32_t) (mtt_hungup - mtt_created); + uduration = caller_profile->times->hungup - caller_profile->times->created; if (caller_profile->times->answered) { billsec = (int32_t) (tt_hungup - tt_answered); @@ -3214,7 +3213,6 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_timestamps(switch_channel_t * progress_mediausec = caller_profile->times->progress_media - caller_profile->times->created; } - } switch_channel_set_variable(channel, "last_app", last_app); @@ -3227,13 +3225,13 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_timestamps(switch_channel_t * switch_snprintf(tmp, sizeof(tmp), "%d", billsec); switch_channel_set_variable(channel, "billsec", tmp); - switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, progresssec); + switch_snprintf(tmp, sizeof(tmp), "%d", progresssec); switch_channel_set_variable(channel, "progresssec", tmp); - switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, answersec); + switch_snprintf(tmp, sizeof(tmp), "%d", answersec); switch_channel_set_variable(channel, "answersec", tmp); - switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, progress_mediasec); + switch_snprintf(tmp, sizeof(tmp), "%d", progress_mediasec); switch_channel_set_variable(channel, "progress_mediasec", tmp); switch_snprintf(tmp, sizeof(tmp), "%d", legbillsec); @@ -3251,7 +3249,7 @@ SWITCH_DECLARE(switch_status_t) switch_channel_set_timestamps(switch_channel_t * switch_snprintf(tmp, sizeof(tmp), "%d", answermsec); switch_channel_set_variable(channel, "answermsec", tmp); - switch_snprintf(tmp, sizeof(tmp), "%d", progressmsec); + switch_snprintf(tmp, sizeof(tmp), "%d", progress_mediamsec); switch_channel_set_variable(channel, "progress_mediamsec", tmp); switch_snprintf(tmp, sizeof(tmp), "%d", legbillmsec); From 13137e228c591f23a0d0a8187b0b9ef4d0923e8a Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 20 Jul 2010 16:11:59 -0400 Subject: [PATCH 008/161] esl: use recv_timed in esl_connect_timemout in case we get stuck in a blocking recv --- libs/esl/src/esl.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c index c63f2b1a00..4084578217 100644 --- a/libs/esl/src/esl.c +++ b/libs/esl/src/esl.c @@ -713,7 +713,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * handle->connected = 1; - if (esl_recv(handle)) { + if (esl_recv_timed(handle, timeout)) { snprintf(handle->err, sizeof(handle->err), "Connection Error"); goto fail; } @@ -734,7 +734,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * esl_send(handle, sendbuf); - if (esl_recv(handle)) { + if (esl_recv_timed(handle, timeout)) { snprintf(handle->err, sizeof(handle->err), "Authentication Error"); goto fail; } @@ -813,6 +813,10 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms } esl_mutex_unlock(handle->mutex); } + + if (ms == -1) { + ms = 30000; + } tv.tv_usec = ms * 1000; From 49d6c803d1f6d3cf961385ddd604762f5506d0b3 Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 20 Jul 2010 16:23:01 -0400 Subject: [PATCH 009/161] use uint32_t instead of long for timeout as in the rest of the lib, 0 means forever. Also added esl_send_recv_timed() --- libs/esl/src/esl.c | 19 +++++++++---------- libs/esl/src/include/esl.h | 7 ++++--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c index 4084578217..3acab01935 100644 --- a/libs/esl/src/esl.c +++ b/libs/esl/src/esl.c @@ -607,7 +607,7 @@ ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_list } -ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, long timeout) +ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, uint32_t timeout) { char sendbuf[256]; int rval = 0; @@ -649,7 +649,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * handle->sockaddr.sin_family = AF_INET; handle->sockaddr.sin_port = htons(port); - if (timeout != -1) { + if (timeout) { #ifdef WIN32 u_long arg = 1; if (ioctlsocket(handle->sock, FIONBIO, &arg) == SOCKET_ERROR) { @@ -667,7 +667,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * rval = connect(handle->sock, (struct sockaddr*)&handle->sockaddr, sizeof(handle->sockaddr)); - if (timeout != -1) { + if (timeout) { fd_set wfds; struct timeval tv = { timeout / 1000, (timeout % 1000) * 1000 }; int r; @@ -800,6 +800,10 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms struct timeval tv = { 0 }; int max, activity; esl_status_t status = ESL_SUCCESS; + + if (!ms) { + return esl_recv_event(handle, check_q, save_event); + } if (!handle || !handle->connected || handle->sock == ESL_SOCK_INVALID) { return ESL_FAIL; @@ -813,14 +817,9 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms } esl_mutex_unlock(handle->mutex); } - - if (ms == -1) { - ms = 30000; - } tv.tv_usec = ms * 1000; - FD_ZERO(&rfds); FD_ZERO(&efds); @@ -1146,7 +1145,7 @@ ESL_DECLARE(esl_status_t) esl_send(esl_handle_t *handle, const char *cmd) } -ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd) +ESL_DECLARE(esl_status_t) esl_send_recv_timed(esl_handle_t *handle, const char *cmd, uint32_t ms) { const char *hval; esl_status_t status; @@ -1176,7 +1175,7 @@ ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd) recv: - status = esl_recv_event(handle, 0, &handle->last_sr_event); + status = esl_recv_event_timed(handle, ms, 0, &handle->last_sr_event); if (handle->last_sr_event) { char *ct = esl_event_get_header(handle->last_sr_event,"content-type"); diff --git a/libs/esl/src/include/esl.h b/libs/esl/src/include/esl.h index d87f83f26b..9f28c3d925 100644 --- a/libs/esl/src/include/esl.h +++ b/libs/esl/src/include/esl.h @@ -389,8 +389,8 @@ ESL_DECLARE(esl_status_t) esl_sendevent(esl_handle_t *handle, esl_event_t *event \param password FreeSWITCH server password \param timeout Connection timeout, in miliseconds */ -ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, long timeout); -#define esl_connect(_handle, _host, _port, _user, _password) esl_connect_timeout(_handle, _host, _port, _user, _password, -1) +ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, uint32_t timeout); +#define esl_connect(_handle, _host, _port, _user, _password) esl_connect_timeout(_handle, _host, _port, _user, _password, 0) /*! \brief Disconnect a handle @@ -423,7 +423,8 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms \param handle Handle to be used \param cmd Raw command to send */ -ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd); +ESL_DECLARE(esl_status_t) esl_send_recv_timed(esl_handle_t *handle, const char *cmd, uint32_t ms); +#define esl_send_recv(_handle, _cmd) esl_send_recv_timed(_handle, _cmd, 0) /*! \brief Applies a filter to received events \param handle Handle to apply the filter to From 27d8378f975e0b3764def720afdee9473d847111 Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 20 Jul 2010 16:24:30 -0400 Subject: [PATCH 010/161] mod_hash: use esl_recv_timed with a 5000ms timeout when doing api commands --- src/mod/applications/mod_hash/mod_hash.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mod/applications/mod_hash/mod_hash.c b/src/mod/applications/mod_hash/mod_hash.c index 9ccfaf800a..f4eec4f3c1 100644 --- a/src/mod/applications/mod_hash/mod_hash.c +++ b/src/mod/applications/mod_hash/mod_hash.c @@ -750,7 +750,7 @@ static void *SWITCH_THREAD_FUNC limit_remote_thread(switch_thread_t *thread, voi remote->state = REMOTE_UP; } } else { - if (esl_send_recv(&remote->handle, "api hash_dump limit") != ESL_SUCCESS) { + if (esl_send_recv_timed(&remote->handle, "api hash_dump limit", 5000) != ESL_SUCCESS) { esl_disconnect(&remote->handle); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Disconnected from remote FreeSWITCH (%s) at %s:%d\n", remote->name, remote->host, remote->port); From 644a144e190cc52e3d1fa3c5e0c58cedf6b35e98 Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 20 Jul 2010 14:42:43 -0400 Subject: [PATCH 011/161] Add esl_connect_timeout to specify custom connection timeouts --- libs/esl/src/esl.c | 19 ++++++++----------- libs/esl/src/include/esl.h | 7 +++---- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c index 3acab01935..c63f2b1a00 100644 --- a/libs/esl/src/esl.c +++ b/libs/esl/src/esl.c @@ -607,7 +607,7 @@ ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_list } -ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, uint32_t timeout) +ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, long timeout) { char sendbuf[256]; int rval = 0; @@ -649,7 +649,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * handle->sockaddr.sin_family = AF_INET; handle->sockaddr.sin_port = htons(port); - if (timeout) { + if (timeout != -1) { #ifdef WIN32 u_long arg = 1; if (ioctlsocket(handle->sock, FIONBIO, &arg) == SOCKET_ERROR) { @@ -667,7 +667,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * rval = connect(handle->sock, (struct sockaddr*)&handle->sockaddr, sizeof(handle->sockaddr)); - if (timeout) { + if (timeout != -1) { fd_set wfds; struct timeval tv = { timeout / 1000, (timeout % 1000) * 1000 }; int r; @@ -713,7 +713,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * handle->connected = 1; - if (esl_recv_timed(handle, timeout)) { + if (esl_recv(handle)) { snprintf(handle->err, sizeof(handle->err), "Connection Error"); goto fail; } @@ -734,7 +734,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * esl_send(handle, sendbuf); - if (esl_recv_timed(handle, timeout)) { + if (esl_recv(handle)) { snprintf(handle->err, sizeof(handle->err), "Authentication Error"); goto fail; } @@ -800,10 +800,6 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms struct timeval tv = { 0 }; int max, activity; esl_status_t status = ESL_SUCCESS; - - if (!ms) { - return esl_recv_event(handle, check_q, save_event); - } if (!handle || !handle->connected || handle->sock == ESL_SOCK_INVALID) { return ESL_FAIL; @@ -820,6 +816,7 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms tv.tv_usec = ms * 1000; + FD_ZERO(&rfds); FD_ZERO(&efds); @@ -1145,7 +1142,7 @@ ESL_DECLARE(esl_status_t) esl_send(esl_handle_t *handle, const char *cmd) } -ESL_DECLARE(esl_status_t) esl_send_recv_timed(esl_handle_t *handle, const char *cmd, uint32_t ms) +ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd) { const char *hval; esl_status_t status; @@ -1175,7 +1172,7 @@ ESL_DECLARE(esl_status_t) esl_send_recv_timed(esl_handle_t *handle, const char * recv: - status = esl_recv_event_timed(handle, ms, 0, &handle->last_sr_event); + status = esl_recv_event(handle, 0, &handle->last_sr_event); if (handle->last_sr_event) { char *ct = esl_event_get_header(handle->last_sr_event,"content-type"); diff --git a/libs/esl/src/include/esl.h b/libs/esl/src/include/esl.h index 9f28c3d925..d87f83f26b 100644 --- a/libs/esl/src/include/esl.h +++ b/libs/esl/src/include/esl.h @@ -389,8 +389,8 @@ ESL_DECLARE(esl_status_t) esl_sendevent(esl_handle_t *handle, esl_event_t *event \param password FreeSWITCH server password \param timeout Connection timeout, in miliseconds */ -ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, uint32_t timeout); -#define esl_connect(_handle, _host, _port, _user, _password) esl_connect_timeout(_handle, _host, _port, _user, _password, 0) +ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, long timeout); +#define esl_connect(_handle, _host, _port, _user, _password) esl_connect_timeout(_handle, _host, _port, _user, _password, -1) /*! \brief Disconnect a handle @@ -423,8 +423,7 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms \param handle Handle to be used \param cmd Raw command to send */ -ESL_DECLARE(esl_status_t) esl_send_recv_timed(esl_handle_t *handle, const char *cmd, uint32_t ms); -#define esl_send_recv(_handle, _cmd) esl_send_recv_timed(_handle, _cmd, 0) +ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd); /*! \brief Applies a filter to received events \param handle Handle to apply the filter to From b079eee5fbd31bebd54de0893cfff2fcb2640914 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Tue, 20 Jul 2010 15:31:45 -0500 Subject: [PATCH 012/161] fix windows build --- libs/esl/src/esl.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c index c63f2b1a00..979c21696f 100644 --- a/libs/esl/src/esl.c +++ b/libs/esl/src/esl.c @@ -613,8 +613,9 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * int rval = 0; const char *hval; struct addrinfo hints = { 0 }, *result; +#ifndef WIN32 int fd_flags; -#ifdef WIN32 +#else WORD wVersionRequested = MAKEWORD(2, 0); WSADATA wsaData; int err = WSAStartup(wVersionRequested, &wsaData); @@ -669,11 +670,20 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * if (timeout != -1) { fd_set wfds; - struct timeval tv = { timeout / 1000, (timeout % 1000) * 1000 }; + struct timeval tv; int r; + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; FD_ZERO(&wfds); +#ifdef WIN32 +#pragma warning( push ) +#pragma warning( disable : 4127 ) + FD_SET(handle->sock, &wfds); +#pragma warning( pop ) +#else FD_SET(handle->sock, &wfds); +#endif r = select(handle->sock + 1, NULL, &wfds, NULL, &tv); From 5e07bd336ca6de5ceafdd9ffd134478f4df3b90b Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Tue, 20 Jul 2010 22:42:04 +0200 Subject: [PATCH 013/161] Skinny: hangup and hold calls in PROCEED state as those CONNECTED --- src/mod/endpoints/mod_skinny/mod_skinny.c | 4 ++-- src/mod/endpoints/mod_skinny/skinny_server.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mod/endpoints/mod_skinny/mod_skinny.c b/src/mod/endpoints/mod_skinny/mod_skinny.c index 335edaaa6f..7062bd2e4c 100644 --- a/src/mod/endpoints/mod_skinny/mod_skinny.c +++ b/src/mod/endpoints/mod_skinny/mod_skinny.c @@ -756,7 +756,7 @@ int channel_on_hangup_callback(void *pArg, int argc, char **argv, char **columnN skinny_profile_find_listener_by_device_name_and_instance(helper->tech_pvt->profile, device_name, device_instance, &listener); if(listener) { - if(call_state == SKINNY_CONNECTED) { + if((call_state == SKINNY_PROCEED) || (call_state == SKINNY_CONNECTED)) { /* calling parties */ send_stop_tone(listener, line_instance, call_id); } send_set_lamp(listener, SKINNY_BUTTON_LINE, line_instance, SKINNY_LAMP_OFF); @@ -776,7 +776,7 @@ int channel_on_hangup_callback(void *pArg, int argc, char **argv, char **columnN default: send_display_prompt_status(listener, 0, switch_channel_cause2str(helper->cause), line_instance, call_id); } - if(call_state == SKINNY_CONNECTED) { /* calling parties */ + if((call_state == SKINNY_PROCEED) || (call_state == SKINNY_CONNECTED)) { /* calling parties */ skinny_session_stop_media(helper->tech_pvt->session, listener, line_instance); } diff --git a/src/mod/endpoints/mod_skinny/skinny_server.c b/src/mod/endpoints/mod_skinny/skinny_server.c index e3c112b531..56decd0036 100644 --- a/src/mod/endpoints/mod_skinny/skinny_server.c +++ b/src/mod/endpoints/mod_skinny/skinny_server.c @@ -898,8 +898,8 @@ switch_status_t skinny_hold_active_calls(listener_t *listener) "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", - listener->device_name, listener->device_instance, SKINNY_CONNECTED))) { + "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); } From 90da341a70794bc46ca6c42958eb1d00769ee5ff Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 20 Jul 2010 17:18:43 -0400 Subject: [PATCH 014/161] fix git screwup --- libs/esl/src/esl.c | 33 +++++++++++++-------------------- libs/esl/src/include/esl.h | 7 ++++--- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c index 979c21696f..3acab01935 100644 --- a/libs/esl/src/esl.c +++ b/libs/esl/src/esl.c @@ -607,15 +607,14 @@ ESL_DECLARE(esl_status_t) esl_listen(const char *host, esl_port_t port, esl_list } -ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, long timeout) +ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, uint32_t timeout) { char sendbuf[256]; int rval = 0; const char *hval; struct addrinfo hints = { 0 }, *result; -#ifndef WIN32 int fd_flags; -#else +#ifdef WIN32 WORD wVersionRequested = MAKEWORD(2, 0); WSADATA wsaData; int err = WSAStartup(wVersionRequested, &wsaData); @@ -650,7 +649,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * handle->sockaddr.sin_family = AF_INET; handle->sockaddr.sin_port = htons(port); - if (timeout != -1) { + if (timeout) { #ifdef WIN32 u_long arg = 1; if (ioctlsocket(handle->sock, FIONBIO, &arg) == SOCKET_ERROR) { @@ -668,22 +667,13 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * rval = connect(handle->sock, (struct sockaddr*)&handle->sockaddr, sizeof(handle->sockaddr)); - if (timeout != -1) { + if (timeout) { fd_set wfds; - struct timeval tv; + struct timeval tv = { timeout / 1000, (timeout % 1000) * 1000 }; int r; - tv.tv_sec = timeout / 1000; - tv.tv_usec = (timeout % 1000) * 1000; FD_ZERO(&wfds); -#ifdef WIN32 -#pragma warning( push ) -#pragma warning( disable : 4127 ) - FD_SET(handle->sock, &wfds); -#pragma warning( pop ) -#else FD_SET(handle->sock, &wfds); -#endif r = select(handle->sock + 1, NULL, &wfds, NULL, &tv); @@ -723,7 +713,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * handle->connected = 1; - if (esl_recv(handle)) { + if (esl_recv_timed(handle, timeout)) { snprintf(handle->err, sizeof(handle->err), "Connection Error"); goto fail; } @@ -744,7 +734,7 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * esl_send(handle, sendbuf); - if (esl_recv(handle)) { + if (esl_recv_timed(handle, timeout)) { snprintf(handle->err, sizeof(handle->err), "Authentication Error"); goto fail; } @@ -810,6 +800,10 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms struct timeval tv = { 0 }; int max, activity; esl_status_t status = ESL_SUCCESS; + + if (!ms) { + return esl_recv_event(handle, check_q, save_event); + } if (!handle || !handle->connected || handle->sock == ESL_SOCK_INVALID) { return ESL_FAIL; @@ -826,7 +820,6 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms tv.tv_usec = ms * 1000; - FD_ZERO(&rfds); FD_ZERO(&efds); @@ -1152,7 +1145,7 @@ ESL_DECLARE(esl_status_t) esl_send(esl_handle_t *handle, const char *cmd) } -ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd) +ESL_DECLARE(esl_status_t) esl_send_recv_timed(esl_handle_t *handle, const char *cmd, uint32_t ms) { const char *hval; esl_status_t status; @@ -1182,7 +1175,7 @@ ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd) recv: - status = esl_recv_event(handle, 0, &handle->last_sr_event); + status = esl_recv_event_timed(handle, ms, 0, &handle->last_sr_event); if (handle->last_sr_event) { char *ct = esl_event_get_header(handle->last_sr_event,"content-type"); diff --git a/libs/esl/src/include/esl.h b/libs/esl/src/include/esl.h index d87f83f26b..9f28c3d925 100644 --- a/libs/esl/src/include/esl.h +++ b/libs/esl/src/include/esl.h @@ -389,8 +389,8 @@ ESL_DECLARE(esl_status_t) esl_sendevent(esl_handle_t *handle, esl_event_t *event \param password FreeSWITCH server password \param timeout Connection timeout, in miliseconds */ -ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, long timeout); -#define esl_connect(_handle, _host, _port, _user, _password) esl_connect_timeout(_handle, _host, _port, _user, _password, -1) +ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *host, esl_port_t port, const char *user, const char *password, uint32_t timeout); +#define esl_connect(_handle, _host, _port, _user, _password) esl_connect_timeout(_handle, _host, _port, _user, _password, 0) /*! \brief Disconnect a handle @@ -423,7 +423,8 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms \param handle Handle to be used \param cmd Raw command to send */ -ESL_DECLARE(esl_status_t) esl_send_recv(esl_handle_t *handle, const char *cmd); +ESL_DECLARE(esl_status_t) esl_send_recv_timed(esl_handle_t *handle, const char *cmd, uint32_t ms); +#define esl_send_recv(_handle, _cmd) esl_send_recv_timed(_handle, _cmd, 0) /*! \brief Applies a filter to received events \param handle Handle to apply the filter to From 46c2d7146402d3214fccaccf1c010fcb1f4769e1 Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Tue, 20 Jul 2010 17:19:30 -0400 Subject: [PATCH 015/161] fix windows build --- libs/esl/src/esl.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c index 3acab01935..98f0420179 100644 --- a/libs/esl/src/esl.c +++ b/libs/esl/src/esl.c @@ -613,8 +613,9 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * int rval = 0; const char *hval; struct addrinfo hints = { 0 }, *result; +#ifndef WIN32 int fd_flags; -#ifdef WIN32 +#else WORD wVersionRequested = MAKEWORD(2, 0); WSADATA wsaData; int err = WSAStartup(wVersionRequested, &wsaData); @@ -669,11 +670,20 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char * if (timeout) { fd_set wfds; - struct timeval tv = { timeout / 1000, (timeout % 1000) * 1000 }; + struct timeval tv; int r; + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; FD_ZERO(&wfds); +#ifdef WIN32 +#pragma warning( push ) +#pragma warning( disable : 4127 ) + FD_SET(handle->sock, &wfds); +#pragma warning( pop ) +#else FD_SET(handle->sock, &wfds); +#endif r = select(handle->sock + 1, NULL, &wfds, NULL, &tv); From fca93f29101212a23c94799d7854b481d360dd05 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Tue, 20 Jul 2010 21:52:56 -0500 Subject: [PATCH 016/161] MODAPP-443 mod_spandsp receive t38 fax error in windows7 --- libs/spandsp/src/spandsp/t38_core.h | 2 +- libs/spandsp/src/t38_core.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/spandsp/src/spandsp/t38_core.h b/libs/spandsp/src/spandsp/t38_core.h index 9170ecd4d5..f6b0b12ea0 100644 --- a/libs/spandsp/src/spandsp/t38_core.h +++ b/libs/spandsp/src/spandsp/t38_core.h @@ -282,7 +282,7 @@ SPAN_DECLARE(int) t38_core_send_data_multi_field(t38_core_state_t *s, int data_t \param len The length of the packet contents. \param seq_no The packet sequence number. \return 0 for OK, else -1. */ -SPAN_DECLARE(int) t38_core_rx_ifp_packet(t38_core_state_t *s, const uint8_t *buf, int len, uint16_t seq_no); +SPAN_DECLARE_NONSTD(int) t38_core_rx_ifp_packet(t38_core_state_t *s, const uint8_t *buf, int len, uint16_t seq_no); /*! Set the method to be used for data rate management, as per the T.38 spec. \param s The T.38 context. diff --git a/libs/spandsp/src/t38_core.c b/libs/spandsp/src/t38_core.c index a5abc417a6..443608b26d 100644 --- a/libs/spandsp/src/t38_core.c +++ b/libs/spandsp/src/t38_core.c @@ -327,7 +327,7 @@ static __inline__ int classify_seq_no_offset(int expected, int actual) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) t38_core_rx_ifp_packet(t38_core_state_t *s, const uint8_t *buf, int len, uint16_t seq_no) +SPAN_DECLARE_NONSTD(int) t38_core_rx_ifp_packet(t38_core_state_t *s, const uint8_t *buf, int len, uint16_t seq_no) { int i; int t30_indicator; From a7c31e6fe9f7302a1770045ca3ebc5a075f2e641 Mon Sep 17 00:00:00 2001 From: Rupa Schomaker Date: Tue, 20 Jul 2010 22:21:32 -0500 Subject: [PATCH 017/161] FSCORE-637 - limit - reset rate and release resource apis Thanks Moy --- src/include/switch_limit.h | 9 ++ src/include/switch_loadable_module.h | 3 +- src/include/switch_module_interfaces.h | 2 + .../applications/mod_commands/mod_commands.c | 94 +++++++++++++++++-- src/mod/applications/mod_db/mod_db.c | 2 +- src/mod/applications/mod_hash/mod_hash.c | 20 +++- src/mod/applications/mod_redis/mod_redis.c | 2 +- src/switch_limit.c | 22 +++++ 8 files changed, 142 insertions(+), 12 deletions(-) diff --git a/src/include/switch_limit.h b/src/include/switch_limit.h index c63ac7fb57..e798f9c8af 100644 --- a/src/include/switch_limit.h +++ b/src/include/switch_limit.h @@ -76,6 +76,14 @@ SWITCH_DECLARE(switch_status_t) switch_limit_release(const char *backend, switch */ SWITCH_DECLARE(int) switch_limit_usage(const char *backend, const char *realm, const char *resource, uint32_t *rcount); +/*! + \brief reset interval usage counter for a given resource + \param backend + \param realm + \param resource +*/ +SWITCH_DECLARE(switch_status_t) switch_limit_interval_reset(const char *backend, const char *realm, const char *resource); + /*! \brief reset all usage counters \param backend to use @@ -106,6 +114,7 @@ SWITCH_DECLARE(char *) switch_limit_status(const char *backend); #define SWITCH_LIMIT_RELEASE(name) static switch_status_t name (switch_core_session_t *session, const char *realm, const char *resource) #define SWITCH_LIMIT_USAGE(name) static int name (const char *realm, const char *resource, uint32_t *rcount) #define SWITCH_LIMIT_RESET(name) static switch_status_t name (void) +#define SWITCH_LIMIT_INTERVAL_RESET(name) static switch_status_t name (const char *realm, const char *resource) #define SWITCH_LIMIT_STATUS(name) static char * name (void) #define LIMIT_IGNORE_TRANSFER_VARIABLE "limit_ignore_transfer" diff --git a/src/include/switch_loadable_module.h b/src/include/switch_loadable_module.h index d1c578b931..158de6ce63 100644 --- a/src/include/switch_loadable_module.h +++ b/src/include/switch_loadable_module.h @@ -324,13 +324,14 @@ SWITCH_MOD_DECLARE(switch_status_t) switch_module_shutdown(void); break; \ } -#define SWITCH_ADD_LIMIT(limit_int, int_name, incrptr, releaseptr, usageptr, resetptr, statusptr) \ +#define SWITCH_ADD_LIMIT(limit_int, int_name, incrptr, releaseptr, usageptr, resetptr, statusptr, interval_resetptr) \ for (;;) { \ limit_int = (switch_limit_interface_t *)switch_loadable_module_create_interface(*module_interface, SWITCH_LIMIT_INTERFACE); \ limit_int->incr = incrptr; \ limit_int->release = releaseptr; \ limit_int->usage = usageptr; \ limit_int->reset = resetptr; \ + limit_int->interval_reset = interval_resetptr; \ limit_int->status = statusptr; \ limit_int->interface_name = int_name; \ break; \ diff --git a/src/include/switch_module_interfaces.h b/src/include/switch_module_interfaces.h index 64131378de..078b83d2fd 100644 --- a/src/include/switch_module_interfaces.h +++ b/src/include/switch_module_interfaces.h @@ -526,6 +526,8 @@ struct switch_limit_interface { switch_status_t (*reset) (void); /*! freform status */ char * (*status) (void); + /*! reset interval counter */ + switch_status_t (*interval_reset) (const char *realm, const char *resource); /* internal */ switch_thread_rwlock_t *rwlock; int refs; diff --git a/src/mod/applications/mod_commands/mod_commands.c b/src/mod/applications/mod_commands/mod_commands.c index a645105994..07da553cd2 100644 --- a/src/mod/applications/mod_commands/mod_commands.c +++ b/src/mod/applications/mod_commands/mod_commands.c @@ -4227,7 +4227,7 @@ SWITCH_STANDARD_API(sql_escape) } /* LIMIT Stuff */ -#define LIMIT_USAGE_USAGE " [rate]" +#define LIMIT_USAGE_SYNTAX " [rate]" SWITCH_STANDARD_API(limit_usage_function) { int argc = 0; @@ -4255,7 +4255,7 @@ SWITCH_STANDARD_API(limit_usage_function) } if (argc < 3) { - stream->write_function(stream, "USAGE: limit_usage %s\n", LIMIT_USAGE_USAGE); + stream->write_function(stream, "USAGE: limit_usage %s\n", LIMIT_USAGE_SYNTAX); goto end; } @@ -4279,7 +4279,7 @@ end: return SWITCH_STATUS_SUCCESS; } -#define LIMIT_HASH_USAGE_USAGE " [rate] (Using deprecated limit api, check limit_usage with backend param)" +#define LIMIT_HASH_USAGE_SYNTAX " [rate] (Using deprecated limit api, check limit_usage with backend param)" SWITCH_STANDARD_API(limit_hash_usage_function) { char *mydata = NULL; @@ -4290,12 +4290,12 @@ SWITCH_STANDARD_API(limit_hash_usage_function) switch_safe_free(mydata); return ret; } else { - stream->write_function(stream, "USAGE: limit_hash_usage %s\n", LIMIT_HASH_USAGE_USAGE); + stream->write_function(stream, "USAGE: limit_hash_usage %s\n", LIMIT_HASH_USAGE_SYNTAX); return SWITCH_STATUS_SUCCESS; } } -#define LIMIT_STATUS_USAGE "" +#define LIMIT_STATUS_SYNTAX "" SWITCH_STANDARD_API(limit_status_function) { int argc = 0; @@ -4310,7 +4310,7 @@ SWITCH_STANDARD_API(limit_status_function) } if (argc < 1) { - stream->write_function(stream, "USAGE: limit_status %s\n", LIMIT_STATUS_USAGE); + stream->write_function(stream, "USAGE: limit_status %s\n", LIMIT_STATUS_SYNTAX); goto end; } @@ -4325,7 +4325,7 @@ end: return SWITCH_STATUS_SUCCESS; } -#define LIMIT_RESET_USAGE "" +#define LIMIT_RESET_SYNTAX "" SWITCH_STANDARD_API(limit_reset_function) { int argc = 0; @@ -4340,7 +4340,7 @@ SWITCH_STANDARD_API(limit_reset_function) } if (argc < 1) { - stream->write_function(stream, "USAGE: limit_reset %s\n", LIMIT_RESET_USAGE); + stream->write_function(stream, "USAGE: limit_reset %s\n", LIMIT_RESET_SYNTAX); goto end; } @@ -4354,6 +4354,81 @@ end: return SWITCH_STATUS_SUCCESS; } +#define LIMIT_RELEASE_SYNTAX " [realm] [resource]" +SWITCH_STANDARD_API(uuid_limit_release_function) +{ + int argc = 0; + char *argv[5] = { 0 }; + char *mydata = NULL; + char *realm = NULL; + char *resource = NULL; + switch_core_session_t *sess = NULL; + + if (!zstr(cmd)) { + mydata = strdup(cmd); + switch_assert(mydata); + argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); + } + + if (argc < 2) { + stream->write_function(stream, "USAGE: uuid_limit_release %s\n", LIMIT_RELEASE_SYNTAX); + goto end; + } + + if (argc > 2) { + realm = argv[2]; + } + + if (argc > 3) { + resource = argv[3]; + } + + sess = switch_core_session_locate(argv[0]); + if (!sess) { + stream->write_function(stream, "-ERR did not find a session with uuid %s\n", argv[0]); + goto end; + } + + switch_limit_release(argv[1], sess, realm, resource); + + switch_core_session_rwunlock(sess); + + stream->write_function(stream, "+OK"); + +end: + switch_safe_free(mydata); + + return SWITCH_STATUS_SUCCESS; +} + +#define LIMIT_INTERVAL_RESET_SYNTAX " " +SWITCH_STANDARD_API(limit_interval_reset_function) +{ + int argc = 0; + char *argv[5] = { 0 }; + char *mydata = NULL; + + if (!zstr(cmd)) { + mydata = strdup(cmd); + switch_assert(mydata); + argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); + } + + if (argc < 3) { + stream->write_function(stream, "USAGE: limit_interval_reset %s\n", LIMIT_INTERVAL_RESET_SYNTAX); + goto end; + } + + switch_limit_interval_reset(argv[0], argv[1], argv[2]); + + stream->write_function(stream, "+OK"); + +end: + switch_safe_free(mydata); + + return SWITCH_STATUS_SUCCESS; +} + SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_commands_shutdown) { int x; @@ -4446,6 +4521,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_commands_load) SWITCH_ADD_API(commands_api_interface, "limit_hash_usage", "Deprecated: gets the usage count of a limited resource", limit_hash_usage_function, " "); SWITCH_ADD_API(commands_api_interface, "limit_status", "Gets the status of a limit backend", limit_status_function, ""); SWITCH_ADD_API(commands_api_interface, "limit_reset", "Reset the counters of a limit backend", limit_reset_function, ""); + SWITCH_ADD_API(commands_api_interface, "limit_interval_reset", "Reset the interval counter for a limited resource", limit_interval_reset_function, LIMIT_INTERVAL_RESET_SYNTAX); SWITCH_ADD_API(commands_api_interface, "load", "Load Module", load_function, LOAD_SYNTAX); SWITCH_ADD_API(commands_api_interface, "log", "Log", log_function, LOG_SYNTAX); SWITCH_ADD_API(commands_api_interface, "md5", "md5", md5_function, ""); @@ -4494,6 +4570,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_commands_load) SWITCH_ADD_API(commands_api_interface, "uuid_getvar", "uuid_getvar", uuid_getvar_function, GETVAR_SYNTAX); SWITCH_ADD_API(commands_api_interface, "uuid_hold", "hold", uuid_hold_function, HOLD_SYNTAX); SWITCH_ADD_API(commands_api_interface, "uuid_kill", "Kill Channel", kill_function, KILL_SYNTAX); + SWITCH_ADD_API(commands_api_interface, "uuid_limit_release", "Release limit resource", uuid_limit_release_function, LIMIT_RELEASE_SYNTAX); SWITCH_ADD_API(commands_api_interface, "uuid_loglevel", "set loglevel on session", uuid_loglevel, UUID_LOGLEVEL_SYNTAX); SWITCH_ADD_API(commands_api_interface, "uuid_media", "media", uuid_media_function, MEDIA_SYNTAX); SWITCH_ADD_API(commands_api_interface, "uuid_park", "Park Channel", park_function, PARK_SYNTAX); @@ -4600,6 +4677,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_commands_load) switch_console_set_complete("add uuid_getvar ::console::list_uuid"); switch_console_set_complete("add uuid_hold ::console::list_uuid"); switch_console_set_complete("add uuid_kill ::console::list_uuid"); + switch_console_set_complete("add uuid_limit_release ::console::list_uuid"); switch_console_set_complete("add uuid_loglevel ::console::list_uuid console"); switch_console_set_complete("add uuid_loglevel ::console::list_uuid alert"); switch_console_set_complete("add uuid_loglevel ::console::list_uuid crit"); diff --git a/src/mod/applications/mod_db/mod_db.c b/src/mod/applications/mod_db/mod_db.c index d22f1a8eec..088d9d0a85 100644 --- a/src/mod/applications/mod_db/mod_db.c +++ b/src/mod/applications/mod_db/mod_db.c @@ -620,7 +620,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_db_load) *module_interface = switch_loadable_module_create_module_interface(pool, modname); /* register limit interfaces */ - SWITCH_ADD_LIMIT(limit_interface, "db", limit_incr_db, limit_release_db, limit_usage_db, limit_reset_db, limit_status_db); + SWITCH_ADD_LIMIT(limit_interface, "db", limit_incr_db, limit_release_db, limit_usage_db, limit_reset_db, limit_status_db, NULL); SWITCH_ADD_APP(app_interface, "db", "Insert to the db", DB_DESC, db_function, DB_USAGE, SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "group", "Manage a group", GROUP_DESC, group_function, GROUP_USAGE, SAF_SUPPORT_NOMEDIA); diff --git a/src/mod/applications/mod_hash/mod_hash.c b/src/mod/applications/mod_hash/mod_hash.c index f4eec4f3c1..a13a1874ae 100644 --- a/src/mod/applications/mod_hash/mod_hash.c +++ b/src/mod/applications/mod_hash/mod_hash.c @@ -360,6 +360,24 @@ SWITCH_LIMIT_RESET(limit_reset_hash) return SWITCH_STATUS_GENERR; } +SWITCH_LIMIT_INTERVAL_RESET(limit_interval_reset_hash) +{ + char *hash_key = NULL; + limit_hash_item_t *item = NULL; + + switch_thread_rwlock_rdlock(globals.limit_hash_rwlock); + + hash_key = switch_mprintf("%s_%s", realm, resource); + if ((item = switch_core_hash_find(globals.limit_hash, hash_key))) { + item->rate_usage = 0; + item->last_check = switch_epoch_time_now(NULL); + } + + switch_safe_free(hash_key); + switch_thread_rwlock_unlock(globals.limit_hash_rwlock); + return SWITCH_STATUS_SUCCESS; +} + SWITCH_LIMIT_STATUS(limit_status_hash) { /* @@ -892,7 +910,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_hash_load) *module_interface = switch_loadable_module_create_module_interface(pool, modname); /* register limit interfaces */ - SWITCH_ADD_LIMIT(limit_interface, "hash", limit_incr_hash, limit_release_hash, limit_usage_hash, limit_reset_hash, limit_status_hash); + SWITCH_ADD_LIMIT(limit_interface, "hash", limit_incr_hash, limit_release_hash, limit_usage_hash, limit_reset_hash, limit_status_hash, limit_interval_reset_hash); switch_scheduler_add_task(switch_epoch_time_now(NULL) + LIMIT_HASH_CLEANUP_INTERVAL, limit_hash_cleanup_callback, "limit_hash_cleanup", "mod_hash", 0, NULL, SSHF_NONE); diff --git a/src/mod/applications/mod_redis/mod_redis.c b/src/mod/applications/mod_redis/mod_redis.c index ca509520c0..75dfd6fdd7 100755 --- a/src/mod/applications/mod_redis/mod_redis.c +++ b/src/mod/applications/mod_redis/mod_redis.c @@ -300,7 +300,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_redis_load) /* If FreeSWITCH was restarted and we still have active calls, decrement them so our global count stays valid */ limit_reset_redis(); - SWITCH_ADD_LIMIT(limit_interface, "redis", limit_incr_redis, limit_release_redis, limit_usage_redis, limit_reset_redis, limit_status_redis); + SWITCH_ADD_LIMIT(limit_interface, "redis", limit_incr_redis, limit_release_redis, limit_usage_redis, limit_reset_redis, limit_status_redis, NULL); return SWITCH_STATUS_SUCCESS; } diff --git a/src/switch_limit.c b/src/switch_limit.c index f76e1de1c0..9313ecf5cf 100644 --- a/src/switch_limit.c +++ b/src/switch_limit.c @@ -196,6 +196,28 @@ end: return status; } +SWITCH_DECLARE(switch_status_t) switch_limit_interval_reset(const char *backend, const char *realm, const char *resource) { + switch_limit_interface_t *limit = NULL; + int status = SWITCH_STATUS_SUCCESS; + + /* locate impl, call appropriate func */ + if (!(limit = get_backend(backend))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Limit subsystem %s not found!\n", backend); + switch_goto_status(SWITCH_STATUS_GENERR, end); + } + + if (!limit->interval_reset) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Limit subsystem %s does not implement interval_reset!\n", backend); + switch_goto_status(SWITCH_STATUS_GENERR, end); + } + + status = limit->interval_reset(realm, resource); + +end: + release_backend(limit); + return status; +} + SWITCH_DECLARE(char *) switch_limit_status(const char *backend) { switch_limit_interface_t *limit = NULL; char *status = NULL; From beec142c5cf27d218e7ea016872e69a27fce897b Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 21 Jul 2010 02:46:35 -0500 Subject: [PATCH 018/161] fifo up --- src/mod/applications/mod_fifo/mod_fifo.c | 340 +++++++++++++++++++---- src/switch_loadable_module.c | 19 +- 2 files changed, 293 insertions(+), 66 deletions(-) diff --git a/src/mod/applications/mod_fifo/mod_fifo.c b/src/mod/applications/mod_fifo/mod_fifo.c index 0deeff2a31..e5771b5a11 100644 --- a/src/mod/applications/mod_fifo/mod_fifo.c +++ b/src/mod/applications/mod_fifo/mod_fifo.c @@ -48,6 +48,7 @@ typedef enum { static outbound_strategy_t default_strategy = NODE_STRATEGY_RINGALL; +static int marker = 1; typedef struct { int nelm; @@ -57,6 +58,24 @@ typedef struct { switch_mutex_t *mutex; } fifo_queue_t; + + + +static int check_caller_outbound_call(const char *key); +static void add_caller_outbound_call(const char *key, switch_call_cause_t *cancel_cause); +static void del_caller_outbound_call(const char *key); +static void cancel_caller_outbound_call(const char *key, switch_call_cause_t cause); +static int check_consumer_outbound_call(const char *key); +static void add_consumer_outbound_call(const char *key, switch_call_cause_t *cancel_cause); +static void del_consumer_outbound_call(const char *key); +static void cancel_consumer_outbound_call(const char *key, switch_call_cause_t cause); + + +static int check_bridge_call(const char *key); +static void add_bridge_call(const char *key); +static void del_bridge_call(const char *key); + + switch_status_t fifo_queue_create(fifo_queue_t **queue, int size, switch_memory_pool_t *pool) { fifo_queue_t *q; @@ -127,24 +146,34 @@ static int fifo_queue_size(fifo_queue_t *queue) static switch_status_t fifo_queue_pop(fifo_queue_t *queue, switch_event_t **pop, switch_bool_t remove) { - int i; + int i, j; switch_mutex_lock(queue->mutex); if (queue->idx == 0) { switch_mutex_unlock(queue->mutex); - *pop = NULL; return SWITCH_STATUS_FALSE; } - if (remove) { - *pop = queue->data[0]; - } else { - switch_event_dup(pop, queue->data[0]); + for (j = 0; j < queue->idx; j++) { + const char *uuid = switch_event_get_header(queue->data[j], "unique-id"); + if (uuid && !check_caller_outbound_call(uuid)) { + if (remove) { + *pop = queue->data[j]; + } else { + switch_event_dup(pop, queue->data[j]); + } + break; + } } + if (j == queue->idx) { + switch_mutex_unlock(queue->mutex); + return SWITCH_STATUS_FALSE; + } + if (remove) { - for (i = 1; i < queue->idx; i++) { + for (i = j+1; i < queue->idx; i++) { queue->data[i-1] = queue->data[i]; queue->data[i] = NULL; change_pos(queue->data[i-1], i); @@ -162,10 +191,15 @@ static switch_status_t fifo_queue_pop(fifo_queue_t *queue, switch_event_t **pop, static switch_status_t fifo_queue_pop_nameval(fifo_queue_t *queue, const char *name, const char *val, switch_event_t **pop, switch_bool_t remove) { - int i, j; + int i, j, force = 0; switch_mutex_lock(queue->mutex); + if (name && *name == '+') { + name++; + force = 1; + } + if (queue->idx == 0 || zstr(name) || zstr(val)) { switch_mutex_unlock(queue->mutex); return SWITCH_STATUS_FALSE; @@ -173,7 +207,8 @@ static switch_status_t fifo_queue_pop_nameval(fifo_queue_t *queue, const char *n for (j = 0; j < queue->idx; j++) { const char *j_val = switch_event_get_header(queue->data[j], name); - if (j_val && val && !strcmp(j_val, val)) { + const char *uuid = switch_event_get_header(queue->data[j], "unique-id"); + if (j_val && val && !strcmp(j_val, val) && (force || !check_caller_outbound_call(uuid))) { if (remove) { *pop = queue->data[j]; @@ -502,8 +537,12 @@ static switch_status_t consumer_read_frame_callback(switch_core_session_t *sessi } static struct { - switch_hash_t *orig_hash; - switch_mutex_t *orig_mutex; + switch_hash_t *caller_orig_hash; + switch_hash_t *consumer_orig_hash; + switch_hash_t *bridge_hash; + switch_mutex_t *caller_orig_mutex; + switch_mutex_t *consumer_orig_mutex; + switch_mutex_t *bridge_mutex; switch_hash_t *fifo_hash; switch_mutex_t *mutex; switch_mutex_t *sql_mutex; @@ -520,6 +559,115 @@ static struct { } globals; + +static int check_caller_outbound_call(const char *key) +{ + int x = 0; + + switch_mutex_lock(globals.caller_orig_mutex); + x = !!switch_core_hash_find(globals.caller_orig_hash, key); + switch_mutex_unlock(globals.caller_orig_mutex); + return x; + +} + + +static void add_caller_outbound_call(const char *key, switch_call_cause_t *cancel_cause) +{ + switch_mutex_lock(globals.caller_orig_mutex); + switch_core_hash_insert(globals.caller_orig_hash, key, cancel_cause); + switch_mutex_unlock(globals.caller_orig_mutex); +} + +static void del_caller_outbound_call(const char *key) +{ + switch_mutex_lock(globals.caller_orig_mutex); + switch_core_hash_delete(globals.caller_orig_hash, key); + switch_mutex_unlock(globals.caller_orig_mutex); +} + +static void cancel_caller_outbound_call(const char *key, switch_call_cause_t cause) +{ + switch_call_cause_t *cancel_cause = NULL; + + switch_mutex_lock(globals.caller_orig_mutex); + if ((cancel_cause = (switch_call_cause_t *) switch_core_hash_find(globals.caller_orig_hash, key))) { + *cancel_cause = cause; + } + switch_mutex_unlock(globals.caller_orig_mutex); + + fifo_caller_del(key); + +} + + + +static int check_bridge_call(const char *key) +{ + int x = 0; + + switch_mutex_lock(globals.bridge_mutex); + x = !!switch_core_hash_find(globals.bridge_hash, key); + switch_mutex_unlock(globals.bridge_mutex); + return x; + +} + + +static void add_bridge_call(const char *key) +{ + switch_mutex_lock(globals.bridge_mutex); + switch_core_hash_insert(globals.bridge_hash, key, (void *)&marker); + switch_mutex_unlock(globals.bridge_mutex); +} + +static void del_bridge_call(const char *key) +{ + switch_mutex_lock(globals.bridge_mutex); + switch_core_hash_delete(globals.bridge_hash, key); + switch_mutex_unlock(globals.bridge_mutex); +} + + +static int check_consumer_outbound_call(const char *key) +{ + int x = 0; + + switch_mutex_lock(globals.consumer_orig_mutex); + x = !!switch_core_hash_find(globals.consumer_orig_hash, key); + switch_mutex_unlock(globals.consumer_orig_mutex); + return x; + +} + +static void add_consumer_outbound_call(const char *key, switch_call_cause_t *cancel_cause) +{ + switch_mutex_lock(globals.consumer_orig_mutex); + switch_core_hash_insert(globals.consumer_orig_hash, key, cancel_cause); + switch_mutex_unlock(globals.consumer_orig_mutex); +} + +static void del_consumer_outbound_call(const char *key) +{ + switch_mutex_lock(globals.consumer_orig_mutex); + switch_core_hash_delete(globals.consumer_orig_hash, key); + switch_mutex_unlock(globals.consumer_orig_mutex); +} + +static void cancel_consumer_outbound_call(const char *key, switch_call_cause_t cause) +{ + switch_call_cause_t *cancel_cause = NULL; + + switch_mutex_lock(globals.consumer_orig_mutex); + if ((cancel_cause = (switch_call_cause_t *) switch_core_hash_find(globals.consumer_orig_hash, key))) { + *cancel_cause = cause; + } + switch_mutex_unlock(globals.consumer_orig_mutex); + +} + + + switch_cache_db_handle_t *fifo_get_db_handle(void) { switch_cache_db_connection_options_t options = { {0} }; @@ -633,7 +781,7 @@ static fifo_node_t *create_node(const char *name, uint32_t importance, switch_mu switch_mutex_init(&node->mutex, SWITCH_MUTEX_NESTED, node->pool); cbt.buf = outbound_count; cbt.len = sizeof(outbound_count); - sql = switch_mprintf("select count(*) from fifo_outbound where taking_calls = 1 and fifo_name = '%q'", name); + sql = switch_mprintf("select count(*) from fifo_outbound where fifo_name = '%q'", name); fifo_execute_sql_callback(mutex, sql, sql2str_callback, &cbt); if (atoi(outbound_count) > 0) { node->has_outbound = 1; @@ -686,6 +834,7 @@ struct callback_helper { switch_memory_pool_t *pool; struct call_helper *rows[MAX_ROWS]; int rowcount; + int ready; }; @@ -699,6 +848,7 @@ static switch_status_t messagehook (switch_core_session_t *session, switch_core_ consumer_session = session; consumer_channel = switch_core_session_get_channel(consumer_session); + outbound_id = switch_channel_get_variable(consumer_channel, "fifo_outbound_uuid"); switch (msg->message_id) { case SWITCH_MESSAGE_INDICATE_BRIDGE: @@ -706,6 +856,7 @@ static switch_status_t messagehook (switch_core_session_t *session, switch_core_ if ((caller_session = switch_core_session_locate(msg->string_arg))) { caller_channel = switch_core_session_get_channel(caller_session); if (msg->message_id == SWITCH_MESSAGE_INDICATE_BRIDGE) { + cancel_consumer_outbound_call(outbound_id, SWITCH_CAUSE_ORIGINATOR_CANCEL); switch_core_session_soft_lock(caller_session, 5); } else { switch_core_session_soft_unlock(caller_session); @@ -723,8 +874,7 @@ static switch_status_t messagehook (switch_core_session_t *session, switch_core_ default: goto end; } - - outbound_id = switch_channel_get_variable(consumer_channel, "fifo_outbound_uuid"); + switch (msg->message_id) { case SWITCH_MESSAGE_INDICATE_BRIDGE: @@ -927,33 +1077,6 @@ static switch_status_t messagehook (switch_core_session_t *session, switch_core_ return SWITCH_STATUS_SUCCESS; } -static void add_outbound_call(const char *key, switch_call_cause_t *cancel_cause) -{ - switch_mutex_lock(globals.orig_mutex); - switch_core_hash_insert(globals.orig_hash, key, cancel_cause); - switch_mutex_unlock(globals.orig_mutex); -} - -static void del_outbound_call(const char *key) -{ - switch_mutex_lock(globals.orig_mutex); - switch_core_hash_delete(globals.orig_hash, key); - switch_mutex_unlock(globals.orig_mutex); -} - -static void cancel_outbound_call(const char *key, switch_call_cause_t cause) -{ - switch_call_cause_t *cancel_cause = NULL; - - switch_mutex_lock(globals.orig_mutex); - if ((cancel_cause = (switch_call_cause_t *) switch_core_hash_find(globals.orig_hash, key))) { - *cancel_cause = cause; - } - switch_mutex_unlock(globals.orig_mutex); - - fifo_caller_del(key); - -} static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void *obj) { @@ -981,8 +1104,10 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void char uuid_str[SWITCH_UUID_FORMATTED_LENGTH + 1]; switch_call_cause_t cancel_cause = 0; char *uuid_list = NULL; - int connected = 0; + int connected = 0, total = 0; const char *codec; + struct call_helper *rows[MAX_ROWS] = { 0 }; + int rowcount = 0; switch_uuid_get(&uuid); switch_uuid_format(uuid_str, &uuid); @@ -997,9 +1122,35 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void node = switch_core_hash_find(globals.fifo_hash, node_name); switch_mutex_unlock(globals.mutex); + for (i = 0; i < cbh->rowcount; i++) { + struct call_helper *h = cbh->rows[i]; + + if (check_consumer_outbound_call(h->uuid) || check_bridge_call(h->uuid)) { + continue; + } + + rows[rowcount++] = h; + add_consumer_outbound_call(h->uuid, &cancel_cause); + total++; + } + + for (i = 0; i < rowcount; i++) { + struct call_helper *h = rows[i]; + cbh->rows[i] = h; + } + + cbh->rowcount = rowcount; + + cbh->ready = 1; + + if (!total) { + goto end; + } + + if (node) { switch_mutex_lock(node->mutex); - node->busy = switch_epoch_time_now(NULL) + 600; + //node->busy = switch_epoch_time_now(NULL) + 600; node->ring_consumer_count = 1; switch_mutex_unlock(node->mutex); } else { @@ -1113,11 +1264,14 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void for (i = 0; i < cbh->rowcount; i++) { struct call_helper *h = cbh->rows[i]; char *sql = switch_mprintf("update fifo_outbound set ring_count=ring_count+1 where uuid='%s'", h->uuid); + fifo_execute_sql(sql, globals.sql_mutex); switch_safe_free(sql); } + if (!total) goto end; + if ((codec = switch_event_get_header(pop, "variable_sip_use_codec_name"))) { const char *rate = switch_event_get_header(pop, "variable_sip_use_codec_rate"); const char *ptime = switch_event_get_header(pop, "variable_sip_use_codec_ptime"); @@ -1132,11 +1286,11 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void switch_event_add_header_string(ovars, SWITCH_STACK_BOTTOM, "absolute_codec_string", nstr); } - add_outbound_call(id, &cancel_cause); + add_caller_outbound_call(id, &cancel_cause); status = switch_ivr_originate(NULL, &session, &cause, originate_string, timeout, NULL, NULL, NULL, NULL, ovars, SOF_NONE, &cancel_cause); - del_outbound_call(id); + del_caller_outbound_call(id); if (status != SWITCH_STATUS_SUCCESS || cause != SWITCH_CAUSE_SUCCESS) { @@ -1217,7 +1371,12 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void switch_channel_set_caller_extension(channel, extension); switch_channel_set_state(channel, CS_EXECUTE); switch_channel_wait_for_state(channel, NULL, CS_EXECUTE); + switch_channel_wait_for_flag(channel, CF_BRIDGED, SWITCH_TRUE, 5000, NULL); + switch_core_session_rwunlock(session); + + + for (i = 0; i < cbh->rowcount; i++) { struct call_helper *h = cbh->rows[i]; @@ -1228,10 +1387,19 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void end: + cbh->ready = 1; + + for (i = 0; i < cbh->rowcount; i++) { + struct call_helper *h = cbh->rows[i]; + del_consumer_outbound_call(h->uuid); + } + switch_safe_free(originate_string); switch_safe_free(uuid_list); - switch_event_destroy(&ovars); + if (ovars) { + switch_event_destroy(&ovars); + } if (pop_dup) { switch_event_destroy(&pop_dup); @@ -1240,7 +1408,7 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void if (node) { switch_mutex_lock(node->mutex); node->ring_consumer_count = 0; - node->busy = switch_epoch_time_now(NULL) + connected; + //node->busy = switch_epoch_time_now(NULL) + connected; switch_mutex_unlock(node->mutex); } @@ -1273,7 +1441,7 @@ static void *SWITCH_THREAD_FUNC o_thread_run(switch_thread_t *thread, void *obj) if (node) { switch_mutex_lock(node->mutex); node->ring_consumer_count++; - node->busy = switch_epoch_time_now(NULL) + 600; + //node->busy = switch_epoch_time_now(NULL) + 600; switch_mutex_unlock(node->mutex); } @@ -1375,7 +1543,7 @@ static void *SWITCH_THREAD_FUNC o_thread_run(switch_thread_t *thread, void *obj) if (node->ring_consumer_count-- < 0) { node->ring_consumer_count = 0; } - node->busy = switch_epoch_time_now(NULL) + connected; + //node->busy = switch_epoch_time_now(NULL) + connected; switch_mutex_unlock(node->mutex); } switch_core_destroy_memory_pool(&h->pool); @@ -1484,10 +1652,15 @@ static void find_consumers(fifo_node_t *node) fifo_execute_sql_callback(globals.sql_mutex, sql, place_call_ringall_callback, cbh); if (cbh->rowcount) { + int sanity = 40; + switch_threadattr_create(&thd_attr, cbh->pool); switch_threadattr_detach_set(thd_attr, 1); switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); switch_thread_create(&thread, thd_attr, ringall_thread_run, cbh, cbh->pool); + while(--sanity > 0 && !cbh->ready) { + switch_yield(100000); + } } } @@ -1517,16 +1690,18 @@ static void *SWITCH_THREAD_FUNC node_thread_run(switch_thread_t *thread, void *o switch_hash_this(hi, &var, NULL, &val); if ((node = (fifo_node_t *) val)) { switch_mutex_lock(node->mutex); - if (node->has_outbound && node->ready && switch_epoch_time_now(NULL) > node->busy) { + if (node->has_outbound && node->ready) {// && switch_epoch_time_now(NULL) > node->busy) { ppl_waiting = node_consumer_wait_count(node); consumer_total = node->consumer_count; idle_consumers = node_idle_consumers(node); - - /* switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, - "%s waiting %d consumer_total %d idle_consumers %d ring_consumers %d\n", node->name, ppl_waiting, consumer_total, idle_consumers, node->ring_consumer_count); */ + + //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG5, + //"%s waiting %d consumer_total %d idle_consumers %d ring_consumers %d\n", + //node->name, ppl_waiting, consumer_total, idle_consumers, node->ring_consumer_count); if ((ppl_waiting - node->ring_consumer_count > 0) && (!consumer_total || !idle_consumers)) { find_consumers(node); + switch_yield(1000000); } } switch_mutex_unlock(node->mutex); @@ -1579,7 +1754,7 @@ static void check_ocancel(switch_core_session_t *session) //channel = switch_core_session_get_channel(session); - cancel_outbound_call(switch_core_session_get_uuid(session), SWITCH_CAUSE_ORIGINATOR_CANCEL); + cancel_caller_outbound_call(switch_core_session_get_uuid(session), SWITCH_CAUSE_ORIGINATOR_CANCEL); } @@ -1693,6 +1868,13 @@ static uint32_t fifo_add_outbound(const char *node_name, const char *url, uint32 } +SWITCH_STANDARD_API(fifo_check_bridge_function) +{ + stream->write_function(stream, "%s", (cmd && check_bridge_call(cmd)) ? "true" : "false"); + + return SWITCH_STATUS_SUCCESS; +} + SWITCH_STANDARD_API(fifo_add_outbound_function) { char *data = NULL, *argv[4] = { 0 }; @@ -1739,6 +1921,7 @@ static void dec_use_count(switch_channel_t *channel) long now = (long) switch_epoch_time_now(NULL); if ((outbound_id = switch_channel_get_variable(channel, "fifo_outbound_uuid"))) { + del_bridge_call(outbound_id); sql = switch_mprintf("update fifo_outbound set use_count=use_count-1, stop_time=%ld, next_avail=%ld + lag where use_count > 0 and uuid='%q'", now, now, outbound_id); fifo_execute_sql(sql, globals.sql_mutex); @@ -1780,6 +1963,8 @@ SWITCH_STANDARD_APP(fifo_track_call_function) return; } + add_bridge_call(data); + switch_channel_set_variable(channel, "fifo_outbound_uuid", data); if (switch_channel_direction(channel) == SWITCH_CALL_DIRECTION_OUTBOUND) { @@ -2344,15 +2529,29 @@ SWITCH_STANDARD_APP(fifo_function) } if (node) { - const char *varval; + const char *varval, *check = NULL; + check = switch_channel_get_variable(channel, "fifo_bridge_uuid_required"); + if ((varval = switch_channel_get_variable(channel, "fifo_bridge_uuid"))) { + if (check_bridge_call(varval) && switch_true(check)) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s Call has already been answered\n", + switch_channel_get_name(channel)); + goto done; + } + for (x = 0; x < MAX_PRI; x++) { - if (fifo_queue_pop_nameval(node->fifo_list[pop_array[x]], "unique-id", varval, &pop, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS && pop) { - cancel_outbound_call(varval, SWITCH_CAUSE_PICKED_OFF); + if (fifo_queue_pop_nameval(node->fifo_list[pop_array[x]], "+unique-id", varval, &pop, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS && pop) { + cancel_caller_outbound_call(varval, SWITCH_CAUSE_PICKED_OFF); break; } } + if (!pop && switch_true(check)) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s Call has already been answered\n", + switch_channel_get_name(channel)); + + goto done; + } } if (!pop && (varval = switch_channel_get_variable(channel, "fifo_target_skill"))) { @@ -2582,12 +2781,18 @@ SWITCH_STANDARD_APP(fifo_function) } if (outbound_id) { + cancel_consumer_outbound_call(outbound_id, SWITCH_CAUSE_ORIGINATOR_CANCEL); + add_bridge_call(outbound_id); + sql = switch_mprintf("update fifo_outbound set stop_time=0,start_time=%ld,use_count=use_count+1,outbound_fail_count=0 where uuid='%s'", switch_epoch_time_now(NULL), outbound_id); fifo_execute_sql(sql, globals.sql_mutex); switch_safe_free(sql); } + add_bridge_call(switch_core_session_get_uuid(other_session)); + add_bridge_call(switch_core_session_get_uuid(session)); + sql = switch_mprintf("insert into fifo_bridge " "(fifo_name,caller_uuid,caller_caller_id_name,caller_caller_id_number,consumer_uuid,consumer_outgoing_uuid,bridge_start) " "values ('%q','%q','%q','%q','%q','%q',%ld)", @@ -2604,6 +2809,7 @@ SWITCH_STANDARD_APP(fifo_function) fifo_execute_sql(sql, globals.sql_mutex); switch_safe_free(sql); + switch_ivr_multi_threaded_bridge(session, other_session, on_dtmf, other_session, session); if (outbound_id) { @@ -2616,8 +2822,13 @@ SWITCH_STANDARD_APP(fifo_function) fifo_execute_sql(sql, globals.sql_mutex); switch_safe_free(sql); + + del_bridge_call(outbound_id); + } + del_bridge_call(switch_core_session_get_uuid(session)); + del_bridge_call(switch_core_session_get_uuid(other_session)); if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) { @@ -3779,7 +3990,7 @@ static void fifo_member_del(char *fifo_name, char *originate_string) cbt.buf = outbound_count; cbt.len = sizeof(outbound_count); - sql = switch_mprintf("select count(*) from fifo_outbound where taking_calls = 1 and fifo_name = '%q'", node->name); + sql = switch_mprintf("select count(*) from fifo_outbound where fifo_name = '%q'", node->name); fifo_execute_sql_callback(globals.sql_mutex, sql, sql2str_callback, &cbt); if (atoi(outbound_count) > 0) { node->has_outbound = 1; @@ -3895,8 +4106,12 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_fifo_load) switch_core_new_memory_pool(&globals.pool); switch_core_hash_init(&globals.fifo_hash, globals.pool); - switch_core_hash_init(&globals.orig_hash, globals.pool); - switch_mutex_init(&globals.orig_mutex, SWITCH_MUTEX_NESTED, globals.pool); + switch_core_hash_init(&globals.caller_orig_hash, globals.pool); + switch_core_hash_init(&globals.consumer_orig_hash, globals.pool); + switch_core_hash_init(&globals.bridge_hash, globals.pool); + switch_mutex_init(&globals.caller_orig_mutex, SWITCH_MUTEX_NESTED, globals.pool); + switch_mutex_init(&globals.consumer_orig_mutex, SWITCH_MUTEX_NESTED, globals.pool); + switch_mutex_init(&globals.bridge_mutex, SWITCH_MUTEX_NESTED, globals.pool); switch_mutex_init(&globals.mutex, SWITCH_MUTEX_NESTED, globals.pool); switch_mutex_init(&globals.sql_mutex, SWITCH_MUTEX_NESTED, globals.pool); @@ -3919,11 +4134,13 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_fifo_load) SWITCH_ADD_API(commands_api_interface, "fifo", "Return data about a fifo", fifo_api_function, FIFO_API_SYNTAX); SWITCH_ADD_API(commands_api_interface, "fifo_member", "Add members to a fifo", fifo_member_api_function, FIFO_MEMBER_API_SYNTAX); SWITCH_ADD_API(commands_api_interface, "fifo_add_outbound", "Add outbound members to a fifo", fifo_add_outbound_function, " []"); + SWITCH_ADD_API(commands_api_interface, "fifo_check_bridge", "check if uuid is in a bridge", fifo_check_bridge_function, "|"); switch_console_set_complete("add fifo list"); switch_console_set_complete("add fifo list_verbose"); switch_console_set_complete("add fifo count"); switch_console_set_complete("add fifo has_outbound"); switch_console_set_complete("add fifo importance"); + switch_console_set_complete("add fifo_check_bridge ::console::list_uuid"); start_node_thread(globals.pool); @@ -3960,12 +4177,13 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_fifo_shutdown) node = (fifo_node_t *) val; switch_thread_rwlock_wrlock(node->rwlock); + switch_mutex_lock(node->mutex); for (x = 0; x < MAX_PRI; x++) { while (fifo_queue_pop(node->fifo_list[x], &pop, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) { switch_event_destroy(&pop); } } - + switch_mutex_unlock(node->mutex); switch_core_hash_delete(globals.fifo_hash, node->name); switch_core_hash_destroy(&node->consumer_hash); switch_thread_rwlock_unlock(node->rwlock); diff --git a/src/switch_loadable_module.c b/src/switch_loadable_module.c index 97cb5e8d70..811383817c 100644 --- a/src/switch_loadable_module.c +++ b/src/switch_loadable_module.c @@ -1627,7 +1627,8 @@ SWITCH_DECLARE(switch_status_t) switch_api_execute(const char *cmd, const char * { switch_api_interface_t *api; switch_status_t status; - + char *myarg = NULL, *argp = NULL; + switch_assert(stream != NULL); switch_assert(stream->data != NULL); switch_assert(stream->write_function != NULL); @@ -1636,18 +1637,25 @@ SWITCH_DECLARE(switch_status_t) switch_api_execute(const char *cmd, const char * switch_event_create(&stream->param_event, SWITCH_EVENT_API); } + if (arg) { + myarg = strdup(arg); + argp = myarg; + while(*argp == ' ') argp++; + while(end_of(argp) == ' ') end_of(argp) = '\0'; + } + if (stream->param_event) { if (cmd) { switch_event_add_header_string(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command", cmd); } - if (arg) { - switch_event_add_header_string(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command-Argument", arg); + if (argp) { + switch_event_add_header_string(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command-Argument", argp); } } if (cmd && (api = switch_loadable_module_get_api_interface(cmd)) != 0) { - if ((status = api->function(arg, session, stream)) != SWITCH_STATUS_SUCCESS) { + if ((status = api->function(argp, session, stream)) != SWITCH_STATUS_SUCCESS) { stream->write_function(stream, "COMMAND RETURNED ERROR!\n"); } UNPROTECT_INTERFACE(api); @@ -1660,7 +1668,8 @@ SWITCH_DECLARE(switch_status_t) switch_api_execute(const char *cmd, const char * switch_event_fire(&stream->param_event); } - + switch_safe_free(myarg); + return status; } From 5efe5c88b51d1ea50dac68e14fbfe64c11cf9444 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 21 Jul 2010 18:58:16 +0400 Subject: [PATCH 019/161] some t.38 and lockinng improvements. replace ptrace with switch_log_printf. --- src/mod/endpoints/mod_h323/changes.txt | 2 + src/mod/endpoints/mod_h323/mod_h323.cpp | 688 ++++++++++++++---------- src/mod/endpoints/mod_h323/mod_h323.h | 88 ++- 3 files changed, 482 insertions(+), 296 deletions(-) diff --git a/src/mod/endpoints/mod_h323/changes.txt b/src/mod/endpoints/mod_h323/changes.txt index aeeab5414e..0db6dfac07 100644 --- a/src/mod/endpoints/mod_h323/changes.txt +++ b/src/mod/endpoints/mod_h323/changes.txt @@ -1,3 +1,5 @@ +some t.38 and lockinng improvements. +replace ptrace with switch_log_printf. initial t.38 support. remake logical channel opening. add missing param name in example config. diff --git a/src/mod/endpoints/mod_h323/mod_h323.cpp b/src/mod/endpoints/mod_h323/mod_h323.cpp index 25f70cb8b6..4c194a9cf8 100644 --- a/src/mod/endpoints/mod_h323/mod_h323.cpp +++ b/src/mod/endpoints/mod_h323/mod_h323.cpp @@ -1,5 +1,5 @@ /* - Version 0.0.25 + Version 0.0.50 */ #include "mod_h323.h" @@ -111,7 +111,7 @@ static switch_state_handler_table_t h323fs_event_handlers = { /*.on_destroy*/ on_destroy }; -static FSProcess *opal_process = NULL; +//static FSProcess *h323_process = NULL; SWITCH_MODULE_LOAD_FUNCTION(mod_h323_load){ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Starting loading mod_h323\n"); *module_interface = switch_loadable_module_create_module_interface(pool, modname); @@ -126,7 +126,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_h323_load){ } if (h323_process->Initialise(*module_interface)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Opal manager initialized and running\n"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "H323 mod initialized and running\n"); return SWITCH_STATUS_SUCCESS; } @@ -300,7 +300,7 @@ FSProcess::FSProcess() : PLibraryProcess("Test", "mod_h323", 1, 0, AlphaCode, 1) , m_h323endpoint(NULL){ - PTrace::SetLevel(10); + PTrace::SetLevel(4); PTrace::SetOptions(PTrace::TraceLevel); PTrace::SetStream(new FSTrace); } @@ -310,14 +310,14 @@ FSProcess::~FSProcess(){ } bool FSProcess::Initialise(switch_loadable_module_interface_t *iface){ - PTRACE(4, "mod_h323\t======>FSProcess::Initialise " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "======>FSProcess::Initialise [%p]\n", this); m_h323endpoint = new FSH323EndPoint(); return m_h323endpoint != NULL && m_h323endpoint->Initialise(iface); } bool FSH323EndPoint::Initialise(switch_loadable_module_interface_t *iface){ - PTRACE(4, "mod_h323\t======>FSManager::Initialise " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSManager::Initialise [%p]\n",this); ReadConfig(false); @@ -356,10 +356,16 @@ bool FSH323EndPoint::Initialise(switch_loadable_module_interface_t *iface){ } } } - - SetCapability(0, 0, new FSH323_T38Capability(OpalT38_IFP_PRE)); + if (m_fax_old_asn){ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "--->fax_old_asn\n"); + SetT38_IFP_PRE(); + SetCapability(0, 0, new FSH323_T38Capability(OpalT38_IFP_PRE)); + }else{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "--->fax_asn\n"); + SetCapability(0, 0, new FSH323_T38Capability(OpalT38_IFP_COR)); + } + AddAllUserInputCapabilities(0,1); - PTRACE(1, "OpenPhone\tCapability Table:\n" << setprecision(4) << capabilities); DisableFastStart(!m_faststart); DisableH245Tunneling(!m_h245tunneling); @@ -372,7 +378,7 @@ bool FSH323EndPoint::Initialise(switch_loadable_module_interface_t *iface){ } else { for (std::list < FSListener >::iterator it = m_listeners.begin(); it != m_listeners.end(); ++it) { if (!StartListener(it->listenAddress)) { - PTRACE(3, "mod_h323\tCannot start listener for " << it->name); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Cannot start listener for %s\n", (const char*)(it->name)); } } } @@ -387,7 +393,7 @@ bool FSH323EndPoint::Initialise(switch_loadable_module_interface_t *iface){ } switch_status_t FSH323EndPoint::ReadConfig(int reload){ - PTRACE(4, "mod_h323\t======>FSH323EndPoint::ReadConfig " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323EndPoint::ReadConfig [%p]\n",this); const char *cf = "h323.conf"; switch_status_t status = SWITCH_STATUS_SUCCESS; @@ -467,6 +473,8 @@ switch_status_t FSH323EndPoint::ReadConfig(int reload){ m_pi = atoi(val); } else if (!strcasecmp(var, "alerting-indication")) { m_ai = atoi(val); + } else if (!strcasecmp(var, "fax-old-asn")) { + m_fax_old_asn = switch_true(val); } } } @@ -514,13 +522,14 @@ FSH323EndPoint::FSH323EndPoint() ,m_h245insetup(true) ,m_thread(NULL) ,m_stop_gk(false) + ,m_fax_old_asn(false) { - PTRACE(4, "mod_h323\t======>FSH323EndPoint::FSH323EndPoint [" << *this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323EndPoint::FSH323EndPoint [%p]\n",this); terminalType = e_GatewayOnly; } FSH323EndPoint::~FSH323EndPoint(){ - PTRACE(4, "mod_h323\t======>FSH323EndPoint::~FSH323EndPoint [" << *this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323EndPoint::~FSH323EndPoint [%p]\n",this); StopGkClient(); ClearAllCalls(H323Connection::EndedByLocalUser,false); } @@ -530,12 +539,12 @@ H323Connection *FSH323EndPoint::CreateConnection( void* userData, H323Transport* transport, H323SignalPDU* setupPDU){ - PTRACE(4, "mod_h323\t======>FSH323EndPoint::CreateConnection callReference = "<< callReference <<" userDate = "<FSH323EndPoint::CreateConnection callReference = %u userDate = %p [%p]\n",callReference,userData,this); if ((switch_caller_profile_t *)userData){ - PTRACE(4, "mod_h323\t------> SWITCH_CALL_DIRECTION_OUTBOUND"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------> SWITCH_CALL_DIRECTION_OUTBOUND\n"); } else{ - PTRACE(4, "mod_h323\t------> SWITCH_CALL_DIRECTION_INBOUND"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------> SWITCH_CALL_DIRECTION_INBOUND\n"); } switch_core_session_t *fsSession = switch_core_session_request(GetSwitchInterface(), @@ -543,7 +552,7 @@ H323Connection *FSH323EndPoint::CreateConnection( if (fsSession == NULL) return NULL; - PTRACE(4, "mod_h323\t------> fsSession = "< fsSession = %p\n",fsSession); switch_channel_t *fsChannel = switch_core_session_get_channel(fsSession); if (fsChannel == NULL) { @@ -555,9 +564,9 @@ H323Connection *FSH323EndPoint::CreateConnection( } bool FSH323EndPoint::OnSetGatewayPrefixes(PStringList & prefixes) const{ - PTRACE(4, "mod_h323\t======>FSH323EndPoint::OnSetGatewayPrefixes " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323EndPoint::OnSetGatewayPrefixes [%p]\n",this); if(m_gkPrefixes.GetSize() > 0) { - PTRACE(4, "mod_h323\tOnSetGatewayPrefixes " << m_gkPrefixes); +// PTRACE(4, "mod_h323\tOnSetGatewayPrefixes " << m_gkPrefixes); prefixes = m_gkPrefixes; return true; } @@ -565,10 +574,11 @@ bool FSH323EndPoint::OnSetGatewayPrefixes(PStringList & prefixes) const{ } void FSH323EndPoint::StartGkClient(int retry, PString* gkAddress,PString* gkIdentifer,PString* gkInterface){ - PTRACE(4, "mod_h323\t======>FSH323EndPoint::StartGkClient [" << *this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323EndPoint::StartGkClient [%p]\n",this); while(!UseGatekeeper(m_gkAddress, m_gkIdentifer, m_gkInterface) && retry > 0 ){ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "Could not start gatekeeper: addr=\"%s\", id=\"%s\", if=\"%s\"\n", + "Could not start gatekeeper: gw name=\"%s\", addr=\"%s\", id=\"%s\", if=\"%s\"\n", + (const char *)m_endpointname, (const char *)m_gkAddress, (const char *)m_gkIdentifer, (const char *)m_gkInterface); @@ -590,7 +600,7 @@ void FSH323EndPoint::StartGkClient(int retry, PString* gkAddress,PString* gkIden } void FSH323EndPoint::StopGkClient(){ - PTRACE(4, "mod_h323\t======> FSH323EndPoint::StopGkClient [" << *this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323EndPoint::StopGkClient [%p]\n",this); if (m_thread) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Stop gatekeeper thread\n"); m_stop_gk = true; @@ -620,8 +630,9 @@ FSH323Connection::FSH323Connection(FSH323EndPoint& endpoint, H323Transport* tran , m_active_sessionID(0) , m_active_chennel_fax(false) , m_rtp_resetting(0) - , m_isRequst_fax(false){ - PTRACE(4, "mod_h323\t======>FSH323Connection::FSH323Connection [" << *this<<"]"); + , m_isRequst_fax(false) + , m_channel_hangup(false){ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::FSH323Connection [%p]\n",this); h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_alloc(m_fsSession, sizeof(*tech_pvt)); tech_pvt->me = this; @@ -650,19 +661,27 @@ FSH323Connection::FSH323Connection(FSH323EndPoint& endpoint, H323Transport* tran } FSH323Connection::~FSH323Connection(){ - PTRACE(4, "mod_h323\t======>FSH323Connection::~FSH323Connection ["<<*this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::~FSH323Connection [%p]\n",this); h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); - tech_pvt->me = NULL; + if ((m_rtp_resetting == 1)) { + switch_core_session_unlock_codec_read(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",m_fsSession); + switch_core_session_unlock_codec_write(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_write [%p]\n",m_fsSession); + } + tech_pvt->me = NULL; +// switch_mutex_unlock(tech_pvt->h323_mutex); +// switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); } void FSH323Connection::OnSetLocalCapabilities(){ - PTRACE(4, "mod_h323\t======>FSH323Connection::OnSetLocalCapabilities() [" << *this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnSetLocalCapabilities() [%p]\n",this); H323Connection::OnSetLocalCapabilities(); SetLocalCapabilities(); } bool FSH323Connection::SetLocalCapabilities(){ - PTRACE(4, "mod_h323\t======>FSH323Connection::SetLocalCapabilities() Size local capability = "<FSH323Connection::SetLocalCapabilities() Size local capability = %d [%p]\n",localCapabilities.GetSize(),this); if (!mod_h323_globals.codec_string) return false; @@ -675,11 +694,11 @@ bool FSH323Connection::SetLocalCapabilities(){ if (format) { PString m_globalcodec = ((const char *)mod_h323_globals.codec_string); if (m_globalcodec.Find(format) < 0) { - PTRACE(1, "mod_h323\tRemoving capability '"<FSH323Connection::decodeCapability"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::decodeCapability [%p]\n",this); PString fname((const char *)capability.GetFormatName()); if (fname.Find("{sw}") == (fname.GetLength() - 4)) @@ -716,7 +735,7 @@ bool FSH323Connection::decodeCapability(const H323Capability& capability, const } } - PTRACE(1, "mod_h323\tcapability '"<< fname << "' format '"<FSH323Connection::OnAnswerCall caller = "<< caller<<" [" << *this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnAnswerCall caller = %s [%p]\n",(const char*)caller,this); if (m_fsSession == NULL) { - PTRACE(1, "mod_h323\tSession request failed."); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session request failed.\n"); return H323Connection::AnswerCallDenied; } @@ -742,7 +761,7 @@ H323Connection::AnswerCallResponse FSH323Connection::OnAnswerCall(const PString switch_channel_t *channel = switch_core_session_get_channel(m_fsSession); if (channel == NULL) { - PTRACE(1, "mod_h323\tSession does not have a channel"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session does not have a channel\n"); return H323Connection::AnswerCallDenied; } @@ -750,17 +769,17 @@ H323Connection::AnswerCallResponse FSH323Connection::OnAnswerCall(const PString const H225_Setup_UUIE& setup = setupPDU.m_h323_uu_pdu.m_h323_message_body; const H225_ArrayOf_AliasAddress& address = setup.m_destinationAddress; for (int i = 0; i 0) called = (const char *)H323GetAliasAddressString(address[0]); if (!called.IsEmpty()) - PTRACE(2, "mod_h323\t Called number or alias = "<username + ,caller_profile->dialplan + ,caller_profile->caller_id_name + ,caller_profile->caller_id_number + ,caller_profile->network_addr + ,caller_profile->source + ,caller_profile->context + ,caller_profile->destination_number); + - PTRACE(4, "mod_h323\tCreated switch caller profile:\n" - " username = " << caller_profile->username << "\n" - " dialplan = " << caller_profile->dialplan << "\n" - " caller_id_name = " << caller_profile->caller_id_name << "\n" - " caller_id_number = " << caller_profile->caller_id_number << "\n" - " network_addr = " << caller_profile->network_addr << "\n" - " source = " << caller_profile->source << "\n" - " context = " << caller_profile->context << "\n" - " destination_number= " << caller_profile->destination_number); switch_channel_set_caller_profile(channel, caller_profile); char name[256] = "h323/"; @@ -810,7 +838,7 @@ H323Connection::AnswerCallResponse FSH323Connection::OnAnswerCall(const PString switch_channel_set_state(channel, CS_INIT); if (switch_core_session_thread_launch(m_fsSession) != SWITCH_STATUS_SUCCESS) { - PTRACE(1, "mod_h323\tCould not launch session thread"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not launch session thread\n"); return H323Connection::AnswerCallDenied; } @@ -818,7 +846,7 @@ H323Connection::AnswerCallResponse FSH323Connection::OnAnswerCall(const PString } H323Channel* FSH323Connection::CreateRealTimeLogicalChannel(const H323Capability& capability,H323Channel::Directions dir,unsigned sessionID,const H245_H2250LogicalChannelParameters* param, RTP_QOS * rtpqos){ - PTRACE(4, "mod_h323\t======>FSH323Connection::CreateRealTimeLogicalChannel [" << *this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::CreateRealTimeLogicalChannel [%p]\n",this); H323TransportAddress m_h323transportadd = GetSignallingChannel()->GetLocalAddress(); m_h323transportadd.GetIpAddress(m_RTPlocalIP); @@ -827,20 +855,26 @@ H323Channel* FSH323Connection::CreateRealTimeLogicalChannel(const H323Capability } PBoolean FSH323Connection::OnStartLogicalChannel(H323Channel & channel){ - PTRACE(4, "mod_h323\t======>FSH323Connection::OnStartLogicalChannel chennel = "<<&channel<<" ["<<*this<<"]"); - PTRACE(4, "mod_h323\t======>FSH323Connection::OnStartLogicalChannel connectionState = "<FSH323Connection::OnStartLogicalChannel chennel = %p [%p]\n",&channel,this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnStartLogicalChannel connectionState = %s [%p]\n",ConnectionStatesNames[connectionState],this); return connectionState != ShuttingDownConnection; } PBoolean FSH323Connection::OnCreateLogicalChannel(const H323Capability& capability, H323Channel::Directions dir, unsigned& errorCode){ - PTRACE(4, "mod_h323\t======>FSH323Connection::OnCreateLogicalChannel ('"<< (const char *)capability.GetFormatName()<<"',"<FSH323Connection::OnCreateLogicalChannel ('%s',%s) [%p]\n",(const char *)capability.GetFormatName(),GetDirections[dir],this); return H323Connection::OnCreateLogicalChannel(capability,dir,errorCode); } void FSH323Connection::OnReceivedReleaseComplete(const H323SignalPDU & pdu){ - PTRACE(4, "mod_h323\t======>FSH323Connection::OnReceivedReleaseComplete cause = "<FSH323Connection::OnReceivedReleaseComplete value = %d\n",(switch_call_cause_t)pdu.GetQ931().GetCause()); h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); + if ((tech_pvt->me != NULL) && (m_rtp_resetting == 1)) { + switch_core_session_unlock_codec_read(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",m_fsSession); + switch_core_session_unlock_codec_write(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_write [%p]\n",m_fsSession); + } tech_pvt->me = NULL; switch_channel_hangup(switch_core_session_get_channel(m_fsSession),(switch_call_cause_t)pdu.GetQ931().GetCause()); return H323Connection::OnReceivedReleaseComplete(pdu); @@ -848,7 +882,7 @@ void FSH323Connection::OnReceivedReleaseComplete(const H323SignalPDU & pdu){ bool FSH323Connection::OnReceivedProgress(const H323SignalPDU &pdu) { - PTRACE(4, "mod_h323\t======>FSH323Connection::OnReceivedProgress ["<<*this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnReceivedProgress [%p]\n",this); H323Connection::OnReceivedProgress(pdu); if ((m_rxChennel && m_txChennel) || (m_ChennelProgress && m_rxChennel)) switch_channel_mark_pre_answered(m_fsChannel); @@ -860,31 +894,27 @@ bool FSH323Connection::OnReceivedProgress(const H323SignalPDU &pdu) bool FSH323Connection::OnReceivedSignalSetup(const H323SignalPDU & setupPDU){ - PTRACE(4, "mod_h323\t======>FSH323Connection::OnReceivedSignalSetup ["<<*this<<"]"); -// Lock(); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnReceivedSignalSetup [%p]\n",this); if (!H323Connection::OnReceivedSignalSetup(setupPDU)) return false; - PTRACE(4, "mod_h323\t---------> after FSH323Connection::OnReceivedSignalSetup connectionState = "< after FSH323Connection::OnReceivedSignalSetup connectionState = %s [%p]\n",ConnectionStatesNames[connectionState],this); H323SignalPDU callProceedingPDU; H225_CallProceeding_UUIE & callProceeding = callProceedingPDU.BuildCallProceeding(*this); - PTRACE(4, "mod_h323\t---------> after callProceedingPDU.BuildCallProceeding connectionState = "< after callProceedingPDU.BuildCallProceeding connectionState = %s [%p]\n",ConnectionStatesNames[connectionState],this); if (connectionState == ShuttingDownConnection){ - PTRACE(4, "mod_h323\t---------> connectionState = ShuttingDownConnection ["<<*this<<"]"); -// Unlock(); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"---------> connectionState = ShuttingDownConnection [%p]\n",this); return false; } if (SendFastStartAcknowledge(callProceeding.m_fastStart)){ callProceeding.IncludeOptionalField(H225_CallProceeding_UUIE::e_fastStart); } else { - PTRACE(2, "H323\tSendFastStartAcknowledge = FALSE "); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE,"SendFastStartAcknowledge = FALSE\n"); if (connectionState == ShuttingDownConnection){ -// Unlock(); return true; } earlyStart = TRUE; if (!h245Tunneling && (controlChannel == NULL)) { if (!StartControlChannel()){ -// Unlock(); return true; } callProceeding.IncludeOptionalField(H225_CallProceeding_UUIE::e_h245Address); @@ -892,26 +922,23 @@ bool FSH323Connection::OnReceivedSignalSetup(const H323SignalPDU & setupPDU){ } } if (connectionState == ShuttingDownConnection){ -// Unlock(); return true; } if (!WriteSignalPDU(callProceedingPDU)){ -// Unlock(); return false; } -// Unlock(); return true; } bool FSH323Connection::OnReceivedCallProceeding(const H323SignalPDU & pdu){ - PTRACE(4, "mod_h323\t======>PFSH323Connection::OnReceivedCallProceeding ["<<*this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>PFSH323Connection::OnReceivedCallProceeding [%p]\n",this); unsigned pi; if (!pdu.GetQ931().GetProgressIndicator(pi)) pi = 0; - PTRACE(4, "mod_h323\t----------->OnAlerting PI = "<OnAlerting PI = %u",pi); if (pi > 0){ if ((m_rxChennel && m_txChennel) || (m_ChennelProgress && m_rxChennel)) switch_channel_mark_pre_answered(m_fsChannel); @@ -923,25 +950,20 @@ bool FSH323Connection::OnReceivedCallProceeding(const H323SignalPDU & pdu){ } bool FSH323Connection::OnSendCallProceeding(H323SignalPDU & callProceedingPDU){ - PTRACE(4, "mod_h323\t======>FSH323Connection::OnSendCallProceeding fastStartState = "<FSH323Connection::OnSendCallProceeding fastStartState = %s [%p]\n",FastStartStateNames[fastStartState],this); return false; // return true; } bool FSH323Connection::OnSendReleaseComplete(H323SignalPDU & pdu) { - PTRACE(4, "mod_h323\t======>FSH323Connection::OnSendReleaseComplete cause = "<FSH323Connection::OnSendReleaseComplete cause = %u\n",(switch_call_cause_t)pdu.GetQ931().GetCause()); switch_channel_hangup(m_fsChannel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); return H323Connection::OnSendReleaseComplete(pdu); } PBoolean FSH323Connection::OpenLogicalChannel(const H323Capability& capability, unsigned sessionID, H323Channel::Directions dir){ - PTRACE(4, "mod_h323\t======>FSH323Connection::OpenLogicalChannel ('"<< (const char *)capability.GetFormatName()<<"', "<< sessionID<<", "<FSH323Connection::OpenLogicalChannel ('%s', %d, %s) [%p]\n",(const char *)capability.GetFormatName(),sessionID,GetDirections[dir],this); return H323Connection::OpenLogicalChannel(capability,sessionID,dir); } @@ -950,24 +972,24 @@ bool FSH323Connection::OnReceivedCapabilitySet(const H323Capabilities & remoteCa const H245_MultiplexCapability * muxCap, H245_TerminalCapabilitySetReject & reject){ - PTRACE(4, "mod_h323\t======>FSH323Connection::OnReceivedCapabilitySet ["<<*this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnReceivedCapabilitySet [%p]\n",this); if (connectionState == ShuttingDownConnection) return false; if (!H323Connection::OnReceivedCapabilitySet(remoteCaps, muxCap, reject)) { return false; } - PTRACE(4, "mod_h323\t======>END H323Connection::OnReceivedCapabilitySet ["<<*this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>END H323Connection::OnReceivedCapabilitySet [%p]\n",this); for (int i = 0; i < remoteCapabilities.GetSize(); ++i) { - PTRACE(4, "mod_h323\t----> Capabilities = "< Capabilities = %s\n",(const char*)(remoteCapabilities[i].GetFormatName())); } H323Capability * cap = remoteCapabilities.FindCapability(H323Capability::e_Audio); if (cap == NULL) { - PTRACE(4, "mod_h323\t----> Capabilities is NULL "); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"----> Capabilities is NULL \n"); return false; } - PTRACE(4, "mod_h323\t----> Capabilities not NULL "); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"----> Capabilities not NULL \n"); return connectionState != ShuttingDownConnection; } @@ -975,14 +997,14 @@ bool FSH323Connection::OnReceivedCapabilitySet(const H323Capabilities & remoteCa bool FSH323Connection::OnAlerting(const H323SignalPDU &alertingPDU, const PString &user){ - PTRACE(4, "mod_h323\t======>PFSH323Connection::OnAlerting user = "<<(const char *)user<<" ["<<*this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>PFSH323Connection::OnAlerting user = %s [%p]\n",(const char *)user,this); unsigned pi; switch_status_t status = switch_channel_mark_ring_ready(m_fsChannel); - PTRACE(4, "mod_h323\t----------->OnAlerting return = "<OnAlerting return = %d\n",status); if (!alertingPDU.GetQ931().GetProgressIndicator(pi)) pi = 0; - PTRACE(4, "mod_h323\t----------->OnAlerting PI = "<OnAlerting PI = %u\n",pi); if (pi > 0){ if ((m_rxChennel && m_txChennel) || (m_ChennelProgress && m_rxChennel)) switch_channel_mark_pre_answered(m_fsChannel); @@ -995,19 +1017,21 @@ bool FSH323Connection::OnAlerting(const H323SignalPDU &alertingPDU, const PStrin void FSH323Connection::AnsweringCall(AnswerCallResponse response){ - PTRACE(4, "mod_h323\t======>FSH323Connection::AnsweringCall ["<<*this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::AnsweringCall [%p]\n",this); switch (response) { case AnswerCallDeferredWithMedia:{ - PTRACE(2, "H323\tAnswering call: " << response); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Answering call: %s\n",GetAnswerCallResponse[response]); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->Lock\n"); if (!Lock()) return; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->Lock ok\n"); if (!mediaWaitForConnect) { // create a new facility PDU if doing AnswerDeferredWithMedia H323SignalPDU want245PDU; H225_Progress_UUIE & prog = want245PDU.BuildProgress(*this); PBoolean sendPDU = TRUE; - PTRACE(2, "H323\tmediaWaitForConnect = FALSE "); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE,"mediaWaitForConnect = FALSE\n"); /* if (SendFastStartAcknowledge(prog.m_fastStart)){ PTRACE(2, "H323\tSendFastStartAcknowledge = TRUE "); prog.IncludeOptionalField(H225_Progress_UUIE::e_fastStart); @@ -1048,14 +1072,17 @@ void FSH323Connection::AnsweringCall(AnswerCallResponse response){ } InternalEstablishedConnectionCheck(); Unlock(); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->UnLock\n"); return; } case AnswerCallPending :{ if (alertingPDU != NULL) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->Lock\n"); if (!Lock()) return; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->Lock ok\n"); // send Q931 Alerting PDU - PTRACE(3, "H225\tSending Alerting PDU"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE,"Sending Alerting PDU\n"); const char *vai = switch_channel_get_variable(m_fsChannel, "alerting-indication"); unsigned ai = 0; @@ -1072,6 +1099,7 @@ void FSH323Connection::AnsweringCall(AnswerCallResponse response){ alertingTime = PTime(); InternalEstablishedConnectionCheck(); Unlock(); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->UnLock\n"); return; } } @@ -1081,12 +1109,12 @@ void FSH323Connection::AnsweringCall(AnswerCallResponse response){ void FSH323Connection::OnEstablished(){ - PTRACE(4, "mod_h323\t======>PFSH323Connection::OnEstablished ["<<*this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>PFSH323Connection::OnEstablished [%p]\n",this); if(m_startRTP) switch_channel_mark_answered(m_fsChannel); else m_ChennelAnswer = true; if (m_active_chennel_fax) - RequestModeChangeT38(); + RequestModeChangeT38("T.38\nT.38"); else m_active_chennel_fax = true; } @@ -1096,28 +1124,31 @@ PBoolean FSH323Connection::OnRequestModeChange(const H245_RequestMode & pdu, PINDEX & selectedMode) { h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_lock\n"); switch_mutex_lock(tech_pvt->h323_mutex); - PTRACE(4, "mod_h323\t======>PFSH323Connection::OnRequestModeChange ["<<*this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>PFSH323Connection::OnRequestModeChange [%p]\n",this); if (!m_isRequst_fax){ m_isRequst_fax = true; switch_mutex_unlock(tech_pvt->h323_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); return true; } - return false; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); switch_mutex_unlock(tech_pvt->h323_mutex); + return false; } void FSH323Connection::OnModeChanged(const H245_ModeDescription & newMode){ - PTRACE(4, "mod_h323\t======>PFSH323Connection::OnModeChanged ["<<*this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>PFSH323Connection::OnModeChanged [%p]\n",this); for (PINDEX i = 0; i < newMode.GetSize(); i++) { H323Capability * capability = localCapabilities.FindCapability(newMode[i]); if (PAssertNULL(capability) != NULL) { - PTRACE(1, "mod_h323\tOpen channel after mode change: " << *capability); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Open channel after mode change: %s\n",(const char*)(capability->GetFormatName())); if (capability->GetMainType() == H323Capability::e_Data){ - PTRACE(1, "mod_h323\tcapability->GetMainType() = H323Capability::e_Data"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"capability->GetMainType() = H323Capability::e_Data\n"); H245_DataMode & type = newMode[i].m_type; if (type.m_application.GetTag() == H245_DataMode_application::e_t38fax){ - PTRACE(1, "mod_h323\ttype.m_application.GetTag() = H245_DataMode_application::e_t38fax"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"ttype.m_application.GetTag() = H245_DataMode_application::e_t38fax\n"); H245_DataMode_application_t38fax & fax = type.m_application; H245_DataProtocolCapability & proto = fax.m_t38FaxProtocol; const H245_T38FaxProfile & profile = fax.m_t38FaxProfile; @@ -1125,43 +1156,40 @@ void FSH323Connection::OnModeChanged(const H245_ModeDescription & newMode){ if (!t38_options) { t38_options = (switch_t38_options_t*)switch_core_session_alloc(m_fsSession, sizeof(* t38_options)); - PTRACE(1, "mod_h323\tswitch_core_session_alloc t38_options"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"switch_core_session_alloc t38_options\n"); } - -// t38_options->port = 0; -// t38_options->ip = NULL; t38_options->T38VendorInfo = "0 0 0"; t38_options->T38FaxVersion = profile.m_version; - PTRACE(1, "mod_h323\tT38FaxVersion:"<T38MaxBitRate = type.m_bitRate*100; - PTRACE(1, "mod_h323\tT38MaxBitRate:"<T38MaxBitRate); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"T38MaxBitRate:%d\n",t38_options->T38MaxBitRate); if (profile.m_fillBitRemoval) t38_options->T38FaxFillBitRemoval = SWITCH_TRUE; - PTRACE(1, "mod_h323\tT38FaxFillBitRemoval:"<T38FaxTranscodingMMR = SWITCH_TRUE; - PTRACE(1, "mod_h323\tT38FaxTranscodingMMR:"<T38FaxTranscodingJBIG = SWITCH_TRUE; - PTRACE(1, "mod_h323\tT38FaxTranscodingJBIG:"<T38FaxRateManagement = "transferredTCF"; else t38_options->T38FaxRateManagement = "localTCF"; - PTRACE(1, "mod_h323\tT38FaxRateManagement:"<T38FaxRateManagement); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"T38FaxRateManagement:%s\n",t38_options->T38FaxRateManagement); t38_options->T38FaxMaxBuffer = profile.m_t38FaxUdpOptions.m_t38FaxMaxBuffer; - PTRACE(1, "mod_h323\tT38FaxMaxBuffer:"<T38FaxMaxDatagram = profile.m_t38FaxUdpOptions.m_t38FaxMaxDatagram; - PTRACE(1, "mod_h323\tT38FaxMaxDatagram:"<T38FaxUdpEC = "t38UDPFEC"; else t38_options->T38FaxUdpEC = "t38UDPRedundancy"; - PTRACE(1, "mod_h323\tT38FaxUdpEC:"<T38FaxUdpEC); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"T38FaxUdpEC:%s\n",t38_options->T38FaxUdpEC); const char *uuid = switch_channel_get_variable(m_fsChannel, SWITCH_SIGNAL_BOND_VARIABLE); if (uuid != NULL){ - PTRACE(1, "mod_h323\t uuid:"<PFSH323Connection::OnSendSignalSetup [%p]\n",this); + setupPDU.GetQ931().SetBearerCapabilities(Q931::TransferSpeech, 1); + return true; +} + void FSH323Connection::setRemoteAddress(const char* remoteIP, WORD remotePort){ - PTRACE(4, "mod_h323\t======>PFSH323Connection::setRemoteAddress remoteIP ="<PFSH323Connection::setRemoteAddress remoteIP = %s , remotePort = %d [%p]\n",remoteIP,remotePort,this); if (!m_remotePort) { - PTRACE(4, "mod_h323\tGot remote RTP address "<FSH323Connection::on_execute [" << *this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::on_execute [%p]\n",this); return SWITCH_STATUS_SUCCESS; } switch_status_t FSH323Connection::on_routing(){ - PTRACE(4, "mod_h323\t======>FSH323Connection::on_routing ["<< *this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::on_routing [%p]\n",this); return SWITCH_STATUS_SUCCESS; } switch_status_t FSH323Connection::kill_channel(int sig){ - PTRACE(4, "mod_h323\t======>FSH323Connection::kill_channel ["<< *this<<"]"); - PTRACE(3, "mod_h323\tKill " << sig << " on connection " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::kill_channel sig = %d [%p]\n",sig,this); h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); - if (!tech_pvt) { return SWITCH_STATUS_FALSE; } switch (sig) { - case SWITCH_SIG_BREAK: - if (switch_rtp_ready(tech_pvt->rtp_session)) { - switch_rtp_break(tech_pvt->rtp_session); - } - break; - case SWITCH_SIG_KILL: - default: - m_rxAudioOpened.Signal(); - m_txAudioOpened.Signal(); - if (switch_rtp_ready(tech_pvt->rtp_session)) { - PTRACE(3, "mod_h323\t--->Kill soket" << *this); - switch_rtp_kill_socket(tech_pvt->rtp_session); - } - break; + case SWITCH_SIG_BREAK: + if (switch_rtp_ready(tech_pvt->rtp_session)) { + switch_rtp_break(tech_pvt->rtp_session); + } + break; + case SWITCH_SIG_KILL: + default: + m_rxAudioOpened.Signal(); + m_txAudioOpened.Signal(); + if (switch_rtp_ready(tech_pvt->rtp_session)) { + if ((m_rtp_resetting == 1)) { + switch_core_session_unlock_codec_read(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",m_fsSession); + switch_core_session_unlock_codec_write(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_write [%p]\n",m_fsSession); + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"--->Kill soket [%p]\n",this); + switch_rtp_kill_socket(tech_pvt->rtp_session); + } + break; } return SWITCH_STATUS_SUCCESS; } switch_status_t FSH323Connection::send_dtmf(const switch_dtmf_t *dtmf){ - PTRACE(4, "mod_h323\t======>FSH323Connection::send_dtmf " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::send_dtmf [%p]\n",this); SendUserInputTone(dtmf->digit, dtmf->duration); return SWITCH_STATUS_SUCCESS; } void FSH323Connection::SendUserInputTone(char tone, unsigned duration, unsigned logicalChannel, unsigned rtpTimestamp) { - PTRACE(4, "mod_h323\t======>FSH323Connection::SendUserInputTone [" << *this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::SendUserInputTone [%p]\n",this); H323Connection::SendUserInputTone(tone, duration); } @@ -1254,7 +1291,7 @@ void FSH323Connection::OnUserInputTone(char tone, unsigned duration, unsigned lo { if (m_select_dtmf == 0 || m_select_dtmf == 1){ m_select_dtmf = 1; - PTRACE(4, "mod_h323\t======>FSH323Connection::OnUserInputTone [" << *this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnUserInputTone [%p]\n",this); switch_dtmf_t dtmf = { tone, duration }; switch_channel_queue_dtmf(m_fsChannel, &dtmf); H323Connection::OnUserInputTone( tone, duration, logicalChannel, rtpTimestamp); @@ -1265,7 +1302,7 @@ void FSH323Connection::OnUserInputString(const PString &value) { if (m_select_dtmf == 0 || m_select_dtmf == 2){ m_select_dtmf = 2; - PTRACE(4, "mod_h323\t======>FSH323Connection::OnUserInputString [" << *this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnUserInputString [%p]\n",this); switch_dtmf_t dtmf = { value[0], 500 }; switch_channel_queue_dtmf(m_fsChannel, &dtmf); H323Connection::OnUserInputString(value); @@ -1273,19 +1310,16 @@ void FSH323Connection::OnUserInputString(const PString &value) } void FSH323Connection::CleanUpOnCall(){ - PTRACE(4, "mod_h323\t======>FSH323Connection::CleanUpOnCall [" << *this<<"]"); -// Lock(); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::CleanUpOnCall [%p]\n",this); connectionState = ShuttingDownConnection; -// Unlock(); - PTRACE(4, "mod_h323\t<======FSH323Connection::CleanUpOnCall [" << *this<<"]"); } -switch_status_t FSH323Connection::receive_message(switch_core_session_message_t *msg){ - PTRACE(4, "mod_h323\t======>FSH323Connection::receive_message MSG=" << msg->message_id); -// Lock(); -// Unlock(); - switch_channel_t *channel = switch_core_session_get_channel(m_fsSession); +switch_status_t FSH323Connection::receive_message(switch_core_session_message_t *msg){ h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::receive_message MSG = %d\n",msg->message_id); + + switch_channel_t *channel = switch_core_session_get_channel(m_fsSession); + switch (msg->message_id) { case SWITCH_MESSAGE_INDICATE_BRIDGE: case SWITCH_MESSAGE_INDICATE_UNBRIDGE: @@ -1304,7 +1338,14 @@ switch_status_t FSH323Connection::receive_message(switch_core_session_message_t case SWITCH_MESSAGE_INDICATE_DEFLECT: { break; } - case SWITCH_MESSAGE_INDICATE_PROGRESS: { + case SWITCH_MESSAGE_INDICATE_PROGRESS: { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_lock\n"); + switch_mutex_lock(tech_pvt->h323_mutex); + if (m_txChennel && m_rxChennel){ + m_callOnPreAnswer = true; + } + switch_mutex_unlock(tech_pvt->h323_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); AnsweringCall(AnswerCallPending); AnsweringCall(AnswerCallDeferredWithMedia); @@ -1315,9 +1356,9 @@ switch_status_t FSH323Connection::receive_message(switch_core_session_message_t } else { m_callOnPreAnswer = true; if (fastStartState == FastStartDisabled){ - PTRACE(4, "mod_h323\t-------------------->m_txAudioOpened.Wait START" << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-------------------->m_txAudioOpened.Wait START [%p]\n",this); m_txAudioOpened.Wait(); - PTRACE(4, "mod_h323\t-------------------->m_rxAudioOpened.Wait STOP" << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-------------------->m_rxAudioOpened.Wait STOP [%p]\n",this); } } break; @@ -1327,121 +1368,126 @@ switch_status_t FSH323Connection::receive_message(switch_core_session_message_t return SWITCH_STATUS_FALSE; } AnsweringCall(H323Connection::AnswerCallNow); - PTRACE(4, "mod_h323\tMedia started on connection " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Media started on connection [%p]\n",this); if (m_txChennel && m_rxChennel){ if (!switch_channel_test_flag(m_fsChannel, CF_EARLY_MEDIA)) { - PTRACE(4, "mod_h323\t-------------------->switch_channel_mark_answered(m_fsChannel) " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-------------------->switch_channel_mark_answered(m_fsChannel) [%p]\n",this); switch_channel_mark_answered(m_fsChannel); } } else{ m_ChennelAnswer = true; if (fastStartState == FastStartDisabled){ - PTRACE(4, "mod_h323\t-------------------->m_txAudioOpened.Wait START" << *this); - PTRACE(4, "mod_h323\t-------------------->m_rxAudioOpened.Wait START" << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-------------------->m_txAudioOpened.Wait START [%p]\n",this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-------------------->m_rxAudioOpened.Wait START [%p]\n",this); m_txAudioOpened.Wait(); m_rxAudioOpened.Wait(); - PTRACE(4, "mod_h323\t-------------------->m_txAudioOpened.Wait STOP" << *this); - PTRACE(4, "mod_h323\t-------------------->m_rxAudioOpened.Wait STOP" << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-------------------->m_txAudioOpened.Wait STOP [%p]\n",this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-------------------->m_rxAudioOpened.Wait STOP [%p]\n",this); } } break; } case SWITCH_MESSAGE_INDICATE_REQUEST_IMAGE_MEDIA: { - PTRACE(3, "mod_h323\tReceived message SWITCH_MESSAGE_INDICATE_REQUEST_IMAGE_MEDIA on connection " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Received message SWITCH_MESSAGE_INDICATE_REQUEST_IMAGE_MEDIA on connection [%p]\n",this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_lock\n"); switch_mutex_lock(tech_pvt->h323_mutex); if (!m_isRequst_fax) - m_isRequst_fax = true; + m_isRequst_fax = true; switch_mutex_unlock(tech_pvt->h323_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); if (m_active_chennel_fax) - RequestModeChangeT38(); + RequestModeChangeT38("T.38\nT.38"); else m_active_chennel_fax = true; break; } case SWITCH_MESSAGE_INDICATE_UDPTL_MODE:{ - PTRACE(3, "mod_h323\tReceived message SWITCH_MESSAGE_INDICATE_UDPTL_MODE on connection " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Received message SWITCH_MESSAGE_INDICATE_UDPTL_MODE on connection [%p]\n",this); if (switch_rtp_ready(tech_pvt->rtp_session)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"---->switch_rtp_udptl_mode [%p]\n",this); switch_rtp_udptl_mode(tech_pvt->rtp_session); } break; } case SWITCH_MESSAGE_INDICATE_T38_DESCRIPTION:{ - PTRACE(3, "mod_h323\tReceived message SWITCH_MESSAGE_INDICATE_T38_DESCRIPTION on connection " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Received message SWITCH_MESSAGE_INDICATE_T38_DESCRIPTION on connection [%p]\n",this); if (switch_rtp_ready(tech_pvt->rtp_session)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"---->switch_rtp_udptl_mode [%p]\n",this); switch_rtp_udptl_mode(tech_pvt->rtp_session); } break; } default:{ - PTRACE(3, "mod_h323\tReceived message " << msg->message_id << " on connection " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Received message id = %d [%p]\n", msg->message_id,this); } } return SWITCH_STATUS_SUCCESS; } switch_status_t FSH323Connection::receive_event(switch_event_t *event){ - PTRACE(4, "mod_h323\t======>FSH323Connection::receive_event " << *this); - PTRACE(3, "mod_h323\tReceived event " << event->event_id << " on connection " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::receive_event event id = %d [%p]\n",event->event_id,this); +// PTRACE(4, "mod_h323\tReceived event " << event->event_id << " on connection " << *this); return SWITCH_STATUS_SUCCESS; } switch_status_t FSH323Connection::state_change(){ - PTRACE(4, "mod_h323\t======>FSH323Connection::state_change " << *this); - PTRACE(3, "mod_h323\tState changed on connection " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::state_change [%p]\n",this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"State changed on connection [%p]\n",this); return SWITCH_STATUS_SUCCESS; } switch_status_t FSH323Connection::on_init(){ - PTRACE(4, "mod_h323\t======>FSH323Connection::on_init " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::on_init [%p]\n",this); switch_channel_t *channel = switch_core_session_get_channel(m_fsSession); if (channel == NULL) { return SWITCH_STATUS_FALSE; } - PTRACE(3, "mod_h323\tStarted routing for connection " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Started routing for connection [%p]\n",this); switch_channel_set_state(channel, CS_ROUTING); return SWITCH_STATUS_SUCCESS; } switch_status_t FSH323Connection::on_exchange_media(){ - PTRACE(4, "mod_h323\t======>FSH323Connection::on_exchange_media " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::on_exchange_media [%p]\n",this); return SWITCH_STATUS_SUCCESS; } switch_status_t FSH323Connection::on_soft_execute(){ - PTRACE(4, "mod_h323\t======>FSH323Connection::on_soft_execute " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::on_soft_execute [%p]\n",this); return SWITCH_STATUS_SUCCESS; } switch_status_t FSH323Connection::read_audio_frame(switch_frame_t **frame, switch_io_flag_t flags, int stream_id){ - PTRACE(4, "mod_h323\t======>FSH323Connection::read_audio_frame " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::read_audio_frame [%p]\n",this); h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); tech_pvt->read_frame.flags = 0; switch_set_flag_locked(tech_pvt, TFLAG_READING); if (!switch_channel_ready(m_fsChannel)) { - PTRACE(4, "mod_h323\t---------> RETURN"); switch_clear_flag_locked(tech_pvt, TFLAG_READING); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::read_audio_frame END\n"); return SWITCH_STATUS_FALSE; } switch_mutex_lock(tech_pvt->h323_io_mutex); if (switch_test_flag(tech_pvt, TFLAG_IO)) { if (!switch_core_codec_ready(&tech_pvt->read_codec )) { - PTRACE(4, "mod_h323\t---------> RETURN"); switch_clear_flag_locked(tech_pvt, TFLAG_READING); switch_mutex_unlock(tech_pvt->h323_io_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::read_audio_frame END\n\n"); return SWITCH_STATUS_FALSE; } - + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::read_audio_frame ---> switch_rtp_zerocopy_read_frame start\n"); switch_status_t status = switch_rtp_zerocopy_read_frame(tech_pvt->rtp_session, &tech_pvt->read_frame, flags); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::read_audio_frame ---> switch_rtp_zerocopy_read_frame stop\n"); if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK) { - PTRACE(4, "mod_h323\t---------> RETURN status = "<h323_io_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::read_audio_frame END\n\n"); return status; } // PTRACE(4, "mod_h323\t--------->\n source = "<read_frame.source<< "\n packetlen = "<read_frame.packetlen<<"\n datalen = "<read_frame.datalen<<"\n samples = "<read_frame.samples<<"\n rate = "<read_frame.rate<<"\n payload = "<<(int)tech_pvt->read_frame.payload<<"\n timestamp = "<read_frame.timestamp<<"\n seq = "<read_frame.seq<<"\n ssrc = "<read_frame.ssrc); @@ -1460,26 +1506,26 @@ switch_status_t FSH323Connection::read_audio_frame(switch_frame_t **frame, switc } }else{ switch_mutex_unlock(tech_pvt->h323_io_mutex); - PTRACE(4, "mod_h323\t--------->TFLAG_IO OFF"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"--------->TFLAG_IO OFF\n"); switch_yield(10000); } switch_mutex_unlock(tech_pvt->h323_io_mutex); switch_clear_flag_locked(tech_pvt, TFLAG_READING); *frame = &tech_pvt->read_frame; - + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::read_audio_frame END\n\n"); return SWITCH_STATUS_SUCCESS; } switch_status_t FSH323Connection::write_audio_frame(switch_frame_t *frame, switch_io_flag_t flags, int stream_id){ - PTRACE(4, "mod_h323\t======>FSH323Connection::write_audio_frame " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::write_audio_frame [%p]\n",this); switch_status_t status = SWITCH_STATUS_SUCCESS; h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); switch_assert(tech_pvt != NULL); if (!switch_channel_ready(m_fsChannel)) { - PTRACE(4, "mod_h323\t---------> RETURN"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::write_audio_frame END\n\n"); return SWITCH_STATUS_FALSE; } @@ -1487,18 +1533,18 @@ switch_status_t FSH323Connection::write_audio_frame(switch_frame_t *frame, switc if (switch_channel_ready(m_fsChannel)) { switch_yield(10000); } else { - PTRACE(4, "mod_h323\t---------> RETURN"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::write_audio_frame END\n\n"); return SWITCH_STATUS_GENERR; } } if (!switch_core_codec_ready(&tech_pvt->read_codec) || !tech_pvt->read_codec.implementation) { - PTRACE(4, "mod_h323\t---------> RETURN"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::write_audio_frame END\n\n"); return SWITCH_STATUS_GENERR; } if ((frame->flags & SFF_CNG)) { - PTRACE(4, "mod_h323\t---------> RETURN"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::write_audio_frame END\n\n"); return SWITCH_STATUS_SUCCESS; } switch_set_flag_locked(tech_pvt, TFLAG_WRITING); @@ -1508,17 +1554,17 @@ switch_status_t FSH323Connection::write_audio_frame(switch_frame_t *frame, switc } switch_clear_flag_locked(tech_pvt, TFLAG_WRITING); - PTRACE(4, "mod_h323\t---------> RETURN"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::write_audio_frame END\n\n"); return status; } switch_status_t FSH323Connection::read_video_frame(switch_frame_t **frame, switch_io_flag_t flag, int stream_id){ - PTRACE(4, "mod_h323\t======>FSH323Connection::read_video_frame " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::read_video_frame [%p]\n",this); } switch_status_t FSH323Connection::write_video_frame(switch_frame_t *frame, switch_io_flag_t flag, int stream_id){ - PTRACE(4, "mod_h323\t======>FSH323Connection::write_video_frame " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::write_video_frame [%p]\n",this); } /////////////////////////////////////////////////////////////////////// @@ -1540,7 +1586,7 @@ FSH323_ExternalRTPChannel::FSH323_ExternalRTPChannel( h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); m_RTPlocalIP = (const char *)ip.AsString(); SetExternalAddress(H323TransportAddress(ip, dataPort), H323TransportAddress(ip, dataPort+1)); - PTRACE(4, "mod_h323\t======>FSH323_ExternalRTPChannel::FSH323_ExternalRTPChannel sessionID="<FSH323_ExternalRTPChannel::FSH323_ExternalRTPChannel sessionID = %d :%s addr = %s:%d [%p]\n",sessionID,GetDirections[GetDirection()],(const char*)m_RTPlocalIP,m_RTPlocalPort,this); memset(&m_readFrame, 0, sizeof(m_readFrame)); m_readFrame.codec = m_switchCodec; @@ -1548,8 +1594,8 @@ FSH323_ExternalRTPChannel::FSH323_ExternalRTPChannel( m_fsChannel = switch_core_session_get_channel(m_fsSession); //SetExternalAddress(H323TransportAddress(localIpAddress, m_RTPlocalPort), H323TransportAddress(localIpAddress, m_RTPlocalPort+1)); - PTRACE(4, "mod_h323\t------->capability.GetPayloadType() return = "<capability.GetFormatName() return = "<capability.GetPayloadType() return = %s\n",((capability.GetPayloadType() <= RTP_DataFrame::LastKnownPayloadType)?PayloadTypesNames[capability.GetPayloadType()]:"[pt=128]")); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------->capability.GetFormatName() return = %s\n",(const char*)(capability.GetFormatName())); PString fname((const char *)capability.GetFormatName()); @@ -1561,70 +1607,70 @@ FSH323_ExternalRTPChannel::FSH323_ExternalRTPChannel( OpalMediaFormat format(fname, FALSE); m_format = &format; payloadCode = format.GetPayloadType(); - PTRACE(4, "mod_h323\t------->payloadCode = "<<(int)payloadCode); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------->payloadCode = %d\n",(int)payloadCode); } FSH323_ExternalRTPChannel::~FSH323_ExternalRTPChannel(){ h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); - switch_mutex_lock(tech_pvt->h323_mutex); - PTRACE(4, "mod_h323\t======>FSH323_ExternalRTPChannel::~FSH323_ExternalRTPChannel "<< GetDirection()<<" "<<*this); -/* if (IsRunning()){ - PTRACE(4, "mod_h323\t------------->Running"); - PTRACE(4, "mod_h323\t------------->m_sessionID = "<FSH323_ExternalRTPChannel::~FSH323_ExternalRTPChannel %s [%p]\n",GetDirections[GetDirection()],this); + if (m_rtp_resetting) { + switch_core_session_unlock_codec_read(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",m_fsSession); + switch_core_session_unlock_codec_write(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_write [%p]\n",m_fsSession); } - */ - switch_mutex_unlock(tech_pvt->h323_mutex); + } PBoolean FSH323_ExternalRTPChannel::Start(){ h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_lock\n"); switch_mutex_lock(tech_pvt->h323_mutex); - PTRACE(4, "mod_h323\t======>FSH323_ExternalRTPChannel::Start() "<<*this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::Start() [%p]\n",this); const char *err = NULL; switch_rtp_flag_t flags; char * timer_name = NULL; const char *var; - - PTRACE(4, "mod_h323\t------------->m_sessionID = "<m_sessionID = %d m_active_sessionID = %d\n",sessionID,m_conn->m_active_sessionID); + if (!(m_conn && H323_ExternalRTPChannel::Start())){ switch_mutex_unlock(tech_pvt->h323_mutex); - return FALSE; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); + return false; + } + + if ((tech_pvt->me == NULL)||((tech_pvt->me != NULL) && tech_pvt->me->m_channel_hangup)){ + switch_mutex_unlock(tech_pvt->h323_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); + return false; } if ((m_conn->m_active_sessionID != 0) && (m_conn->m_active_sessionID != sessionID)){ if (switch_core_codec_ready(&tech_pvt->read_codec) || switch_core_codec_ready(&tech_pvt->write_codec)) { - PTRACE(4, "mod_h323\t------------------->Changing Codec to "<Changing Codec to %s\n",(const char*)GetH245CodecName(m_capability)); m_conn->m_rxChennel = false; m_conn->m_txChennel = false; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_lock_codec_read [%p]\n",m_fsSession); switch_core_session_lock_codec_read(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_lock_codec_write [%p]\n",m_fsSession); switch_core_session_lock_codec_write(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_io_mutex_lock\n"); switch_mutex_lock(tech_pvt->h323_io_mutex); - switch_clear_flag_locked(tech_pvt, TFLAG_IO); + switch_clear_flag_locked(tech_pvt, TFLAG_IO); switch_mutex_unlock(tech_pvt->h323_io_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_io_mutex_unlock\n"); m_conn->m_rtp_resetting = 1; + m_rtp_resetting = 1; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_codec_read_destroy\n"); switch_core_codec_destroy(&tech_pvt->read_codec); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_codec_write_destroy\n"); switch_core_codec_destroy(&tech_pvt->write_codec); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_rtp_destroy\n"); switch_rtp_destroy(&tech_pvt->rtp_session); m_conn->m_startRTP = false; + tech_pvt->rtp_session = NULL; } } m_conn->m_active_sessionID = sessionID; @@ -1632,17 +1678,17 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ unsigned m_codec_ms = m_capability->GetTxFramesInPacket(); switch (m_capability->GetMainType()){ case H323Capability::e_Audio:{ - PTRACE(4, "mod_h323\t------------------------->H323Capability::e_Audio"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------------->H323Capability::e_Audio\n"); isAudio = true; break; } case H323Capability::e_Video:{ - PTRACE(4, "mod_h323\t------------------------->H323Capability::e_Video"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------------->H323Capability::e_Video\n"); isAudio = false; break; } case H323Capability::e_Data:{ - PTRACE(4, "mod_h323\t------------------------->H323Capability::e_Data"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------------->H323Capability::e_Data\n"); isAudio = true; m_codec_ms = 20; switch_channel_set_app_flag(m_fsChannel, CF_APP_T38); @@ -1652,12 +1698,12 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ } H323Codec *codec = GetCodec(); - PTRACE(4, "mod_h323\t------------------->GetFrameSize() return = "<GetFrameSize()); - PTRACE(4, "mod_h323\t------------------->GetFrameTime() return = "<GetFrameTime()); - PTRACE(4, "mod_h323\t------------------->payloadCode = "<<(int)payloadCode); - PTRACE(4, "mod_h323\t------------------->m_codec_ms return = "<m_capability->GetFormatName() return = "<GetFormatName()); - PTRACE(4, "mod_h323\t------------------->GetH245CodecName() return = "<GetFrameSize() return = %u\n",(unsigned)m_format->GetFrameSize()); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->GetFrameTime() return = %u\n",m_format->GetFrameTime()); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->payloadCode = %d\n",(int)payloadCode); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->m_codec_ms return = %u\n",m_codec_ms); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->m_capability->GetFormatName() return = %s\n",(const char*)(m_capability->GetFormatName())); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->GetH245CodecName() return = %s\n",(const char*)GetH245CodecName(m_capability)); if (GetDirection() == IsReceiver){ m_switchCodec = isAudio ? &tech_pvt->read_codec : &tech_pvt->vid_read_codec; @@ -1681,19 +1727,20 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ 8000, 0, 1, // Channels SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL, // Settings switch_core_session_get_pool(m_fsSession)) != SWITCH_STATUS_SUCCESS) { - PTRACE(1, "mod_h323\t" << switch_channel_get_name(m_fsChannel)<< " Cannot initialise " << ((GetDirection() == IsReceiver)? " read" : " write") << ' ' - << m_capability->GetMainType() << " codec " << m_capability << " for connection " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,"%s Cannot initialise %s %s codec for connection [%p]\n",switch_channel_get_name(m_fsChannel), ((GetDirection() == IsReceiver)? " read" : " write") + , GetMainTypes[m_capability->GetMainType()],(const char*)(m_capability->GetFormatName()),this); switch_channel_hangup(m_fsChannel, SWITCH_CAUSE_INCOMPATIBLE_DESTINATION); switch_mutex_unlock(tech_pvt->h323_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); return false; } - PTRACE(2, "mod_h323\t" << switch_channel_get_name(m_fsChannel)<< " Unsupported ptime of " << m_codec_ms << " on " << ((GetDirection() == IsReceiver)? " read" : " write") << ' ' - << m_capability->GetMainType() << " codec " << m_capability << " for connection " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,"%s Unsupported ptime of %u on %s %s codec %s for connection [%p]\n",switch_channel_get_name(m_fsChannel),m_codec_ms,((GetDirection() == IsReceiver)? " read" : " write") + ,GetMainTypes[m_capability->GetMainType()],(const char*)(m_capability->GetFormatName()),this); } - PTRACE(1, "mod_h323\t" << switch_channel_get_name(m_fsChannel)<< " initialise " << - switch_channel_get_name(m_fsChannel) << ((GetDirection() == IsReceiver)? " read" : " write") << ' ' - << m_capability->GetMainType() << " codec " << m_capability << " for connection " << *this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,"%s initialise %s codec %s for connection [%p]\n",switch_channel_get_name(m_fsChannel),((GetDirection() == IsReceiver)? " read" : " write") + ,GetMainTypes[m_capability->GetMainType()],(const char*)(m_capability->GetFormatName()),this); + if (GetDirection() == IsReceiver) { m_readFrame.rate = tech_pvt->read_codec.implementation->actual_samples_per_second; @@ -1708,6 +1755,7 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ switch_core_codec_destroy(m_switchCodec); m_switchCodec = NULL; switch_mutex_unlock(tech_pvt->h323_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); return false; } switch_channel_set_variable(m_fsChannel,"timer_name","soft"); @@ -1731,6 +1779,7 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ switch_core_codec_destroy(m_switchCodec); m_switchCodec = NULL; switch_mutex_unlock(tech_pvt->h323_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); return false; } switch_channel_set_variable(m_fsChannel,"timer_name","soft"); @@ -1741,25 +1790,45 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ } } - PTRACE(3, "mod_h323\tSet " << ((GetDirection() == IsReceiver)? " read" : " write") << ' ' - << m_capability->GetMainType() << " codec to << " << m_capability << " for connection " << *this); - PTRACE(4, "mod_h323\t------------->h323_mutex_lock"); - - +// PTRACE(4, "mod_h323\tSet " << ((GetDirection() == IsReceiver)? " read" : " write") << ' ' +// << m_capability->GetMainType() << " codec to << " << m_capability << " for connection " << *this); + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Set %s %s codec to %s for connection [%p]\n",((GetDirection() == IsReceiver)? " read" : " write") + ,GetMainTypes[m_capability->GetMainType()],(const char*)m_capability->GetFormatName(),this); + PIPSocket::Address remoteIpAddress; GetRemoteAddress(remoteIpAddress,m_RTPremotePort); m_RTPremoteIP = (const char *)remoteIpAddress.AsString(); - PTRACE(4, "mod_h323\t------------------->tech_pvt->rtp_session = "<rtp_session); - PTRACE(4, "mod_h323\t------------------->samples_per_packet = "<implementation->samples_per_packet); - PTRACE(4, "mod_h323\t------------------->actual_samples_per_second = "<implementation->actual_samples_per_second); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->tech_pvt->rtp_session = [%p]\n",tech_pvt->rtp_session); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->samples_per_packet = %lu\n",m_switchCodec->implementation->samples_per_packet); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->actual_samples_per_second = %lu\n",m_switchCodec->implementation->actual_samples_per_second); + + bool ch_port = false; + if (tech_pvt->rtp_session != NULL){ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->old remot port = %d new remote port = %d\n",switch_rtp_get_remote_port(tech_pvt->rtp_session),m_RTPremotePort); + if ((switch_rtp_get_remote_port(tech_pvt->rtp_session) != m_RTPremotePort) && (GetDirection() != IsReceiver) && (m_conn->m_rtp_resetting == 1)){ + ch_port = true; + m_conn->m_startRTP = false; + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_lock_codec_read [%p]\n",m_fsSession); + switch_core_session_lock_codec_read(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_io_mutex_lock\n"); + switch_mutex_lock(tech_pvt->h323_io_mutex); + switch_clear_flag_locked(tech_pvt, TFLAG_IO); + switch_mutex_unlock(tech_pvt->h323_io_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_io_mutex_unlock\n"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_rtp_destroy\n"); + switch_rtp_destroy(&tech_pvt->rtp_session); + } + } if ((!m_conn->m_startRTP)) { flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_DATAWAIT|SWITCH_RTP_FLAG_AUTO_CNG|SWITCH_RTP_FLAG_RAW_WRITE); - PTRACE(4, "mod_h323\t------------------->timer_name = "<timer_name = %s\n",switch_channel_get_variable(m_fsChannel, "timer_name")); if ((var = switch_channel_get_variable(m_fsChannel, "timer_name"))) { timer_name = (char *) var; } - PTRACE(4, "mod_h323\t------------------->timer_name = "<timer_name = %s\n",timer_name); tech_pvt->rtp_session = switch_rtp_new((const char *)m_RTPlocalIP, m_RTPlocalPort, (const char *)m_RTPremoteIP, @@ -1769,7 +1838,7 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ m_codec_ms * 1000, (switch_rtp_flag_t) flags, timer_name, &err, switch_core_session_get_pool(m_fsSession)); - PTRACE(4, "mod_h323\t------------------------->tech_pvt->rtp_session = "<rtp_session); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------------->tech_pvt->rtp_session = %p\n",tech_pvt->rtp_session); m_conn->m_startRTP = true; if (switch_rtp_ready(tech_pvt->rtp_session)) { switch_channel_set_flag(m_fsChannel, CF_FS_RTP); @@ -1777,20 +1846,41 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "AUDIO RTP REPORTS ERROR: [%s]\n", switch_str_nil(err)); switch_channel_hangup(m_fsChannel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); switch_mutex_unlock(tech_pvt->h323_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); return SWITCH_STATUS_FALSE; } } + if (ch_port){ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_io_mutex_lock\n"); + switch_mutex_lock(tech_pvt->h323_io_mutex); + switch_set_flag_locked(tech_pvt, TFLAG_IO); + switch_mutex_unlock(tech_pvt->h323_io_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_io_mutex_unlock\n"); + switch_core_session_unlock_codec_read(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",m_fsSession); + } - PTRACE(4, "mod_h323\t------------->External RTP address "<h323_mutex_unlock"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->External RTP address %s:%u\n",(const char*)m_RTPremoteIP,m_RTPremotePort); + + if (GetDirection() == IsReceiver) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_io_mutex_lock\n"); + switch_mutex_lock(tech_pvt->h323_io_mutex); + switch_set_flag_locked(tech_pvt, TFLAG_IO); + switch_mutex_unlock(tech_pvt->h323_io_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_io_mutex_unlock\n"); + } if (m_conn->m_rtp_resetting) { - if (GetDirection() == IsReceiver) - switch_core_session_unlock_codec_read(m_fsSession); - else{ - switch_core_session_unlock_codec_write(m_fsSession); - if (m_conn->m_callOnPreAnswer) + if (GetDirection() == IsReceiver){ + switch_core_session_unlock_codec_read(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",m_fsSession); + }else{ + switch_core_session_unlock_codec_write(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_write [%p]\n",m_fsSession); + if (m_conn->m_callOnPreAnswer){ switch_core_session_unlock_codec_read(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",m_fsSession); + } } } @@ -1805,15 +1895,10 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ switch_channel_mark_pre_answered(m_fsChannel); } - PTRACE(4, "mod_h323\t------------->h323_io_mutex_lock"); - switch_mutex_lock(tech_pvt->h323_io_mutex); - switch_set_flag_locked(tech_pvt, TFLAG_IO); - switch_mutex_unlock(tech_pvt->h323_io_mutex); - PTRACE(4, "mod_h323\t------------->h323_io_mutex_unlock"); if ((m_capability->GetMainType() == H323Capability::e_Data) && m_conn->m_rxChennel && m_conn->m_txChennel ) { const char *uuid = switch_channel_get_variable(m_fsChannel, SWITCH_SIGNAL_BOND_VARIABLE); if (uuid != NULL){ - PTRACE(4, "mod_h323\t------------------------->switch_rtp_udptl_mode"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------------->switch_rtp_udptl_mode\n"); switch_rtp_udptl_mode(tech_pvt->rtp_session); switch_core_session_message_t msg = { 0 }; msg.from = switch_channel_get_name(m_fsChannel); @@ -1821,6 +1906,7 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ switch_core_session_message_send(uuid,&msg); } } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); switch_mutex_unlock(tech_pvt->h323_mutex); return true; } @@ -1829,36 +1915,36 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ PBoolean FSH323_ExternalRTPChannel::OnReceivedPDU( const H245_H2250LogicalChannelParameters& param, unsigned& errorCode){ - PTRACE(4, "mod_h323\t======>FSH323_ExternalRTPChannel::OnReceivedPDU ["<<*this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::OnReceivedPDU [%p]\n",this); if (!H323_ExternalRTPChannel::OnReceivedPDU(param,errorCode)) return true; PIPSocket::Address remoteIpAddress; WORD remotePort; GetRemoteAddress(remoteIpAddress,remotePort); - PTRACE(4, "mod_h323\tRemote RTP address "<<(const char *)remoteIpAddress.AsString()<<":"<setRemoteAddress((const char *)remoteIpAddress.AsString(), remotePort); return true; } PBoolean FSH323_ExternalRTPChannel::OnSendingPDU(H245_H2250LogicalChannelParameters& param){ - PTRACE(4, "mod_h323\t======>FSH323_ExternalRTPChannel::OnSendingPDU ["<<*this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"FSH323_ExternalRTPChannel::OnSendingPDU [%p]\n",this); return H323_ExternalRTPChannel::OnSendingPDU(param); } PBoolean FSH323_ExternalRTPChannel::OnReceivedAckPDU(const H245_H2250LogicalChannelAckParameters& param){ - PTRACE(4, "mod_h323\t======>FSH323_ExternalRTPChannel::OnReceivedAckPDU ["<<*this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::OnReceivedAckPDU [%p]\n",this); return H323_ExternalRTPChannel::OnReceivedAckPDU(param); } void FSH323_ExternalRTPChannel::OnSendOpenAck(H245_H2250LogicalChannelAckParameters& param){ - PTRACE(4, "mod_h323\t======>FSH323_ExternalRTPChannel::OnSendOpenAck ["<<*this<<"]"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::OnSendOpenAck [%p]\n",this); H323_ExternalRTPChannel::OnSendOpenAck(param); } FSH323Connection * FSH323EndPoint::FSMakeCall(const PString & dest, void *userData){ - PTRACE(4, "mod_h323\t======>FSH323EndPoint::FSMakeCall DST NUMBER = "<FSH323EndPoint::FSMakeCall DST NUMBER = %s [%p]\n",(const char*)dest,this); FSH323Connection * connection; PString token; @@ -1870,13 +1956,12 @@ FSH323Connection * FSH323EndPoint::FSMakeCall(const PString & dest, void *userDa WORD port; if (taddr.GetIpAndPort(addr, port)) { if (addr) { - PTRACE(4, "mod_h323\t----> Using "< Unable to create transport for outgoing call"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"----> Unable to create transport for outgoing call\n"); } } else - PTRACE(4, "mod_h323\t----> Unable to get address and port"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"----> Unable to get address and port\n"); } if (!(connection = (FSH323Connection *)H323EndPoint::MakeCall(dest, token, userData))) { @@ -1890,7 +1975,7 @@ static switch_call_cause_t create_outgoing_channel(switch_core_session_t *sessio 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){ - PTRACE(4, "mod_h323\t======>create_outgoing_channel DST NUMBER = "<destination_number); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>create_outgoing_channel DST NUMBER = %s\n",outbound_profile->destination_number); FSH323Connection * connection; if (h323_process == NULL) { @@ -1902,13 +1987,13 @@ static switch_call_cause_t create_outgoing_channel(switch_core_session_t *sessio } *new_session = connection->GetSession(); - PTRACE(4, "mod_h323\t--------->GetSession() return = "<GetSession()); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"--------->GetSession() return = [%p]\n",connection->GetSession()); return SWITCH_CAUSE_SUCCESS; } static switch_status_t on_destroy(switch_core_session_t *session){ - PTRACE(4, "mod_h323\t======>on_destroy "); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>on_destroy\n"); h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(session); @@ -1938,18 +2023,53 @@ static switch_status_t on_destroy(switch_core_session_t *session){ static switch_status_t on_hangup(switch_core_session_t *session){ - PTRACE(4, "mod_h323\t======>switch_status_t on_hangup "); - + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>switch_status_t on_hangup [%p]\n",session); + h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(session); + + switch_channel_t *channel = switch_core_session_get_channel(session); - h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(session); - if (tech_pvt->me) { - PTRACE(4, "mod_h323\t----->"<<(const char *)(tech_pvt->me->GetCallToken())); + if (tech_pvt->me) { + if (tech_pvt->me->m_rtp_resetting == 1) { + switch_core_session_unlock_codec_read(session); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",session); + switch_core_session_unlock_codec_write(session); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_write [%p]\n",session); + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_lock\n"); + switch_mutex_lock(tech_pvt->h323_mutex); + tech_pvt->me->m_channel_hangup = true; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); + switch_mutex_unlock(tech_pvt->h323_mutex); + if (tech_pvt->me->TryLock() == 1){ + tech_pvt->me->CloseAllLogicalChannels(true); + tech_pvt->me->CloseAllLogicalChannels(false); + tech_pvt->me->Unlock(); + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"----->%s\n",(const char *)(tech_pvt->me->GetCallToken())); Q931::CauseValues cause = (Q931::CauseValues)switch_channel_get_cause_q850(channel); + int trylock = tech_pvt->me->TryLock(); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-----> () = %d\n",trylock); + if (trylock == 1){ + const PString currentToken(tech_pvt->me->GetCallToken()); + FSH323Connection *connection = (FSH323Connection *)tech_pvt->me->GetEndPoint()->FindConnectionWithLock(currentToken); + connection->Unlock(); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-----> UnLock()\n"); + tech_pvt->me->Unlock(); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-----> UnLock()\n"); + }else if (trylock == -1){ + tech_pvt->me->Unlock(); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-----> UnLock()\n"); + } tech_pvt->me->SetQ931Cause(cause); tech_pvt->me->ClearCallSynchronous(NULL, H323TranslateToCallEndReason(cause, UINT_MAX)); tech_pvt->me = NULL; - } - +// switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_lock\n"); +// switch_mutex_lock(tech_pvt->h323_mutex); + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_lock\n"); + switch_mutex_lock(tech_pvt->h323_mutex); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); + switch_mutex_unlock(tech_pvt->h323_mutex); return SWITCH_STATUS_SUCCESS; } diff --git a/src/mod/endpoints/mod_h323/mod_h323.h b/src/mod/endpoints/mod_h323/mod_h323.h index d8b828f2ce..9d8369ddfc 100644 --- a/src/mod/endpoints/mod_h323/mod_h323.h +++ b/src/mod/endpoints/mod_h323/mod_h323.h @@ -31,6 +31,69 @@ #define OpalT38_IFP_COR GetOpalT38_IFP_COR() #define OpalT38_IFP_PRE GetOpalT38_IFP_PRE() +const char* const GetDirections[H323Channel::NumDirections+1] = { + "IsBidirectional", + "IsTransmitter", + "IsReceiver", + "NumDirections" +}; + +const char * const PayloadTypesNames[RTP_DataFrame::LastKnownPayloadType] = { + "PCMU", + "FS1016", + "G721", + "GSM", + "G7231", + "DVI4_8k", + "DVI4_16k", + "LPC", + "PCMA", + "G722", + "L16_Stereo", + "L16_Mono", + "G723", + "CN", + "MPA", + "G728", + "DVI4_11k", + "DVI4_22k", + "G729", + "CiscoCN", + NULL, NULL, NULL, NULL, NULL, + "CelB", + "JPEG", + NULL, NULL, NULL, NULL, + "H261", + "MPV", + "MP2T", + "H263" +}; + + + +const char* const GetAnswerCallResponse[H323Connection::NumAnswerCallResponses+1]={ + "AnswerCallNow", + "AnswerCallDenied", + "AnswerCallPending", + "AnswerCallDeferred", + "AnswerCallAlertWithMedia", + "AnswerCallDeferredWithMedia", + "AnswerCallDeniedByInvalidCID", + "AnswerCallNowWithAlert", + "NumAnswerCallResponses" +}; + +const char* const GetMainTypes[H323Capability::e_NumMainTypes+1] = { + "Audio", + "Video", + "Data", + "UserInput", + "ExtendVideo", + "GenericControl", + "ConferenceControl", + "NumMainTypes" +}; + extern void SetT38_IFP_PRE(); class OpalMediaFormat; @@ -179,6 +242,7 @@ class FSH323EndPoint:public H323EndPoint { int m_gkretry; FSGkRegThread *m_thread; bool m_stop_gk; + bool m_fax_old_asn; }; @@ -231,14 +295,18 @@ class FSH323Connection:public H323Connection { H245_RequestModeAck & ack, H245_RequestModeReject & reject, PINDEX & selectedMode); + virtual bool OnSendSignalSetup(H323SignalPDU & setupPDU); bool SetLocalCapabilities(); - static bool decodeCapability(const H323Capability & capability, const char **dataFormat, int *payload = 0, PString * capabName = 0); + bool decodeCapability(const H323Capability & capability, const char **dataFormat, int *payload = 0, PString * capabName = 0); virtual H323Connection::AnswerCallResponse OnAnswerCall(const PString & caller, const H323SignalPDU & signalPDU, H323SignalPDU & connectPDU); virtual bool OnReceivedCapabilitySet(const H323Capabilities & remoteCaps, const H245_MultiplexCapability * muxCap, H245_TerminalCapabilitySetReject & reject); switch_core_session_t *GetSession() const { return m_fsSession; } + FSH323EndPoint* GetEndPoint() const{ + return m_endpoint; + } virtual void SendUserInputTone(char tone, unsigned duration = 0, unsigned logicalChannel = 0, unsigned rtpTimestamp = 0); virtual void OnUserInputTone(char, unsigned, unsigned, unsigned); virtual void OnUserInputString(const PString & value); @@ -273,6 +341,7 @@ class FSH323Connection:public H323Connection { bool m_active_chennel_fax; int m_rtp_resetting; bool m_isRequst_fax; + bool m_channel_hangup; protected: FSH323EndPoint * m_endpoint; PString m_remoteAddr; @@ -316,6 +385,7 @@ class FSH323_ExternalRTPChannel:public H323_ExternalRTPChannel { WORD m_RTPlocalPort; BYTE payloadCode; unsigned m_sessionID; + int m_rtp_resetting; }; class BaseG7231Capab:public H323AudioCapability { @@ -408,7 +478,7 @@ class BaseGSM0610Cap:public H323AudioCapability { gsm.m_scrambled = m_scrambled; return true; } virtual bool OnReceivedPDU(const H245_AudioCapability & pdu, unsigned &packetSize) { - PTRACE(2, "mod_h323\t==============>BaseGSM0610Cap::OnReceivedPDU"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"==============>BaseGSM0610Cap::OnReceivedPDU [%p]\n",this); if (pdu.GetTag() != H245_AudioCapability::e_gsmFullRate) return false; const H245_GSMAudioCapability & gsm = pdu; @@ -459,9 +529,6 @@ class FSH323_T38CapabilityPre : public FSH323_T38Capability { FSH323_T38CapabilityPre() : FSH323_T38Capability(OpalT38_IFP_PRE) {} }; -//H323_REGISTER_CAPABILITY(FSH323_T38CapabilityCor, OpalT38_IFP_COR) -//H323_REGISTER_CAPABILITY(FSH323_T38CapabilityPre, OpalT38_IFP_PRE) - H323Channel * FSH323_T38Capability::CreateChannel( H323Connection & connection, @@ -469,10 +536,10 @@ H323Channel * FSH323_T38Capability::CreateChannel( unsigned int sessionID, const H245_H2250LogicalChannelParameters * params) const { - PTRACE(1, "FSH323_T38Capability::CreateChannel " - << connection - << " sessionID=" << sessionID - << " direction=" << direction); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"FSH323_T38Capability::CreateChannel %p sessionID= %u direction=%s [%p]\n" + ,&connection + ,sessionID + ,GetDirections[direction]); return connection.CreateRealTimeLogicalChannel(*this, direction, sessionID, params); } @@ -494,9 +561,6 @@ class cls : public base { \ H323_REGISTER_CAPABILITY(cls,name) \ -//DEFINE_H323_CAPAB_m(FS_T38_COR,FSH323_T38Capability,OpalT38_IFP_COR) -//DEFINE_H323_CAPAB_m(FS_T38_RPE,FSH323_T38Capability,OpalT38_IFP_PRE) - DEFINE_H323_CAPAB(FS_G7231_5, BaseG7231Capab, false, OPAL_G7231_5k3 "{sw}") DEFINE_H323_CAPAB(FS_G7231_6, BaseG7231Capab, false, OPAL_G7231_6k3 "{sw}") DEFINE_H323_CAPAB(FS_G7231A_5, BaseG7231Capab, true, OPAL_G7231A_5k3 "{sw}") From 0b353d7a3026b35a426ab44bc750d02a8c8801fa Mon Sep 17 00:00:00 2001 From: root Date: Wed, 21 Jul 2010 19:33:05 +0400 Subject: [PATCH 020/161] add missing conf prameter --- src/mod/endpoints/mod_h323/h323.conf.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mod/endpoints/mod_h323/h323.conf.xml b/src/mod/endpoints/mod_h323/h323.conf.xml index 705da48b85..a176855ef6 100644 --- a/src/mod/endpoints/mod_h323/h323.conf.xml +++ b/src/mod/endpoints/mod_h323/h323.conf.xml @@ -15,6 +15,7 @@ + From ed7ccc14326d3a9176e350350f37b3f034c77c06 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 21 Jul 2010 14:48:08 -0500 Subject: [PATCH 021/161] add api_reporting_hook (like api_hangup_hook but after reporting state) both honor session_in_hangup_hook --- src/include/switch_types.h | 1 + src/switch_core_state_machine.c | 107 +++++++++++++++++++------------- 2 files changed, 65 insertions(+), 43 deletions(-) diff --git a/src/include/switch_types.h b/src/include/switch_types.h index d18f6ecb93..7752c4fbef 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -139,6 +139,7 @@ SWITCH_BEGIN_EXTERN_C #define SWITCH_SOFT_HOLDING_UUID_VARIABLE "soft_holding_uuid" #define SWITCH_API_BRIDGE_END_VARIABLE "api_after_bridge" #define SWITCH_API_HANGUP_HOOK_VARIABLE "api_hangup_hook" +#define SWITCH_API_REPORTING_HOOK_VARIABLE "api_reporting_hook" #define SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE "session_in_hangup_hook" #define SWITCH_PROCESS_CDR_VARIABLE "process_cdr" #define SWITCH_FORCE_PROCESS_CDR_VARIABLE "force_process_cdr" diff --git a/src/switch_core_state_machine.c b/src/switch_core_state_machine.c index 7c6cc7f306..a5467b6fa7 100644 --- a/src/switch_core_state_machine.c +++ b/src/switch_core_state_machine.c @@ -442,14 +442,48 @@ SWITCH_DECLARE(void) switch_core_session_destroy_state(switch_core_session_t *se return; } +static void api_hook(switch_core_session_t *session, const char *hook_var, int use_session) +{ + if (!zstr(hook_var)) { + switch_stream_handle_t stream = { 0 }; + char *cmd = switch_core_session_strdup(session, hook_var); + char *arg = NULL; + char *expanded = NULL; + + if ((arg = strchr(cmd, ':')) && *(arg + 1) == ':') { + *arg++ = '\0'; + *arg++ = '\0'; + } else { + if ((arg = strchr(cmd, ' '))) { + *arg++ = '\0'; + } + } + + SWITCH_STANDARD_STREAM(stream); + + switch_channel_get_variables(session->channel, &stream.param_event); + switch_channel_event_set_data(session->channel, stream.param_event); + expanded = switch_channel_expand_variables(session->channel, arg); + + switch_api_execute(cmd, expanded, use_session ? session : NULL, &stream); + + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Hangup Command %s %s(%s):\n%s\n", + use_session ? "with Session" : "with no Session", cmd, switch_str_nil(expanded), + switch_str_nil((char *) stream.data) ); + + if (expanded != arg) { + switch_safe_free(expanded); + } + switch_safe_free(stream.data); + } +} + + SWITCH_DECLARE(void) switch_core_session_hangup_state(switch_core_session_t *session, switch_bool_t force) { - const char *hook_var; - switch_core_session_t *use_session = NULL; switch_call_cause_t cause = switch_channel_get_cause(session->channel); switch_call_cause_t cause_q850 = switch_channel_get_cause_q850(session->channel); - switch_event_t *event; int proceed = 1; int global_proceed = 1; int do_extra_handlers = 1; @@ -459,7 +493,8 @@ SWITCH_DECLARE(void) switch_core_session_hangup_state(switch_core_session_t *ses const switch_endpoint_interface_t *endpoint_interface; const switch_state_handler_table_t *driver_state_handler = NULL; const switch_state_handler_table_t *application_state_handler = NULL; - + const char *hook_var; + int use_session; if (!force) { if (!switch_channel_test_flag(session->channel, CF_EARLY_HANGUP) && !switch_test_flag((&runtime), SCF_EARLY_HANGUP)) { @@ -499,48 +534,13 @@ SWITCH_DECLARE(void) switch_core_session_hangup_state(switch_core_session_t *ses STATE_MACRO(hangup, "HANGUP"); - hook_var = switch_channel_get_variable(session->channel, SWITCH_API_HANGUP_HOOK_VARIABLE); - if (switch_true(switch_channel_get_variable(session->channel, SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE))) { - use_session = session; - } + if ((hook_var = switch_channel_get_variable(session->channel, SWITCH_API_HANGUP_HOOK_VARIABLE))) { - if (!zstr(hook_var)) { - switch_stream_handle_t stream = { 0 }; - char *cmd = switch_core_session_strdup(session, hook_var); - char *arg = NULL; - char *expanded = NULL; - - if ((arg = strchr(cmd, ':')) && *(arg + 1) == ':') { - *arg++ = '\0'; - *arg++ = '\0'; - } else { - if ((arg = strchr(cmd, ' '))) { - *arg++ = '\0'; - } + if (switch_true(switch_channel_get_variable(session->channel, SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE))) { + use_session = 1; } - SWITCH_STANDARD_STREAM(stream); - - switch_channel_get_variables(session->channel, &stream.param_event); - switch_channel_event_set_data(session->channel, stream.param_event); - expanded = switch_channel_expand_variables(session->channel, arg); - - switch_api_execute(cmd, expanded, use_session, &stream); - - switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Hangup Command %s %s(%s):\n%s\n", - use_session ? "with Session" : "with no Session", cmd, switch_str_nil(expanded), - switch_str_nil((char *) stream.data) ); - - if (expanded != arg) { - switch_safe_free(expanded); - } - switch_safe_free(stream.data); - } - - if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_HANGUP_COMPLETE) == SWITCH_STATUS_SUCCESS) { - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Hangup-Cause", switch_channel_cause2str(cause)); - switch_channel_event_set_data(session->channel, event); - switch_event_fire(&event); + api_hook(session, hook_var, use_session); } switch_set_flag(session, SSF_HANGUP); @@ -559,6 +559,10 @@ SWITCH_DECLARE(void) switch_core_session_reporting_state(switch_core_session_t * int silly = 0; int index = 0; const char *var = switch_channel_get_variable(session->channel, SWITCH_PROCESS_CDR_VARIABLE); + const char *hook_var; + int use_session; + switch_event_t *event; + switch_call_cause_t cause = switch_channel_get_cause(session->channel); if (switch_channel_test_flag(session->channel, CF_REPORTING)) { return; @@ -590,6 +594,23 @@ SWITCH_DECLARE(void) switch_core_session_reporting_state(switch_core_session_t * STATE_MACRO(reporting, "REPORTING"); + if ((hook_var = switch_channel_get_variable(session->channel, SWITCH_API_REPORTING_HOOK_VARIABLE))) { + + if (switch_true(switch_channel_get_variable(session->channel, SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE))) { + use_session = 1; + } + + api_hook(session, hook_var, use_session); + } + + if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_HANGUP_COMPLETE) == SWITCH_STATUS_SUCCESS) { + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Hangup-Cause", switch_channel_cause2str(cause)); + switch_channel_event_set_data(session->channel, event); + switch_event_fire(&event); + } + + + return; } From d3108020c57ec0dc4d0a47bf8be4b959d643de9f Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 21 Jul 2010 19:31:49 -0500 Subject: [PATCH 022/161] use wait_for_state with NULL instead of same channel twice --- src/mod/endpoints/mod_loopback/mod_loopback.c | 3 +-- src/switch_ivr.c | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/mod/endpoints/mod_loopback/mod_loopback.c b/src/mod/endpoints/mod_loopback/mod_loopback.c index 0e52352b05..c87f2258ed 100644 --- a/src/mod/endpoints/mod_loopback/mod_loopback.c +++ b/src/mod/endpoints/mod_loopback/mod_loopback.c @@ -804,11 +804,10 @@ static switch_status_t loopback_bowout_on_execute_state_handler(switch_core_sess switch_channel_caller_extension_masquerade(channel, other_channel, 0); switch_channel_set_state(other_channel, CS_RESET); - switch_channel_wait_for_state(other_channel, other_channel, CS_RESET); + switch_channel_wait_for_state(other_channel, NULL, CS_RESET); switch_channel_set_variable(channel, "process_cdr", "false"); switch_channel_set_variable(b_channel, "process_cdr", "false"); switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); - switch_channel_hangup(b_channel, SWITCH_CAUSE_NORMAL_CLEARING); switch_channel_set_state(other_channel, CS_EXECUTE); switch_core_session_rwunlock(other_session); } diff --git a/src/switch_ivr.c b/src/switch_ivr.c index c66c1d1821..f19113dfbd 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -1311,7 +1311,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_nomedia(const char *uuid, switch_medi if (other_channel) { if (!switch_core_session_in_thread(session)) { - switch_channel_wait_for_state(channel, channel, CS_PARK); + switch_channel_wait_for_state(channel, NULL, CS_PARK); switch_channel_wait_for_flag(channel, CF_REQ_MEDIA, SWITCH_FALSE, 10000, NULL); switch_channel_wait_for_flag(channel, CF_MEDIA_ACK, SWITCH_TRUE, 10000, NULL); switch_channel_wait_for_flag(channel, CF_MEDIA_SET, SWITCH_TRUE, 10000, NULL); From 7518c86a93cf352f35dc33c13c4aa960b9001642 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 21 Jul 2010 19:40:13 -0500 Subject: [PATCH 023/161] fifo tweaks --- src/mod/applications/mod_fifo/mod_fifo.c | 105 ++++++++++++----------- 1 file changed, 53 insertions(+), 52 deletions(-) diff --git a/src/mod/applications/mod_fifo/mod_fifo.c b/src/mod/applications/mod_fifo/mod_fifo.c index e5771b5a11..d4e572030a 100644 --- a/src/mod/applications/mod_fifo/mod_fifo.c +++ b/src/mod/applications/mod_fifo/mod_fifo.c @@ -1149,10 +1149,10 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void if (node) { - switch_mutex_lock(node->mutex); - //node->busy = switch_epoch_time_now(NULL) + 600; + switch_thread_rwlock_wrlock(node->rwlock); + node->busy = 0; node->ring_consumer_count = 1; - switch_mutex_unlock(node->mutex); + switch_thread_rwlock_unlock(node->rwlock); } else { goto end; } @@ -1319,7 +1319,7 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void char *sql = switch_mprintf("update fifo_outbound set ring_count=ring_count-1, " "outbound_fail_count=outbound_fail_count+1, " "outbound_fail_total_count = outbound_fail_total_count+1, " - "next_avail=%ld + lag where uuid='%q' and ring_count > 0", + "next_avail=%ld + lag + 1 where uuid='%q' and ring_count > 0", (long) switch_epoch_time_now(NULL), h->uuid); fifo_execute_sql(sql, globals.sql_mutex); switch_safe_free(sql); @@ -1389,6 +1389,14 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void cbh->ready = 1; + if (node) { + switch_thread_rwlock_wrlock(node->rwlock); + node->ring_consumer_count = 0; + node->busy = 0; + switch_thread_rwlock_unlock(node->rwlock); + } + + for (i = 0; i < cbh->rowcount; i++) { struct call_helper *h = cbh->rows[i]; del_consumer_outbound_call(h->uuid); @@ -1404,14 +1412,7 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void if (pop_dup) { switch_event_destroy(&pop_dup); } - - if (node) { - switch_mutex_lock(node->mutex); - node->ring_consumer_count = 0; - //node->busy = switch_epoch_time_now(NULL) + connected; - switch_mutex_unlock(node->mutex); - } - + switch_core_destroy_memory_pool(&cbh->pool); return NULL; @@ -1439,10 +1440,10 @@ static void *SWITCH_THREAD_FUNC o_thread_run(switch_thread_t *thread, void *obj) switch_mutex_unlock(globals.mutex); if (node) { - switch_mutex_lock(node->mutex); + switch_thread_rwlock_wrlock(node->rwlock); node->ring_consumer_count++; - //node->busy = switch_epoch_time_now(NULL) + 600; - switch_mutex_unlock(node->mutex); + node->busy = 0; + switch_thread_rwlock_unlock(node->rwlock); } switch_event_create(&ovars, SWITCH_EVENT_REQUEST_PARAMS); @@ -1485,7 +1486,7 @@ static void *SWITCH_THREAD_FUNC o_thread_run(switch_thread_t *thread, void *obj) if (status != SWITCH_STATUS_SUCCESS) { sql = switch_mprintf("update fifo_outbound set ring_count=ring_count-1, " - "outbound_fail_count=outbound_fail_count+1, next_avail=%ld + lag where uuid='%q' and use_count > 0", + "outbound_fail_count=outbound_fail_count+1, next_avail=%ld + lag + 1 where uuid='%q' and use_count > 0", (long) switch_epoch_time_now(NULL), h->uuid); fifo_execute_sql(sql, globals.sql_mutex); switch_safe_free(sql); @@ -1539,12 +1540,12 @@ static void *SWITCH_THREAD_FUNC o_thread_run(switch_thread_t *thread, void *obj) switch_event_destroy(&ovars); if (node) { - switch_mutex_lock(node->mutex); + switch_thread_rwlock_wrlock(node->rwlock); if (node->ring_consumer_count-- < 0) { node->ring_consumer_count = 0; } - //node->busy = switch_epoch_time_now(NULL) + connected; - switch_mutex_unlock(node->mutex); + node->busy = 0; + switch_thread_rwlock_unlock(node->rwlock); } switch_core_destroy_memory_pool(&h->pool); @@ -1652,15 +1653,10 @@ static void find_consumers(fifo_node_t *node) fifo_execute_sql_callback(globals.sql_mutex, sql, place_call_ringall_callback, cbh); if (cbh->rowcount) { - int sanity = 40; - switch_threadattr_create(&thd_attr, cbh->pool); switch_threadattr_detach_set(thd_attr, 1); switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); switch_thread_create(&thread, thd_attr, ringall_thread_run, cbh, cbh->pool); - while(--sanity > 0 && !cbh->ready) { - switch_yield(100000); - } } } @@ -1689,8 +1685,7 @@ static void *SWITCH_THREAD_FUNC node_thread_run(switch_thread_t *thread, void *o for (hi = switch_hash_first(NULL, globals.fifo_hash); hi; hi = switch_hash_next(hi)) { switch_hash_this(hi, &var, NULL, &val); if ((node = (fifo_node_t *) val)) { - switch_mutex_lock(node->mutex); - if (node->has_outbound && node->ready) {// && switch_epoch_time_now(NULL) > node->busy) { + if (node->has_outbound && node->ready && !node->busy) { ppl_waiting = node_consumer_wait_count(node); consumer_total = node->consumer_count; idle_consumers = node_idle_consumers(node); @@ -1704,7 +1699,6 @@ static void *SWITCH_THREAD_FUNC node_thread_run(switch_thread_t *thread, void *o switch_yield(1000000); } } - switch_mutex_unlock(node->mutex); } } switch_mutex_unlock(globals.mutex); @@ -1922,8 +1916,9 @@ static void dec_use_count(switch_channel_t *channel) if ((outbound_id = switch_channel_get_variable(channel, "fifo_outbound_uuid"))) { del_bridge_call(outbound_id); - sql = switch_mprintf("update fifo_outbound set use_count=use_count-1, stop_time=%ld, next_avail=%ld + lag where use_count > 0 and uuid='%q'", + sql = switch_mprintf("update fifo_outbound set use_count=use_count-1, stop_time=%ld, next_avail=%ld + lag + 1 where use_count > 0 and uuid='%q'", now, now, outbound_id); + fifo_execute_sql(sql, globals.sql_mutex); switch_safe_free(sql); } @@ -1963,9 +1958,15 @@ SWITCH_STANDARD_APP(fifo_track_call_function) return; } + if (switch_true(switch_channel_get_variable(channel, "fifo_track_call"))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "%s trying to double-track call!\n", switch_channel_get_name(channel)); + return; + } + add_bridge_call(data); switch_channel_set_variable(channel, "fifo_outbound_uuid", data); + switch_channel_set_variable(channel, "fifo_track_call", "true"); if (switch_channel_direction(channel) == SWITCH_CALL_DIRECTION_OUTBOUND) { col1 = "manual_calls_in_count"; @@ -1978,6 +1979,7 @@ SWITCH_STANDARD_APP(fifo_track_call_function) sql = switch_mprintf("update fifo_outbound set stop_time=0,start_time=%ld,outbound_fail_count=0,use_count=use_count+1,%s=%s+1,%s=%s+1 where uuid='%q'", (long) switch_epoch_time_now(NULL), col1, col1, col2, col2, data); fifo_execute_sql(sql, globals.sql_mutex); + switch_safe_free(sql); @@ -2218,7 +2220,7 @@ SWITCH_STANDARD_APP(fifo_function) switch_channel_answer(channel); - switch_mutex_lock(node->mutex); + switch_thread_rwlock_wrlock(node->rwlock); node->caller_count++; if ((pri = switch_channel_get_variable(channel, "fifo_priority"))) { @@ -2257,7 +2259,7 @@ SWITCH_STANDARD_APP(fifo_function) switch_channel_set_variable(channel, "fifo_priority", tmp); } - switch_mutex_unlock(node->mutex); + switch_thread_rwlock_unlock(node->rwlock); ts = switch_micro_time_now(); switch_time_exp_lt(&tm, ts); @@ -2342,6 +2344,8 @@ SWITCH_STANDARD_APP(fifo_function) switch_channel_clear_app_flag(channel, CF_APP_TAGGED); abort: + + fifo_caller_del(switch_core_session_get_uuid(session)); if (!aborted && switch_channel_ready(channel)) { switch_channel_set_state(channel, CS_HIBERNATE); @@ -2361,10 +2365,10 @@ SWITCH_STANDARD_APP(fifo_function) } switch_mutex_lock(globals.mutex); - switch_mutex_lock(node->mutex); + switch_thread_rwlock_wrlock(node->rwlock); node_remove_uuid(node, uuid); node->caller_count--; - switch_mutex_unlock(node->mutex); + switch_thread_rwlock_unlock(node->rwlock); send_presence(node); check_cancel(node); switch_mutex_unlock(globals.mutex); @@ -2588,15 +2592,10 @@ SWITCH_STANDARD_APP(fifo_function) } } - if (pop) { - fifo_caller_del(switch_str_nil(switch_event_get_header(pop, "unique-id"))); - } - - if (pop && !node_consumer_wait_count(node)) { - switch_mutex_lock(node->mutex); + switch_thread_rwlock_wrlock(node->rwlock); node->start_waiting = 0; - switch_mutex_unlock(node->mutex); + switch_thread_rwlock_unlock(node->rwlock); } } @@ -2710,9 +2709,9 @@ SWITCH_STANDARD_APP(fifo_function) const char *arg = switch_channel_get_variable(other_channel, "current_application_data"); switch_caller_extension_t *extension = NULL; - switch_mutex_lock(node->mutex); + switch_thread_rwlock_wrlock(node->rwlock); node->caller_count--; - switch_mutex_unlock(node->mutex); + switch_thread_rwlock_unlock(node->rwlock); send_presence(node); check_cancel(node); @@ -2786,6 +2785,8 @@ SWITCH_STANDARD_APP(fifo_function) sql = switch_mprintf("update fifo_outbound set stop_time=0,start_time=%ld,use_count=use_count+1,outbound_fail_count=0 where uuid='%s'", switch_epoch_time_now(NULL), outbound_id); + + fifo_execute_sql(sql, globals.sql_mutex); switch_safe_free(sql); } @@ -2817,7 +2818,7 @@ SWITCH_STANDARD_APP(fifo_function) sql = switch_mprintf("update fifo_outbound set stop_time=%ld, use_count=use_count-1, " "outbound_call_total_count=outbound_call_total_count+1, " - "outbound_call_count=outbound_call_count+1, next_avail=%ld + lag where uuid='%s' and use_count > 0", + "outbound_call_count=outbound_call_count+1, next_avail=%ld + lag + 1 where uuid='%s' and use_count > 0", now, now, outbound_id); fifo_execute_sql(sql, globals.sql_mutex); @@ -2876,9 +2877,9 @@ SWITCH_STANDARD_APP(fifo_function) switch_channel_set_variable(other_channel, "fifo_status", "DONE"); switch_channel_set_variable(other_channel, "fifo_timestamp", date); - switch_mutex_lock(node->mutex); + switch_thread_rwlock_wrlock(node->rwlock); node->caller_count--; - switch_mutex_unlock(node->mutex); + switch_thread_rwlock_unlock(node->rwlock); send_presence(node); check_cancel(node); switch_core_session_rwunlock(other_session); @@ -3523,9 +3524,9 @@ SWITCH_STANDARD_API(fifo_api_function) switch_hash_this(hi, &var, NULL, &val); node = (fifo_node_t *) val; len = node_consumer_wait_count(node); - switch_mutex_lock(node->mutex); + switch_thread_rwlock_wrlock(node->rwlock); stream->write_function(stream, "%s:%d:%d:%d\n", (char *) var, node->consumer_count, node->caller_count, len); - switch_mutex_unlock(node->mutex); + switch_thread_rwlock_unlock(node->rwlock); x++; } @@ -3534,9 +3535,9 @@ SWITCH_STANDARD_API(fifo_api_function) } } else if ((node = switch_core_hash_find(globals.fifo_hash, argv[1]))) { len = node_consumer_wait_count(node); - switch_mutex_lock(node->mutex); + switch_thread_rwlock_wrlock(node->rwlock); stream->write_function(stream, "%s:%d:%d:%d\n", argv[1], node->consumer_count, node->caller_count, len); - switch_mutex_unlock(node->mutex); + switch_thread_rwlock_unlock(node->rwlock); } else { stream->write_function(stream, "none\n"); } @@ -3546,9 +3547,9 @@ SWITCH_STANDARD_API(fifo_api_function) switch_hash_this(hi, &var, NULL, &val); node = (fifo_node_t *) val; len = node_consumer_wait_count(node); - switch_mutex_lock(node->mutex); + switch_thread_rwlock_wrlock(node->rwlock); stream->write_function(stream, "%s:%d\n", (char *) var, node->has_outbound); - switch_mutex_unlock(node->mutex); + switch_thread_rwlock_unlock(node->rwlock); x++; } @@ -3557,9 +3558,9 @@ SWITCH_STANDARD_API(fifo_api_function) } } else if ((node = switch_core_hash_find(globals.fifo_hash, argv[1]))) { len = node_consumer_wait_count(node); - switch_mutex_lock(node->mutex); + switch_thread_rwlock_wrlock(node->rwlock); stream->write_function(stream, "%s:%d\n", argv[1], node->has_outbound); - switch_mutex_unlock(node->mutex); + switch_thread_rwlock_unlock(node->rwlock); } else { stream->write_function(stream, "none\n"); } From 84d897cb05079a4bfb3ed4ff98df0b5f666e0f70 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 22 Jul 2010 01:23:06 -0500 Subject: [PATCH 024/161] fifo up --- src/mod/applications/mod_fifo/mod_fifo.c | 66 +++++++++++++++++------- 1 file changed, 48 insertions(+), 18 deletions(-) diff --git a/src/mod/applications/mod_fifo/mod_fifo.c b/src/mod/applications/mod_fifo/mod_fifo.c index d4e572030a..9af039e864 100644 --- a/src/mod/applications/mod_fifo/mod_fifo.c +++ b/src/mod/applications/mod_fifo/mod_fifo.c @@ -127,7 +127,6 @@ static switch_status_t fifo_queue_push(fifo_queue_t *queue, switch_event_t *ptr) queue->data[queue->idx++] = ptr; - switch_mutex_unlock(queue->mutex); return SWITCH_STATUS_SUCCESS; @@ -144,7 +143,7 @@ static int fifo_queue_size(fifo_queue_t *queue) return s; } -static switch_status_t fifo_queue_pop(fifo_queue_t *queue, switch_event_t **pop, switch_bool_t remove) +static switch_status_t fifo_queue_pop(fifo_queue_t *queue, switch_event_t **pop, int remove) { int i, j; @@ -157,7 +156,7 @@ static switch_status_t fifo_queue_pop(fifo_queue_t *queue, switch_event_t **pop, for (j = 0; j < queue->idx; j++) { const char *uuid = switch_event_get_header(queue->data[j], "unique-id"); - if (uuid && !check_caller_outbound_call(uuid)) { + if (uuid && (remove == 2 || !check_caller_outbound_call(uuid))) { if (remove) { *pop = queue->data[j]; } else { @@ -189,7 +188,7 @@ static switch_status_t fifo_queue_pop(fifo_queue_t *queue, switch_event_t **pop, } -static switch_status_t fifo_queue_pop_nameval(fifo_queue_t *queue, const char *name, const char *val, switch_event_t **pop, switch_bool_t remove) +static switch_status_t fifo_queue_pop_nameval(fifo_queue_t *queue, const char *name, const char *val, switch_event_t **pop, int remove) { int i, j, force = 0; @@ -200,6 +199,10 @@ static switch_status_t fifo_queue_pop_nameval(fifo_queue_t *queue, const char *n force = 1; } + if (remove == 2) { + force = 1; + } + if (queue->idx == 0 || zstr(name) || zstr(val)) { switch_mutex_unlock(queue->mutex); return SWITCH_STATUS_FALSE; @@ -252,7 +255,10 @@ static switch_status_t fifo_queue_popfly(fifo_queue_t *queue, const char *uuid) for (j = 0; j < queue->idx; j++) { const char *j_uuid = switch_event_get_header(queue->data[j], "unique-id"); - if (j_uuid && !strcmp(j_uuid, uuid)) break; + if (j_uuid && !strcmp(j_uuid, uuid)) { + switch_event_destroy(&queue->data[j]); + break; + } } if (j == queue->idx) { @@ -556,6 +562,7 @@ static struct { char *odbc_pass; int node_thread_running; switch_odbc_handle_t *master_odbc; + int threads; } globals; @@ -1109,8 +1116,15 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void struct call_helper *rows[MAX_ROWS] = { 0 }; int rowcount = 0; + + if (!globals.running) return NULL; + switch_uuid_get(&uuid); switch_uuid_format(uuid_str, &uuid); + + switch_mutex_lock(globals.mutex); + globals.threads++; + switch_mutex_unlock(globals.mutex); if (!cbh->rowcount) { goto end; @@ -1415,6 +1429,10 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void switch_core_destroy_memory_pool(&cbh->pool); + switch_mutex_lock(globals.mutex); + globals.threads--; + switch_mutex_unlock(globals.mutex); + return NULL; } @@ -1434,7 +1452,14 @@ static void *SWITCH_THREAD_FUNC o_thread_run(switch_thread_t *thread, void *obj) switch_event_t *event = NULL; char *sql = NULL; int connected = 0; - + + if (!globals.running) return NULL; + + switch_mutex_lock(globals.mutex); + globals.threads++; + switch_mutex_unlock(globals.mutex); + + switch_mutex_lock(globals.mutex); node = switch_core_hash_find(globals.fifo_hash, h->node_name); switch_mutex_unlock(globals.mutex); @@ -1549,6 +1574,10 @@ static void *SWITCH_THREAD_FUNC o_thread_run(switch_thread_t *thread, void *obj) } switch_core_destroy_memory_pool(&h->pool); + switch_mutex_lock(globals.mutex); + globals.threads--; + switch_mutex_unlock(globals.mutex); + return NULL; } @@ -1639,7 +1668,7 @@ static void find_consumers(fifo_node_t *node) switch_thread_t *thread; switch_threadattr_t *thd_attr = NULL; struct callback_helper *cbh; - switch_memory_pool_t *pool; + switch_memory_pool_t *pool = NULL; switch_core_new_memory_pool(&pool); cbh = switch_core_alloc(pool, sizeof(*cbh)); @@ -2407,7 +2436,6 @@ SWITCH_STANDARD_APP(fifo_function) fifo_strategy_t strat = STRAT_WAITING_LONGER; const char *url = NULL; const char *caller_uuid = NULL; - switch_event_t *call_event; const char *outbound_id = switch_channel_get_variable(channel, "fifo_outbound_uuid"); //const char *track_use_count = switch_channel_get_variable(channel, "fifo_track_use_count"); //int do_track = switch_true(track_use_count); @@ -2613,12 +2641,10 @@ SWITCH_STANDARD_APP(fifo_function) continue; } - call_event = (switch_event_t *) pop; - pop = NULL; + url = switch_event_get_header(pop, "dial-url"); + caller_uuid = switch_core_session_strdup(session, switch_event_get_header(pop, "unique-id")); + switch_event_destroy(&pop); - url = switch_event_get_header(call_event, "dial-url"); - caller_uuid = switch_event_get_header(call_event, "unique-id"); - if (url) { switch_call_cause_t cause = SWITCH_CAUSE_NONE; const char *o_announce = NULL; @@ -2679,6 +2705,7 @@ SWITCH_STANDARD_APP(fifo_function) switch_channel_event_set_data(channel, event); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", argv[0]); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_pop"); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Caller-UUID", switch_core_session_get_uuid(other_session)); switch_event_fire(&event); } @@ -2883,9 +2910,7 @@ SWITCH_STANDARD_APP(fifo_function) send_presence(node); check_cancel(node); switch_core_session_rwunlock(other_session); - if (call_event) { - switch_event_destroy(&call_event); - } + if (!do_wait || !switch_channel_ready(channel)) { break; @@ -3895,7 +3920,7 @@ static switch_status_t load_config(int reload, int del_all) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "%s removed.\n", node->name); switch_thread_rwlock_wrlock(node->rwlock); for (x = 0; x < MAX_PRI; x++) { - while (fifo_queue_pop(node->fifo_list[x], &pop, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) { + while (fifo_queue_pop(node->fifo_list[x], &pop, 2) == SWITCH_STATUS_SUCCESS) { switch_event_destroy(&pop); } } @@ -4171,6 +4196,11 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_fifo_shutdown) if (globals.node_thread_running) { stop_node_thread(); } + + while(globals.threads) { + switch_cond_next(); + } + while ((hi = switch_hash_first(NULL, globals.fifo_hash))) { int x = 0; @@ -4180,7 +4210,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_fifo_shutdown) switch_thread_rwlock_wrlock(node->rwlock); switch_mutex_lock(node->mutex); for (x = 0; x < MAX_PRI; x++) { - while (fifo_queue_pop(node->fifo_list[x], &pop, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) { + while (fifo_queue_pop(node->fifo_list[x], &pop, 2) == SWITCH_STATUS_SUCCESS) { switch_event_destroy(&pop); } } From ffab09a03c04c465e39610f3efd54236844f5e1a Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Thu, 22 Jul 2010 10:31:12 -0500 Subject: [PATCH 025/161] fix windows build - uninited variable --- src/switch_core_state_machine.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/switch_core_state_machine.c b/src/switch_core_state_machine.c index a5467b6fa7..8f53ce2e83 100644 --- a/src/switch_core_state_machine.c +++ b/src/switch_core_state_machine.c @@ -494,7 +494,7 @@ SWITCH_DECLARE(void) switch_core_session_hangup_state(switch_core_session_t *ses const switch_state_handler_table_t *driver_state_handler = NULL; const switch_state_handler_table_t *application_state_handler = NULL; const char *hook_var; - int use_session; + int use_session = 0; if (!force) { if (!switch_channel_test_flag(session->channel, CF_EARLY_HANGUP) && !switch_test_flag((&runtime), SCF_EARLY_HANGUP)) { @@ -560,7 +560,7 @@ SWITCH_DECLARE(void) switch_core_session_reporting_state(switch_core_session_t * int index = 0; const char *var = switch_channel_get_variable(session->channel, SWITCH_PROCESS_CDR_VARIABLE); const char *hook_var; - int use_session; + int use_session = 0; switch_event_t *event; switch_call_cause_t cause = switch_channel_get_cause(session->channel); From 91a87e9dd9e5c0c687a0624edb2b4f9014c2acdf Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 22 Jul 2010 10:49:47 -0500 Subject: [PATCH 026/161] only let force_transfer_* vars work when an explicit value was not supplied --- src/switch_ivr.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/switch_ivr.c b/src/switch_ivr.c index f19113dfbd..61deece636 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -1353,6 +1353,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_ const char *max_forwards; const char *forwardvar = switch_channel_get_variable(channel, SWITCH_MAX_FORWARDS_VARIABLE); int forwardval = 70; + const char *use_dialplan = dialplan, *use_context = context; if (!zstr(forwardvar)) { forwardval = atoi(forwardvar) - 1; @@ -1374,41 +1375,41 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_ if ((profile = switch_channel_get_caller_profile(channel))) { const char *var; - if (zstr(dialplan)) { - dialplan = profile->dialplan; - if (!zstr(dialplan) && !strcasecmp(dialplan, "inline")) { - dialplan = NULL; + if (zstr(use_dialplan)) { + use_dialplan = profile->dialplan; + if (!zstr(use_dialplan) && !strcasecmp(use_dialplan, "inline")) { + use_dialplan = NULL; } } - if (zstr(context)) { - context = profile->context; + if (zstr(use_context)) { + use_context = profile->context; } - if (zstr(dialplan)) { - dialplan = "XML"; + if (zstr(use_dialplan)) { + use_dialplan = "XML"; } - if (zstr(context)) { - context = "default"; + if (zstr(use_context)) { + use_context = "default"; } if (zstr(extension)) { extension = "service"; } - if ((var = switch_channel_get_variable(channel, "force_transfer_dialplan"))) { - dialplan = var; + if (zstr(dialplan) && (var = switch_channel_get_variable(channel, "force_transfer_dialplan"))) { + use_dialplan = var; } - if ((var = switch_channel_get_variable(channel, "force_transfer_context"))) { - context = var; + if (zstr(context) && (var = switch_channel_get_variable(channel, "force_transfer_context"))) { + use_context = var; } new_profile = switch_caller_profile_clone(session, profile); - new_profile->dialplan = switch_core_strdup(new_profile->pool, dialplan); - new_profile->context = switch_core_strdup(new_profile->pool, context); + new_profile->dialplan = switch_core_strdup(new_profile->pool, use_dialplan); + new_profile->context = switch_core_strdup(new_profile->pool, use_context); new_profile->destination_number = switch_core_strdup(new_profile->pool, extension); new_profile->rdnis = switch_core_strdup(new_profile->pool, profile->destination_number); @@ -1472,8 +1473,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_ msg.from = __FILE__; switch_core_session_receive_message(session, &msg); - switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_NOTICE, "Transfer %s to %s[%s@%s]\n", switch_channel_get_name(channel), dialplan, - extension, context); + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_NOTICE, "Transfer %s to %s[%s@%s]\n", switch_channel_get_name(channel), use_dialplan, + extension, use_context); return SWITCH_STATUS_SUCCESS; } From 2b1203115a1241234428deb268b243181d6e3fe4 Mon Sep 17 00:00:00 2001 From: Brian West Date: Thu, 22 Jul 2010 12:44:35 -0500 Subject: [PATCH 027/161] DP-19 --- src/switch_ivr_async.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c index 71c35005cd..6d7fbe5e67 100644 --- a/src/switch_ivr_async.c +++ b/src/switch_ivr_async.c @@ -153,6 +153,10 @@ SWITCH_DECLARE(void) switch_ivr_session_echo(switch_core_session_t *session, swi switch_core_session_write_video_frame(session, read_frame, SWITCH_IO_FLAG_NONE, 0); #endif + if (switch_channel_test_flag(channel, CF_BREAK)) { + switch_channel_clear_flag(channel, CF_BREAK); + break; + } } #ifdef SWITCH_VIDEO_IN_THREADS From d2a29d2c4c9a6c426360cd2d002b4ed04e914d79 Mon Sep 17 00:00:00 2001 From: Brian West Date: Thu, 22 Jul 2010 12:58:42 -0500 Subject: [PATCH 028/161] swigall --- .../languages/mod_managed/freeswitch_wrap.cxx | 62 ++++++++++++++++ src/mod/languages/mod_managed/managed/swig.cs | 73 +++++++++++++++++++ 2 files changed, 135 insertions(+) diff --git a/src/mod/languages/mod_managed/freeswitch_wrap.cxx b/src/mod/languages/mod_managed/freeswitch_wrap.cxx index 9b5d084b9f..df62c72038 100644 --- a/src/mod/languages/mod_managed/freeswitch_wrap.cxx +++ b/src/mod/languages/mod_managed/freeswitch_wrap.cxx @@ -1235,6 +1235,17 @@ SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_API_HANGUP_HOOK_VARIABLE_get() { } +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_API_REPORTING_HOOK_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *) "api_reporting_hook"; + + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE_get() { char * jresult ; char *result = 0 ; @@ -6981,6 +6992,24 @@ SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_get_loglevel(void * jarg1) } +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_soft_lock(void * jarg1, unsigned long jarg2) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (uint32_t)jarg2; + switch_core_session_soft_lock(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_soft_unlock(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_soft_unlock(arg1); +} + + SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_get_uuid() { char * jresult ; char *result = 0 ; @@ -9236,6 +9265,16 @@ SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_setrlimits() { } +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_time_ref() { + void * jresult ; + switch_time_t result; + + result = switch_time_ref(); + jresult = new switch_time_t((switch_time_t &)result); + return jresult; +} + + SWIGEXPORT void SWIGSTDCALL CSharp_switch_time_sync() { switch_time_sync(); } @@ -18859,6 +18898,29 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_switch_limit_interface_status_get(void * ja } +SWIGEXPORT void SWIGSTDCALL CSharp_switch_limit_interface_interval_reset_set(void * jarg1, void * jarg2) { + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_status_t (*arg2)(char const *,char const *) = (switch_status_t (*)(char const *,char const *)) 0 ; + + arg1 = (switch_limit_interface *)jarg1; + arg2 = (switch_status_t (*)(char const *,char const *))jarg2; + if (arg1) (arg1)->interval_reset = arg2; + +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_limit_interface_interval_reset_get(void * jarg1) { + void * jresult ; + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_status_t (*result)(char const *,char const *) = 0 ; + + arg1 = (switch_limit_interface *)jarg1; + result = (switch_status_t (*)(char const *,char const *)) ((arg1)->interval_reset); + jresult = (void *)result; + return jresult; +} + + SWIGEXPORT void SWIGSTDCALL CSharp_switch_limit_interface_rwlock_set(void * jarg1, void * jarg2) { switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; diff --git a/src/mod/languages/mod_managed/managed/swig.cs b/src/mod/languages/mod_managed/managed/swig.cs index 67bbe24d03..3faa01944d 100644 --- a/src/mod/languages/mod_managed/managed/swig.cs +++ b/src/mod/languages/mod_managed/managed/swig.cs @@ -1283,6 +1283,14 @@ public class freeswitch { return ret; } + public static void switch_core_session_soft_lock(SWIGTYPE_p_switch_core_session session, uint sec) { + freeswitchPINVOKE.switch_core_session_soft_lock(SWIGTYPE_p_switch_core_session.getCPtr(session), sec); + } + + public static void switch_core_session_soft_unlock(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_soft_unlock(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + public static string switch_core_get_uuid() { string ret = freeswitchPINVOKE.switch_core_get_uuid(); return ret; @@ -2097,6 +2105,11 @@ public class freeswitch { freeswitchPINVOKE.switch_core_setrlimits(); } + public static SWIGTYPE_p_switch_time_t switch_time_ref() { + SWIGTYPE_p_switch_time_t ret = new SWIGTYPE_p_switch_time_t(freeswitchPINVOKE.switch_time_ref(), true); + return ret; + } + public static void switch_time_sync() { freeswitchPINVOKE.switch_time_sync(); } @@ -4946,6 +4959,7 @@ public class freeswitch { public static readonly string SWITCH_SOFT_HOLDING_UUID_VARIABLE = freeswitchPINVOKE.SWITCH_SOFT_HOLDING_UUID_VARIABLE_get(); public static readonly string SWITCH_API_BRIDGE_END_VARIABLE = freeswitchPINVOKE.SWITCH_API_BRIDGE_END_VARIABLE_get(); public static readonly string SWITCH_API_HANGUP_HOOK_VARIABLE = freeswitchPINVOKE.SWITCH_API_HANGUP_HOOK_VARIABLE_get(); + public static readonly string SWITCH_API_REPORTING_HOOK_VARIABLE = freeswitchPINVOKE.SWITCH_API_REPORTING_HOOK_VARIABLE_get(); public static readonly string SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE = freeswitchPINVOKE.SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE_get(); public static readonly string SWITCH_PROCESS_CDR_VARIABLE = freeswitchPINVOKE.SWITCH_PROCESS_CDR_VARIABLE_get(); public static readonly string SWITCH_FORCE_PROCESS_CDR_VARIABLE = freeswitchPINVOKE.SWITCH_FORCE_PROCESS_CDR_VARIABLE_get(); @@ -5495,6 +5509,9 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_API_HANGUP_HOOK_VARIABLE_get")] public static extern string SWITCH_API_HANGUP_HOOK_VARIABLE_get(); + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_API_REPORTING_HOOK_VARIABLE_get")] + public static extern string SWITCH_API_REPORTING_HOOK_VARIABLE_get(); + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE_get")] public static extern string SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE_get(); @@ -6899,6 +6916,12 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_loglevel")] public static extern int switch_core_session_get_loglevel(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_soft_lock")] + public static extern void switch_core_session_soft_lock(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_soft_unlock")] + public static extern void switch_core_session_soft_unlock(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_get_uuid")] public static extern string switch_core_get_uuid(); @@ -7394,6 +7417,9 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_switch_core_setrlimits")] public static extern void switch_core_setrlimits(); + [DllImport("mod_managed", EntryPoint="CSharp_switch_time_ref")] + public static extern IntPtr switch_time_ref(); + [DllImport("mod_managed", EntryPoint="CSharp_switch_time_sync")] public static extern void switch_time_sync(); @@ -9719,6 +9745,12 @@ class freeswitchPINVOKE { [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_status_get")] public static extern IntPtr switch_limit_interface_status_get(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_interval_reset_set")] + public static extern void switch_limit_interface_interval_reset_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_interval_reset_get")] + public static extern IntPtr switch_limit_interface_interval_reset_get(HandleRef jarg1); + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_rwlock_set")] public static extern void switch_limit_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); @@ -13505,6 +13537,36 @@ 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; + + internal SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 1.3.35 + * + * 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_switch_core_session_p_switch_stream_handle__switch_status_t { private HandleRef swigCPtr; @@ -25835,6 +25897,17 @@ public class switch_limit_interface : IDisposable { } } + public SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t interval_reset { + set { + freeswitchPINVOKE.switch_limit_interface_interval_reset_set(swigCPtr, SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_limit_interface_interval_reset_get(swigCPtr); + SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t(cPtr, false); + return ret; + } + } + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { set { freeswitchPINVOKE.switch_limit_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); From db1289dfafcca0e7bb92748ce01c55a0be624ae1 Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Thu, 22 Jul 2010 21:04:18 +0200 Subject: [PATCH 029/161] Skinny: avoid crash with autocompletion when skinny is unloaded --- src/mod/endpoints/mod_skinny/mod_skinny.c | 2 ++ src/mod/endpoints/mod_skinny/skinny_api.c | 7 +++++++ src/mod/endpoints/mod_skinny/skinny_api.h | 1 + 3 files changed, 10 insertions(+) diff --git a/src/mod/endpoints/mod_skinny/mod_skinny.c b/src/mod/endpoints/mod_skinny/mod_skinny.c index 7062bd2e4c..d27d6dc2c3 100644 --- a/src/mod/endpoints/mod_skinny/mod_skinny.c +++ b/src/mod/endpoints/mod_skinny/mod_skinny.c @@ -2031,6 +2031,8 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skinny_shutdown) switch_mutex_t *mutex = globals.mutex; int sanity = 0; + skinny_api_unregister(); + /* release events */ switch_event_unbind(&globals.heartbeat_node); switch_event_unbind(&globals.call_state_node); diff --git a/src/mod/endpoints/mod_skinny/skinny_api.c b/src/mod/endpoints/mod_skinny/skinny_api.c index 25ec6da702..79ebcfe122 100644 --- a/src/mod/endpoints/mod_skinny/skinny_api.c +++ b/src/mod/endpoints/mod_skinny/skinny_api.c @@ -460,6 +460,13 @@ switch_status_t skinny_api_register(switch_loadable_module_interface_t **module_ return SWITCH_STATUS_SUCCESS; } +switch_status_t skinny_api_unregister() +{ + switch_console_set_complete("del skinny"); + + return SWITCH_STATUS_SUCCESS; +} + /* For Emacs: * Local Variables: * mode:c diff --git a/src/mod/endpoints/mod_skinny/skinny_api.h b/src/mod/endpoints/mod_skinny/skinny_api.h index fc405c2515..0508fd1834 100644 --- a/src/mod/endpoints/mod_skinny/skinny_api.h +++ b/src/mod/endpoints/mod_skinny/skinny_api.h @@ -34,6 +34,7 @@ #define _SKINNY_API_H switch_status_t skinny_api_register(switch_loadable_module_interface_t **module_interface); +switch_status_t skinny_api_unregister(); #endif /* _SKINNY_API_H */ From 09c1815c423874a41a7461a3c1b43dc4ec64a25c Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 22 Jul 2010 14:37:21 -0500 Subject: [PATCH 030/161] change channel app_flags to be realm specific and default old version to use __FILE__ as the realm name to avoid cross fire between apps using app flags --- src/include/switch_channel.h | 12 +++-- src/mod/applications/mod_fax/mod_fax.c | 14 +++--- src/mod/applications/mod_fifo/mod_fifo.c | 24 ++++++---- .../mod_spandsp/mod_spandsp_fax.c | 14 +++--- src/mod/endpoints/mod_sofia/sofia.c | 2 +- src/mod/endpoints/mod_sofia/sofia_glue.c | 2 +- src/switch_channel.c | 45 ++++++++++++++----- 7 files changed, 75 insertions(+), 38 deletions(-) diff --git a/src/include/switch_channel.h b/src/include/switch_channel.h index cffab0245f..247beae460 100644 --- a/src/include/switch_channel.h +++ b/src/include/switch_channel.h @@ -561,9 +561,15 @@ SWITCH_DECLARE(void) switch_channel_set_private_flag(switch_channel_t *channel, SWITCH_DECLARE(void) switch_channel_clear_private_flag(switch_channel_t *channel, uint32_t flags); SWITCH_DECLARE(int) switch_channel_test_private_flag(switch_channel_t *channel, uint32_t flags); -SWITCH_DECLARE(void) switch_channel_set_app_flag(switch_channel_t *channel, uint32_t flags); -SWITCH_DECLARE(void) switch_channel_clear_app_flag(switch_channel_t *channel, uint32_t flags); -SWITCH_DECLARE(int) switch_channel_test_app_flag(switch_channel_t *channel, uint32_t flags); +SWITCH_DECLARE(void) switch_channel_set_app_flag_key(const char *app, switch_channel_t *channel, uint32_t flags); +SWITCH_DECLARE(void) switch_channel_clear_app_flag_key(const char *app, switch_channel_t *channel, uint32_t flags); +SWITCH_DECLARE(int) switch_channel_test_app_flag_key(const char *app, switch_channel_t *channel, uint32_t flags); + +#define switch_channel_set_app_flag(_c, _f) switch_channel_set_app_flag_key(__FILE__, _c, _f) +#define switch_channel_clear_app_flag(_c, _f) switch_channel_clear_app_flag_key(__FILE__, _c, _f) +#define switch_channel_test_app_flag(_c, _f) switch_channel_test_app_flag_key(__FILE__, _c, _f) + + SWITCH_DECLARE(void) switch_channel_set_hangup_time(switch_channel_t *channel); SWITCH_DECLARE(switch_call_direction_t) switch_channel_direction(switch_channel_t *channel); SWITCH_DECLARE(switch_core_session_t *) switch_channel_get_session(switch_channel_t *channel); diff --git a/src/mod/applications/mod_fax/mod_fax.c b/src/mod/applications/mod_fax/mod_fax.c index a6ddfe5933..da1a98edf6 100644 --- a/src/mod/applications/mod_fax/mod_fax.c +++ b/src/mod/applications/mod_fax/mod_fax.c @@ -1122,7 +1122,7 @@ void process_fax(switch_core_session_t *session, const char *data, application_m switch (pvt->t38_mode) { case T38_MODE_REQUESTED: { - if (switch_channel_test_app_flag(channel, CF_APP_T38)) { + if (switch_channel_test_app_flag_key("T38", channel, CF_APP_T38)) { switch_core_session_message_t msg = { 0 }; pvt->t38_mode = T38_MODE_NEGOTIATED; spanfax_init(pvt, T38_MODE); @@ -1138,7 +1138,7 @@ void process_fax(switch_core_session_t *session, const char *data, application_m break; case T38_MODE_UNKNOWN: { - if (switch_channel_test_app_flag(channel, CF_APP_T38)) { + if (switch_channel_test_app_flag_key("T38", channel, CF_APP_T38)) { if (negotiate_t38(pvt) == T38_MODE_NEGOTIATED) { /* is is safe to call this again, it was already called above in AUDIO_MODE */ /* but this is the only way to set up the t38 stuff */ @@ -1458,7 +1458,7 @@ static switch_status_t t38_gateway_on_soft_execute(switch_core_session_t *sessio msg.string_arg = peer_uuid; switch_core_session_receive_message(session, &msg); - while (switch_channel_ready(channel) && switch_channel_up(other_channel) && !switch_channel_test_app_flag(channel, CF_APP_T38)) { + while (switch_channel_ready(channel) && switch_channel_up(other_channel) && !switch_channel_test_app_flag_key("T38", channel, CF_APP_T38)) { status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0); if (!SWITCH_READ_ACCEPTABLE(status) || pvt->done) { @@ -1479,7 +1479,7 @@ static switch_status_t t38_gateway_on_soft_execute(switch_core_session_t *sessio goto end_unlock; } - if (!switch_channel_test_app_flag(channel, CF_APP_T38)) { + if (!switch_channel_test_app_flag_key("T38", channel, CF_APP_T38)) { switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s Could not negotiate T38\n", switch_channel_get_name(channel)); goto end_unlock; @@ -1507,7 +1507,7 @@ static switch_status_t t38_gateway_on_soft_execute(switch_core_session_t *sessio /* wake up the audio side */ switch_channel_set_private(channel, "_t38_pvt", pvt); - switch_channel_set_app_flag(other_channel, CF_APP_T38); + switch_channel_set_app_flag_key("T38", other_channel, CF_APP_T38); while (switch_channel_ready(channel) && switch_channel_up(other_channel)) { @@ -1589,7 +1589,7 @@ static switch_status_t t38_gateway_on_consume_media(switch_core_session_t *sessi switch_event_fire(&event); } - while (switch_channel_ready(channel) && switch_channel_up(other_channel) && !switch_channel_test_app_flag(channel, CF_APP_T38)) { + while (switch_channel_ready(channel) && switch_channel_up(other_channel) && !switch_channel_test_app_flag_key("T38", channel, CF_APP_T38)) { status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0); if (!SWITCH_READ_ACCEPTABLE(status)) { @@ -1610,7 +1610,7 @@ static switch_status_t t38_gateway_on_consume_media(switch_core_session_t *sessi goto end_unlock; } - if (!switch_channel_test_app_flag(channel, CF_APP_T38)) { + if (!switch_channel_test_app_flag_key("T38", channel, CF_APP_T38)) { switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); goto end_unlock; } diff --git a/src/mod/applications/mod_fifo/mod_fifo.c b/src/mod/applications/mod_fifo/mod_fifo.c index 9af039e864..47d3cb9aa5 100644 --- a/src/mod/applications/mod_fifo/mod_fifo.c +++ b/src/mod/applications/mod_fifo/mod_fifo.c @@ -58,6 +58,10 @@ typedef struct { switch_mutex_t *mutex; } fifo_queue_t; +typedef enum { + FIFO_APP_BRIDGE_TAG = (1 << 0), + FIFO_APP_TRACKING = (1 << 1) +} fifo_app_flag_t; @@ -894,11 +898,11 @@ static switch_status_t messagehook (switch_core_session_t *session, switch_core_ switch_size_t retsize; const char *ced_name, *ced_number, *cid_name, *cid_number; - if (switch_channel_test_app_flag(consumer_channel, CF_APP_TAGGED)) { + if (switch_channel_test_app_flag(consumer_channel, FIFO_APP_BRIDGE_TAG)) { goto end; } - switch_channel_set_app_flag(consumer_channel, CF_APP_TAGGED); + switch_channel_set_app_flag(consumer_channel, FIFO_APP_BRIDGE_TAG); switch_channel_set_variable(consumer_channel, "fifo_bridged", "true"); switch_channel_set_variable(consumer_channel, "fifo_manual_bridge", "true"); @@ -1002,7 +1006,7 @@ static switch_status_t messagehook (switch_core_session_t *session, switch_core_ break; case SWITCH_MESSAGE_INDICATE_UNBRIDGE: { - if (switch_channel_test_app_flag(consumer_channel, CF_APP_TAGGED)) { + if (switch_channel_test_app_flag(consumer_channel, FIFO_APP_BRIDGE_TAG)) { char date[80] = ""; switch_time_exp_t tm; switch_time_t ts = switch_micro_time_now(); @@ -1010,7 +1014,7 @@ static switch_status_t messagehook (switch_core_session_t *session, switch_core_ long epoch_start = 0, epoch_end = 0; const char *epoch_start_a = NULL; - switch_channel_clear_app_flag(consumer_channel, CF_APP_TAGGED); + switch_channel_clear_app_flag(consumer_channel, FIFO_APP_BRIDGE_TAG); switch_channel_set_variable(consumer_channel, "fifo_bridged", NULL); ts = switch_micro_time_now(); @@ -1987,13 +1991,15 @@ SWITCH_STANDARD_APP(fifo_track_call_function) return; } - if (switch_true(switch_channel_get_variable(channel, "fifo_track_call"))) { + if (switch_channel_test_app_flag(channel, FIFO_APP_TRACKING)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "%s trying to double-track call!\n", switch_channel_get_name(channel)); return; } add_bridge_call(data); + switch_channel_set_app_flag(channel, FIFO_APP_TRACKING); + switch_channel_set_variable(channel, "fifo_outbound_uuid", data); switch_channel_set_variable(channel, "fifo_track_call", "true"); @@ -2297,7 +2303,7 @@ SWITCH_STANDARD_APP(fifo_function) switch_channel_set_variable(channel, "fifo_timestamp", date); switch_channel_set_variable(channel, "fifo_serviced_uuid", NULL); - switch_channel_set_app_flag(channel, CF_APP_TAGGED); + switch_channel_set_app_flag(channel, FIFO_APP_BRIDGE_TAG); if (chime_list) { char *list_dup = switch_core_session_strdup(session, chime_list); @@ -2370,7 +2376,7 @@ SWITCH_STANDARD_APP(fifo_function) } } - switch_channel_clear_app_flag(channel, CF_APP_TAGGED); + switch_channel_clear_app_flag(channel, FIFO_APP_BRIDGE_TAG); abort: @@ -2724,7 +2730,7 @@ SWITCH_STANDARD_APP(fifo_function) switch_channel_set_flag(other_channel, CF_BREAK); - while (switch_channel_ready(channel) && switch_channel_ready(other_channel) && switch_channel_test_app_flag(other_channel, CF_APP_TAGGED)) { + while (switch_channel_ready(channel) && switch_channel_ready(other_channel) && switch_channel_test_app_flag(other_channel, FIFO_APP_BRIDGE_TAG)) { status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0); if (!SWITCH_READ_ACCEPTABLE(status)) { break; @@ -3028,7 +3034,7 @@ SWITCH_STANDARD_APP(fifo_function) switch_mutex_unlock(globals.mutex); - switch_channel_clear_app_flag(channel, CF_APP_TAGGED); + switch_channel_clear_app_flag(channel, FIFO_APP_BRIDGE_TAG); switch_core_media_bug_resume(session); diff --git a/src/mod/applications/mod_spandsp/mod_spandsp_fax.c b/src/mod/applications/mod_spandsp/mod_spandsp_fax.c index b4b42d738d..7ff106aceb 100644 --- a/src/mod/applications/mod_spandsp/mod_spandsp_fax.c +++ b/src/mod/applications/mod_spandsp/mod_spandsp_fax.c @@ -1106,7 +1106,7 @@ void mod_spandsp_fax_process_fax(switch_core_session_t *session, const char *dat switch (pvt->t38_mode) { case T38_MODE_REQUESTED: { - if (switch_channel_test_app_flag(channel, CF_APP_T38)) { + if (switch_channel_test_app_flag_key("T38", channel, CF_APP_T38)) { switch_core_session_message_t msg = { 0 }; pvt->t38_mode = T38_MODE_NEGOTIATED; spanfax_init(pvt, T38_MODE); @@ -1122,7 +1122,7 @@ void mod_spandsp_fax_process_fax(switch_core_session_t *session, const char *dat break; case T38_MODE_UNKNOWN: { - if (switch_channel_test_app_flag(channel, CF_APP_T38)) { + if (switch_channel_test_app_flag_key("T38", channel, CF_APP_T38)) { if (negotiate_t38(pvt) == T38_MODE_NEGOTIATED) { /* is is safe to call this again, it was already called above in AUDIO_MODE */ /* but this is the only way to set up the t38 stuff */ @@ -1338,7 +1338,7 @@ static switch_status_t t38_gateway_on_soft_execute(switch_core_session_t *sessio msg.string_arg = peer_uuid; switch_core_session_receive_message(session, &msg); - while (switch_channel_ready(channel) && switch_channel_up(other_channel) && !switch_channel_test_app_flag(channel, CF_APP_T38)) { + while (switch_channel_ready(channel) && switch_channel_up(other_channel) && !switch_channel_test_app_flag_key("T38", channel, CF_APP_T38)) { status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0); if (!SWITCH_READ_ACCEPTABLE(status) || pvt->done) { @@ -1359,7 +1359,7 @@ static switch_status_t t38_gateway_on_soft_execute(switch_core_session_t *sessio goto end_unlock; } - if (!switch_channel_test_app_flag(channel, CF_APP_T38)) { + if (!switch_channel_test_app_flag_key("T38", channel, CF_APP_T38)) { switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s Could not negotiate T38\n", switch_channel_get_name(channel)); goto end_unlock; @@ -1387,7 +1387,7 @@ static switch_status_t t38_gateway_on_soft_execute(switch_core_session_t *sessio /* wake up the audio side */ switch_channel_set_private(channel, "_t38_pvt", pvt); - switch_channel_set_app_flag(other_channel, CF_APP_T38); + switch_channel_set_app_flag_key("T38", other_channel, CF_APP_T38); while (switch_channel_ready(channel) && switch_channel_up(other_channel)) { @@ -1469,7 +1469,7 @@ static switch_status_t t38_gateway_on_consume_media(switch_core_session_t *sessi switch_event_fire(&event); } - while (switch_channel_ready(channel) && switch_channel_up(other_channel) && !switch_channel_test_app_flag(channel, CF_APP_T38)) { + while (switch_channel_ready(channel) && switch_channel_up(other_channel) && !switch_channel_test_app_flag_key("T38", channel, CF_APP_T38)) { status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0); if (!SWITCH_READ_ACCEPTABLE(status)) { @@ -1490,7 +1490,7 @@ static switch_status_t t38_gateway_on_consume_media(switch_core_session_t *sessi goto end_unlock; } - if (!switch_channel_test_app_flag(channel, CF_APP_T38)) { + if (!switch_channel_test_app_flag_key("T38", channel, CF_APP_T38)) { switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); goto end_unlock; } diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 5be6335415..e4736690b7 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -4691,7 +4691,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status, match = sofia_glue_negotiate_sdp(session, r_sdp); } - if (match && switch_channel_test_app_flag(tech_pvt->channel, CF_APP_T38)) { + if (match && switch_channel_test_app_flag_key("T38", tech_pvt->channel, CF_APP_T38)) { goto done; } diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index b1681c85ca..d31ad9af8f 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -3446,7 +3446,7 @@ static switch_t38_options_t *tech_process_udptl(private_object_t *tech_pvt, sdp_ switch_channel_set_variable(tech_pvt->channel, "has_t38", "true"); switch_channel_set_private(tech_pvt->channel, "t38_options", t38_options); - switch_channel_set_app_flag(tech_pvt->channel, CF_APP_T38); + switch_channel_set_app_flag_key("T38", tech_pvt->channel, CF_APP_T38); return t38_options; } diff --git a/src/switch_channel.c b/src/switch_channel.c index e4c0c154f8..8a6e24bdd3 100644 --- a/src/switch_channel.c +++ b/src/switch_channel.c @@ -127,12 +127,12 @@ struct switch_channel { uint32_t caps[CC_FLAG_MAX]; uint8_t state_flags[CF_FLAG_MAX]; uint32_t private_flags; - uint32_t app_flags; switch_caller_profile_t *caller_profile; const switch_state_handler_table_t *state_handlers[SWITCH_MAX_STATE_HANDLERS]; int state_handler_index; switch_event_t *variables; switch_hash_t *private_hash; + switch_hash_t *app_flag_hash; switch_call_cause_t hangup_cause; int vi; int event_count; @@ -1285,30 +1285,55 @@ SWITCH_DECLARE(int) switch_channel_test_private_flag(switch_channel_t *channel, return (channel->private_flags & flags); } -SWITCH_DECLARE(void) switch_channel_set_app_flag(switch_channel_t *channel, uint32_t flags) +SWITCH_DECLARE(void) switch_channel_set_app_flag_key(const char *key, switch_channel_t *channel, uint32_t flags) { + uint32_t *flagp = NULL; + switch_assert(channel != NULL); switch_mutex_lock(channel->flag_mutex); - channel->app_flags |= flags; + + if (channel->app_flag_hash) { + flagp = switch_core_hash_find(channel->app_flag_hash, key); + } else { + switch_core_hash_init(&channel->app_flag_hash, switch_core_session_get_pool(channel->session)); + flagp = switch_core_session_alloc(channel->session, sizeof(uint32_t)); + switch_core_hash_insert(channel->app_flag_hash, key, flagp); + } + + if (flagp) *flagp |= flags; switch_mutex_unlock(channel->flag_mutex); } -SWITCH_DECLARE(void) switch_channel_clear_app_flag(switch_channel_t *channel, uint32_t flags) +SWITCH_DECLARE(void) switch_channel_clear_app_flag_key(const char *key, switch_channel_t *channel, uint32_t flags) { + uint32_t *flagp = NULL; + switch_assert(channel != NULL); switch_mutex_lock(channel->flag_mutex); - if (!flags) { - channel->app_flags = 0; - } else { - channel->app_flags &= ~flags; + if (channel->app_flag_hash && (flagp = switch_core_hash_find(channel->app_flag_hash, key))) { + if (!flags) { + *flagp = 0; + } else { + *flagp &= ~flags; + } } switch_mutex_unlock(channel->flag_mutex); } -SWITCH_DECLARE(int) switch_channel_test_app_flag(switch_channel_t *channel, uint32_t flags) +SWITCH_DECLARE(int) switch_channel_test_app_flag_key(const char *key, switch_channel_t *channel, uint32_t flags) { + int r = 0; + uint32_t *flagp = NULL; switch_assert(channel != NULL); - return (channel->app_flags & flags); + + switch_mutex_lock(channel->flag_mutex); + if (channel->app_flag_hash && (flagp = switch_core_hash_find(channel->app_flag_hash, key))) { + r = (*flagp & flags); + } + switch_mutex_unlock(channel->flag_mutex); + + + return r; } SWITCH_DECLARE(void) switch_channel_set_state_flag(switch_channel_t *channel, switch_channel_flag_t flag) From 70d215ef6df7012beac7dc7990aca46f8d1d2b7d Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 22 Jul 2010 15:50:02 -0500 Subject: [PATCH 031/161] add -R to reconnect --- libs/esl/fs_cli.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/libs/esl/fs_cli.c b/libs/esl/fs_cli.c index d56a06a7b7..91836b7aec 100644 --- a/libs/esl/fs_cli.c +++ b/libs/esl/fs_cli.c @@ -566,6 +566,8 @@ static int usage(char *name){ printf(" -x, --execute=command Execute Command and Exit\n"); printf(" -l, --loglevel=command Log Level\n"); printf(" -q, --quiet Disable logging\n"); + printf(" -r, --retry Retry connection on failure\n"); + printf(" -R, --reconnect Reconnect if disconnected\n"); printf(" -d, --debug=level Debug Level (0 - 7)\n\n"); return 1; } @@ -581,7 +583,7 @@ static void *msg_thread_run(esl_thread_t *me, void *obj) esl_status_t status = esl_recv_event_timed(handle, 10, 1, NULL); if (status == ESL_FAIL) { esl_log(ESL_LOG_WARNING, "Disconnected.\n"); - running = thread_running = 0; + running = -1; thread_running = 0; } else if (status == ESL_SUCCESS) { if (handle->last_event) { const char *type = esl_event_get_header(handle->last_event, "content-type"); @@ -613,7 +615,7 @@ static void *msg_thread_run(esl_thread_t *me, void *obj) } known++; } else if (!strcasecmp(type, "text/disconnect-notice")) { - running = thread_running = 0; + running = -1; thread_running = 0; known++; } else if (!strcasecmp(type, "text/event-plain")) { char *foo; @@ -718,7 +720,7 @@ static int process_command(esl_handle_t *handle, const char *cmd) snprintf(cmd_str, sizeof(cmd_str), "api %s\nconsole_execute: true\n\n", cmd); if (esl_send_recv(handle, cmd_str)) { printf("Socket interrupted, bye!\n"); - return 1; + return -1; } if (handle->last_sr_event) { if (handle->last_sr_event->body) { @@ -987,6 +989,8 @@ int main(int argc, char *argv[]) {"execute", 1, 0, 'x'}, {"loglevel", 1, 0, 'l'}, {"quiet", 0, 0, 'q'}, + {"retry", 0, 0, 'r'}, + {"reconnect", 0, 0, 'R'}, {0, 0, 0, 0} }; @@ -1004,7 +1008,7 @@ int main(int argc, char *argv[]) char argv_command[256] = ""; char argv_loglevel[128] = ""; int argv_quiet = 0; - int loops = 2; + int loops = 2, reconnect = 0; strncpy(internal_profile.host, "127.0.0.1", sizeof(internal_profile.host)); strncpy(internal_profile.pass, "ClueCon", sizeof(internal_profile.pass)); @@ -1026,7 +1030,7 @@ int main(int argc, char *argv[]) for(;;) { int option_index = 0; - opt = getopt_long(argc, argv, "H:U:P:S:u:p:d:x:l:qrh?", options, &option_index); + opt = getopt_long(argc, argv, "H:U:P:S:u:p:d:x:l:qrRh?", options, &option_index); if (opt == -1) break; switch (opt) { @@ -1073,6 +1077,9 @@ int main(int argc, char *argv[]) case 'r': loops += 120; break; + case 'R': + reconnect = 1; + break; case 'h': case '?': print_banner(stdout); @@ -1190,6 +1197,8 @@ int main(int argc, char *argv[]) snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s> ", profile->name); } + connect: + while (--loops > 0) { memset(&handle, 0, sizeof(handle)); if (esl_connect(&handle, profile->host, profile->port, profile->user, profile->pass)) { @@ -1314,8 +1323,9 @@ int main(int argc, char *argv[]) esl_log(ESL_LOG_INFO, "FS CLI Ready.\nenter /help for a list of commands.\n"); printf("%s\n", handle.last_sr_reply); - while (running) { - + while (running > 0) { + int r; + #ifdef HAVE_EDITLINE line = el_gets(el, &count); #else @@ -1341,8 +1351,8 @@ int main(int argc, char *argv[]) history(myhistory, &ev, H_ENTER, line); #endif - if (process_command(&handle, cmd)) { - running = 0; + if ((r = process_command(&handle, cmd))) { + running = r; } #ifdef HAVE_EDITLINE @@ -1357,6 +1367,13 @@ int main(int argc, char *argv[]) } + if (running < 0 && reconnect) { + running = 1; + loops = 120; + goto connect; + } + + #ifdef HAVE_EDITLINE done: history(myhistory, &ev, H_SAVE, hfile); From b40804a5e337437d7478f1526aee0dfa025e20ab Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Thu, 22 Jul 2010 23:28:26 +0200 Subject: [PATCH 032/161] Skinny: corrected early media This is part of MODSKINNY-8 --- src/mod/endpoints/mod_skinny/skinny_server.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/mod/endpoints/mod_skinny/skinny_server.c b/src/mod/endpoints/mod_skinny/skinny_server.c index 56decd0036..0210333825 100644 --- a/src/mod/endpoints/mod_skinny/skinny_server.c +++ b/src/mod/endpoints/mod_skinny/skinny_server.c @@ -1654,7 +1654,9 @@ switch_status_t skinny_handle_open_receive_channel_ack_message(listener_t *liste ); switch_set_flag_locked(tech_pvt, TFLAG_IO); - switch_channel_mark_answered(channel); + if (switch_channel_test_flag(channel, CF_OUTBOUND)) { + switch_channel_mark_answered(channel); + } if (switch_channel_test_flag(channel, CF_HOLD)) { switch_ivr_unhold(session); send_set_lamp(listener, SKINNY_BUTTON_LINE, line_instance, SKINNY_LAMP_ON); From 25fe16dfed4af27f9737c8d19bf1a8a5166990ef Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Thu, 22 Jul 2010 23:53:11 +0200 Subject: [PATCH 033/161] ivr_play: preanswer before getting variables to avoid crash --- src/switch_ivr_play_say.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/switch_ivr_play_say.c b/src/switch_ivr_play_say.c index 0e0322452c..bc1fbadd00 100644 --- a/src/switch_ivr_play_say.c +++ b/src/switch_ivr_play_say.c @@ -916,6 +916,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess int timeout_samples = 0; const char *var; + if (switch_channel_pre_answer(channel) != SWITCH_STATUS_SUCCESS) { + return SWITCH_STATUS_FALSE; + } + switch_core_session_get_read_impl(session, &read_impl); if ((var = switch_channel_get_variable(channel, "playback_timeout_sec"))) { @@ -936,10 +940,6 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess } } - if (switch_channel_pre_answer(channel) != SWITCH_STATUS_SUCCESS) { - return SWITCH_STATUS_FALSE; - } - prefix = switch_channel_get_variable(channel, "sound_prefix"); timer_name = switch_channel_get_variable(channel, "timer_name"); From 44450cb0131efa4c54c513b27049b1c1c52c24e0 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 23 Jul 2010 00:36:40 -0500 Subject: [PATCH 034/161] fix some small mem leaks --- src/mod/applications/mod_fifo/mod_fifo.c | 251 ++++++++++++++--------- src/mod/endpoints/mod_sofia/sofia_glue.c | 1 + src/switch_channel.c | 3 + src/switch_core_sqldb.c | 6 +- src/switch_odbc.c | 11 +- 5 files changed, 165 insertions(+), 107 deletions(-) diff --git a/src/mod/applications/mod_fifo/mod_fifo.c b/src/mod/applications/mod_fifo/mod_fifo.c index 47d3cb9aa5..d26ddf0a8e 100644 --- a/src/mod/applications/mod_fifo/mod_fifo.c +++ b/src/mod/applications/mod_fifo/mod_fifo.c @@ -291,6 +291,7 @@ struct fifo_node { switch_mutex_t *mutex; fifo_queue_t *fifo_list[MAX_PRI]; switch_hash_t *consumer_hash; + int outbound_priority; int caller_count; int consumer_count; int ring_consumer_count; @@ -567,6 +568,8 @@ static struct { int node_thread_running; switch_odbc_handle_t *master_odbc; int threads; + switch_thread_t *node_thread; + int debug; } globals; @@ -848,6 +851,85 @@ struct callback_helper { int ready; }; +static void do_unbridge(switch_core_session_t *consumer_session, switch_core_session_t *caller_session) +{ + switch_channel_t *consumer_channel = switch_core_session_get_channel(consumer_session); + switch_channel_t *caller_channel = NULL; + + if (caller_session) { + caller_channel = switch_core_session_get_channel(caller_session); + } + + if (switch_channel_test_app_flag(consumer_channel, FIFO_APP_BRIDGE_TAG)) { + char date[80] = ""; + switch_time_exp_t tm; + switch_time_t ts = switch_micro_time_now(); + switch_size_t retsize; + long epoch_start = 0, epoch_end = 0; + const char *epoch_start_a = NULL; + char *sql; + switch_event_t *event; + + switch_channel_clear_app_flag(consumer_channel, FIFO_APP_BRIDGE_TAG); + switch_channel_set_variable(consumer_channel, "fifo_bridged", NULL); + + ts = switch_micro_time_now(); + switch_time_exp_lt(&tm, ts); + switch_strftime_nocheck(date, &retsize, sizeof(date), "%Y-%m-%d %T", &tm); + + sql = switch_mprintf("delete from fifo_bridge where consumer_uuid='%q'", switch_core_session_get_uuid(consumer_session)); + fifo_execute_sql(sql, globals.sql_mutex); + switch_safe_free(sql); + + + + switch_channel_set_variable(consumer_channel, "fifo_status", "WAITING"); + switch_channel_set_variable(consumer_channel, "fifo_timestamp", date); + + if (caller_channel) { + switch_channel_set_variable(caller_channel, "fifo_status", "DONE"); + switch_channel_set_variable(caller_channel, "fifo_timestamp", date); + } + + if ((epoch_start_a = switch_channel_get_variable(consumer_channel, "fifo_epoch_start_bridge"))) { + epoch_start = atol(epoch_start_a); + } + + epoch_end = (long)switch_epoch_time_now(NULL); + + switch_channel_set_variable_printf(consumer_channel, "fifo_epoch_stop_bridge", "%ld", epoch_end); + switch_channel_set_variable_printf(consumer_channel, "fifo_bridge_seconds", "%d", epoch_end - epoch_start); + + if (caller_channel) { + switch_channel_set_variable_printf(caller_channel, "fifo_epoch_stop_bridge", "%ld", epoch_end); + switch_channel_set_variable_printf(caller_channel, "fifo_bridge_seconds", "%d", epoch_end - epoch_start); + } + + if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) { + switch_channel_event_set_data(consumer_channel, event); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-consumer-stop"); + switch_event_fire(&event); + } + + if (caller_channel) { + if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) { + switch_channel_event_set_data(caller_channel, event); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-caller-stop"); + switch_event_fire(&event); + } + } + + if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) { + switch_channel_event_set_data(consumer_channel, event); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_stop"); + switch_event_fire(&event); + } + } +} + static switch_status_t messagehook (switch_core_session_t *session, switch_core_session_message_t *msg) { @@ -1006,73 +1088,7 @@ static switch_status_t messagehook (switch_core_session_t *session, switch_core_ break; case SWITCH_MESSAGE_INDICATE_UNBRIDGE: { - if (switch_channel_test_app_flag(consumer_channel, FIFO_APP_BRIDGE_TAG)) { - char date[80] = ""; - switch_time_exp_t tm; - switch_time_t ts = switch_micro_time_now(); - switch_size_t retsize; - long epoch_start = 0, epoch_end = 0; - const char *epoch_start_a = NULL; - - switch_channel_clear_app_flag(consumer_channel, FIFO_APP_BRIDGE_TAG); - switch_channel_set_variable(consumer_channel, "fifo_bridged", NULL); - - ts = switch_micro_time_now(); - switch_time_exp_lt(&tm, ts); - switch_strftime_nocheck(date, &retsize, sizeof(date), "%Y-%m-%d %T", &tm); - - sql = switch_mprintf("delete from fifo_bridge where consumer_uuid='%q'", switch_core_session_get_uuid(consumer_session)); - fifo_execute_sql(sql, globals.sql_mutex); - switch_safe_free(sql); - - - - switch_channel_set_variable(consumer_channel, "fifo_status", "WAITING"); - switch_channel_set_variable(consumer_channel, "fifo_timestamp", date); - - if (caller_channel) { - switch_channel_set_variable(caller_channel, "fifo_status", "DONE"); - switch_channel_set_variable(caller_channel, "fifo_timestamp", date); - } - - if ((epoch_start_a = switch_channel_get_variable(consumer_channel, "fifo_epoch_start_bridge"))) { - epoch_start = atol(epoch_start_a); - } - - epoch_end = (long)switch_epoch_time_now(NULL); - - switch_channel_set_variable_printf(consumer_channel, "fifo_epoch_stop_bridge", "%ld", epoch_end); - switch_channel_set_variable_printf(consumer_channel, "fifo_bridge_seconds", "%d", epoch_end - epoch_start); - - if (caller_channel) { - switch_channel_set_variable_printf(caller_channel, "fifo_epoch_stop_bridge", "%ld", epoch_end); - switch_channel_set_variable_printf(caller_channel, "fifo_bridge_seconds", "%d", epoch_end - epoch_start); - } - - if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) { - switch_channel_event_set_data(consumer_channel, event); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-consumer-stop"); - switch_event_fire(&event); - } - - if (caller_channel) { - if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) { - switch_channel_event_set_data(caller_channel, event); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-caller-stop"); - switch_event_fire(&event); - } - } - - if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) { - switch_channel_event_set_data(consumer_channel, event); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "consumer_stop"); - switch_event_fire(&event); - } - } - + do_unbridge(consumer_session, caller_session); } break; default: @@ -1705,6 +1721,7 @@ static void find_consumers(fifo_node_t *node) static void *SWITCH_THREAD_FUNC node_thread_run(switch_thread_t *thread, void *obj) { fifo_node_t *node; + int cur_priority = 1; globals.node_thread_running = 1; @@ -1712,31 +1729,47 @@ static void *SWITCH_THREAD_FUNC node_thread_run(switch_thread_t *thread, void *o switch_hash_index_t *hi; void *val; const void *var; - int ppl_waiting, consumer_total, idle_consumers; - + int ppl_waiting, consumer_total, idle_consumers, found = 0; + switch_mutex_lock(globals.mutex); + + if (globals.debug) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Trying priority: %d\n", cur_priority); + } + for (hi = switch_hash_first(NULL, globals.fifo_hash); hi; hi = switch_hash_next(hi)) { switch_hash_this(hi, &var, NULL, &val); if ((node = (fifo_node_t *) val)) { - if (node->has_outbound && node->ready && !node->busy) { + if (node->has_outbound && node->ready && !node->busy && node->outbound_priority == cur_priority) { ppl_waiting = node_consumer_wait_count(node); consumer_total = node->consumer_count; idle_consumers = node_idle_consumers(node); - - //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG5, - //"%s waiting %d consumer_total %d idle_consumers %d ring_consumers %d\n", - //node->name, ppl_waiting, consumer_total, idle_consumers, node->ring_consumer_count); + if (globals.debug) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, + "%s waiting %d consumer_total %d idle_consumers %d ring_consumers %d pri %d\n", + node->name, ppl_waiting, consumer_total, idle_consumers, node->ring_consumer_count, node->outbound_priority); + } + + if ((ppl_waiting - node->ring_consumer_count > 0) && (!consumer_total || !idle_consumers)) { + found++; find_consumers(node); switch_yield(1000000); } } } } - switch_mutex_unlock(globals.mutex); - switch_yield(1000000); + if (++cur_priority > 10) { + cur_priority = 1; + } + + switch_mutex_unlock(globals.mutex); + + if (cur_priority == 1) { + switch_yield(1000000); + } } globals.node_thread_running = 0; @@ -1746,28 +1779,20 @@ static void *SWITCH_THREAD_FUNC node_thread_run(switch_thread_t *thread, void *o static void start_node_thread(switch_memory_pool_t *pool) { - switch_thread_t *thread; switch_threadattr_t *thd_attr = NULL; switch_threadattr_create(&thd_attr, pool); - switch_threadattr_detach_set(thd_attr, 1); + //switch_threadattr_detach_set(thd_attr, 1); switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); - switch_thread_create(&thread, thd_attr, node_thread_run, pool, pool); + switch_thread_create(&globals.node_thread, thd_attr, node_thread_run, pool, pool); } static int stop_node_thread(void) { - int sanity = 20; + switch_status_t st = SWITCH_STATUS_SUCCESS; - if (globals.node_thread_running) { - globals.node_thread_running = -1; - while (globals.node_thread_running) { - switch_yield(500000); - if (!--sanity) { - return -1; - } - } - } + globals.node_thread_running = -1; + switch_thread_join(&st, globals.node_thread); return 0; } @@ -1940,14 +1965,19 @@ SWITCH_STANDARD_API(fifo_add_outbound_function) } -static void dec_use_count(switch_channel_t *channel) +static void dec_use_count(switch_core_session_t *session) { char *sql; const char *outbound_id; switch_event_t *event; long now = (long) switch_epoch_time_now(NULL); + switch_channel_t *channel = switch_core_session_get_channel(session); + + do_unbridge(session, NULL); if ((outbound_id = switch_channel_get_variable(channel, "fifo_outbound_uuid"))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s untracking call on uuid %s!\n", switch_channel_get_name(channel), outbound_id); + del_bridge_call(outbound_id); sql = switch_mprintf("update fifo_outbound set use_count=use_count-1, stop_time=%ld, next_avail=%ld + lag + 1 where use_count > 0 and uuid='%q'", now, now, outbound_id); @@ -1962,8 +1992,6 @@ static void dec_use_count(switch_channel_t *channel) switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-consumer-stop"); switch_event_fire(&event); } - - } static switch_status_t hanguphook(switch_core_session_t *session) @@ -1972,7 +2000,7 @@ static switch_status_t hanguphook(switch_core_session_t *session) switch_channel_state_t state = switch_channel_get_state(channel); if (state == CS_HANGUP) { - dec_use_count(channel); + dec_use_count(session); switch_core_event_hook_remove_state_change(session, hanguphook); } @@ -1996,6 +2024,9 @@ SWITCH_STANDARD_APP(fifo_track_call_function) return; } + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s tracking call on uuid %s!\n", switch_channel_get_name(channel), data); + add_bridge_call(data); switch_channel_set_app_flag(channel, FIFO_APP_TRACKING); @@ -2105,7 +2136,7 @@ SWITCH_STANDARD_APP(fifo_function) const char *serviced_uuid = NULL; if (switch_core_event_hook_remove_receive_message(session, messagehook) == SWITCH_STATUS_SUCCESS) { - dec_use_count(channel); + dec_use_count(session); switch_core_event_hook_remove_state_change(session, hanguphook); } @@ -3464,6 +3495,9 @@ static void list_node(fifo_node_t *node, switch_xml_t x_report, int *off, int ve switch_snprintf(tmp, sizeof(buffer), "%u", node->outbound_per_cycle); switch_xml_set_attr_d(x_fifo, "outbound_per_cycle", tmp); + switch_snprintf(tmp, sizeof(buffer), "%u", node->outbound_priority); + switch_xml_set_attr_d(x_fifo, "outbound_priority", tmp); + switch_xml_set_attr_d(x_fifo, "outbound_strategy", strat_parse(node->outbound_strategy)); cc_off = xml_outbound(x_fifo, node, "outbound", "member", cc_off, verbose); @@ -3496,12 +3530,20 @@ SWITCH_STANDARD_API(fifo_api_function) switch_assert(data); } - if (zstr(cmd) || (argc = switch_separate_string(data, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) < 1 || !argv[0]) { - stream->write_function(stream, "%s\n", FIFO_API_SYNTAX); - return SWITCH_STATUS_SUCCESS; - } switch_mutex_lock(globals.mutex); + + if (zstr(cmd) || (argc = switch_separate_string(data, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) < 1 || !argv[0]) { + stream->write_function(stream, "%s\n", FIFO_API_SYNTAX); + goto done; + } + + if (!strcasecmp(argv[0], "debug")) { + globals.debug = !globals.debug; + stream->write_function(stream, "debug %s\n", globals.debug ? "on" : "off"); + goto done; + } + verbose = !strcasecmp(argv[0], "list_verbose"); if (!strcasecmp(argv[0], "reparse")) { @@ -3601,6 +3643,8 @@ SWITCH_STANDARD_API(fifo_api_function) done: + switch_safe_free(data); + switch_mutex_unlock(globals.mutex); return SWITCH_STATUS_SUCCESS; } @@ -3780,7 +3824,7 @@ static switch_status_t load_config(int reload, int del_all) for (fifo = switch_xml_child(fifos, "fifo"); fifo; fifo = fifo->next) { const char *name, *outbound_strategy; const char *val; - int imp = 0, outbound_per_cycle = 1; + int imp = 0, outbound_per_cycle = 1, outbound_priority = 5; int simo_i = 1; int taking_calls_i = 1; int timeout_i = 60; @@ -3812,6 +3856,14 @@ static switch_status_t load_config(int reload, int del_all) outbound_per_cycle = 0; } } + + if ((val = switch_xml_attr(fifo, "outbound_priority"))) { + outbound_priority = atoi(val); + + if (outbound_priority < 1 || outbound_priority > 10) { + outbound_priority = 5; + } + } switch_mutex_lock(globals.mutex); if (!(node = switch_core_hash_find(globals.fifo_hash, name))) { @@ -3829,6 +3881,7 @@ static switch_status_t load_config(int reload, int del_all) switch_mutex_lock(node->mutex); node->outbound_per_cycle = outbound_per_cycle; + node->outbound_priority = outbound_priority; if (outbound_strategy) { diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index d31ad9af8f..e0e67ba40b 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -4920,6 +4920,7 @@ int sofia_glue_init_sql(sofia_profile_t *profile) switch_odbc_handle_exec(odbc_dbh, dialog_sql, NULL, NULL); } + free(test_sql); test_sql = switch_mprintf("delete from sip_presence where hostname='%q' ", mod_sofia_globals.hostname); if (switch_odbc_handle_exec(odbc_dbh, test_sql, NULL, NULL) != SWITCH_ODBC_SUCCESS) { diff --git a/src/switch_channel.c b/src/switch_channel.c index 8a6e24bdd3..254c82f4d4 100644 --- a/src/switch_channel.c +++ b/src/switch_channel.c @@ -536,6 +536,9 @@ SWITCH_DECLARE(void) switch_channel_uninit(switch_channel_t *channel) switch_safe_free(pop); } switch_core_hash_destroy(&channel->private_hash); + if (channel->app_flag_hash) { + switch_core_hash_destroy(&channel->app_flag_hash); + } switch_mutex_lock(channel->profile_mutex); switch_event_destroy(&channel->variables); switch_mutex_unlock(channel->profile_mutex); diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c index 810de2ddda..0ea4150b15 100644 --- a/src/switch_core_sqldb.c +++ b/src/switch_core_sqldb.c @@ -425,11 +425,7 @@ static switch_status_t switch_cache_db_execute_sql_real(switch_cache_db_handle_t switch (dbh->type) { case SCDB_TYPE_ODBC: { - switch_odbc_statement_handle_t stmt = NULL; - if ((status = switch_odbc_handle_exec(dbh->native_handle.odbc_dbh, sql, &stmt, NULL)) != SWITCH_STATUS_SUCCESS) { - errmsg = switch_odbc_handle_get_error(dbh->native_handle.odbc_dbh, stmt); - } - switch_odbc_statement_handle_free(&stmt); + status = switch_odbc_handle_exec(dbh->native_handle.odbc_dbh, sql, NULL, &errmsg); } break; case SCDB_TYPE_CORE_DB: diff --git a/src/switch_odbc.c b/src/switch_odbc.c index 92a551ff1e..c853e14c4c 100644 --- a/src/switch_odbc.c +++ b/src/switch_odbc.c @@ -160,6 +160,11 @@ static int db_is_up(switch_odbc_handle_t *handle) strcpy((char *) sql, "select 1"); } + if (stmt) { + SQLFreeHandle(SQL_HANDLE_STMT, stmt); + stmt = NULL; + } + if (SQLAllocHandle(SQL_HANDLE_STMT, handle->con, &stmt) != SQL_SUCCESS) { code = __LINE__; goto error; @@ -370,12 +375,12 @@ SWITCH_DECLARE(switch_odbc_status_t) switch_odbc_handle_exec_string(switch_odbc_ SQLGetData(stmt, 1, SQL_C_CHAR, (SQLCHAR *) resbuf, (SQLLEN) len, NULL); sstatus = SWITCH_ODBC_SUCCESS; - } else { - return sstatus; } - done: + done: + switch_odbc_statement_handle_free(&stmt); + return sstatus; #else return SWITCH_ODBC_FAIL; From 30e3ed776bf80ebea5ef7491af5ac3c99ae5b868 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 23 Jul 2010 12:25:48 +0400 Subject: [PATCH 035/161] apply changes from mod_h323-patch.diff by Peter Olsson. --- src/mod/endpoints/mod_h323/Makefile | 2 +- src/mod/endpoints/mod_h323/changes.txt | 1 + src/mod/endpoints/mod_h323/h323.conf.xml | 4 +- src/mod/endpoints/mod_h323/mod_h323.cpp | 1552 +++++++++++++--------- src/mod/endpoints/mod_h323/mod_h323.h | 223 ++-- 5 files changed, 1042 insertions(+), 740 deletions(-) diff --git a/src/mod/endpoints/mod_h323/Makefile b/src/mod/endpoints/mod_h323/Makefile index 8cb68189bb..8287b34cad 100644 --- a/src/mod/endpoints/mod_h323/Makefile +++ b/src/mod/endpoints/mod_h323/Makefile @@ -1,5 +1,5 @@ BASE=../../../.. -LOCAL_CFLAGS+=-g -ggdb -I/usr/include/ptlib -I/usr/include/openh323 -I. -DPTRACING=1 -D_REENTRANT -fno-exceptions +LOCAL_CFLAGS+=-g -ggdb -I/usr/local/include/ptlib -I/usr/local/include/openh323 -I. -DPTRACING=1 -D_REENTRANT -fno-exceptions LOCAL_LDFLAGS= -lopenh323 -lpt -lrt include $(BASE)/build/modmake.rules diff --git a/src/mod/endpoints/mod_h323/changes.txt b/src/mod/endpoints/mod_h323/changes.txt index 0db6dfac07..5bc4c1a03e 100644 --- a/src/mod/endpoints/mod_h323/changes.txt +++ b/src/mod/endpoints/mod_h323/changes.txt @@ -1,3 +1,4 @@ +apply changes from mod_h323-patch.diff by Peter Olsson. some t.38 and lockinng improvements. replace ptrace with switch_log_printf. initial t.38 support. diff --git a/src/mod/endpoints/mod_h323/h323.conf.xml b/src/mod/endpoints/mod_h323/h323.conf.xml index a176855ef6..df2056767c 100644 --- a/src/mod/endpoints/mod_h323/h323.conf.xml +++ b/src/mod/endpoints/mod_h323/h323.conf.xml @@ -4,6 +4,9 @@ + + + @@ -15,7 +18,6 @@ - diff --git a/src/mod/endpoints/mod_h323/mod_h323.cpp b/src/mod/endpoints/mod_h323/mod_h323.cpp index 4c194a9cf8..cfd84e93f2 100644 --- a/src/mod/endpoints/mod_h323/mod_h323.cpp +++ b/src/mod/endpoints/mod_h323/mod_h323.cpp @@ -1,19 +1,40 @@ -/* - Version 0.0.50 +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2005-2010, Anthony Minessale II + * + * Version: MPL 1.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * + * The Initial Developer of the Original Code is + * Anthony Minessale II + * Portions created by the Initial Developer are Copyright (C) + * the Initial Developer. All Rights Reserved. + * + * + * mod_h323.cpp -- H323 endpoint + * + * Version 0.0.55 */ #include "mod_h323.h" - SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_codec_string, mod_h323_globals.codec_string); SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_context, mod_h323_globals.context); SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_dialplan, mod_h323_globals.dialplan); +SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_rtp_timer_name, mod_h323_globals.rtp_timer_name); -SWITCH_MODULE_LOAD_FUNCTION(mod_h323_load); -SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_h323_shutdown); -SWITCH_MODULE_DEFINITION(mod_h323, mod_h323_load, mod_h323_shutdown, NULL); - #define CF_NEED_FLUSH (1 << 1) struct mod_h323_globals mod_h323_globals = { 0 }; @@ -24,19 +45,19 @@ static switch_call_cause_t create_outgoing_channel(switch_core_session_t *sessio static const char modulename[] = "h323"; static const char* h323_formats[] = { - "G.711-ALaw-64k", "PCMA", - "G.711-uLaw-64k", "PCMU", - "GSM-06.10", "GSM", - "G.723", "G723", - "G.729B", "G729b", - "G.729", "G729", - "G.729A", "G729a", - "G.729A/B", "G729ab", - "G.723.1", "G723.1", - "G.723.1(5.3k)", "G723.1-5k3", - "G.723.1A(5.3k)", "G723.1a-5k3", - "G.723.1A(6.3k)", "G723.1a-6k3", - 0 + "G.711-ALaw-64k", "PCMA", + "G.711-uLaw-64k", "PCMU", + "GSM-06.10", "GSM", + "G.723", "G723", + "G.729B", "G729b", + "G.729", "G729", + "G.729A", "G729a", + "G.729A/B", "G729ab", + "G.723.1", "G723.1", + "G.723.1(5.3k)", "G723.1-5k3", + "G.723.1A(5.3k)", "G723.1a-5k3", + "G.723.1A(6.3k)", "G723.1a-6k3", + 0 }; static char encodingName_COR[7] = "t38"; @@ -84,72 +105,92 @@ static switch_status_t on_hangup(switch_core_session_t *session); static switch_status_t on_destroy(switch_core_session_t *session); static switch_io_routines_t h323fs_io_routines = { - /*.outgoing_channel */ create_outgoing_channel, - /*.read_frame */ FSH323Connection::read_audio_frame, - /*.write_frame */ FSH323Connection::write_audio_frame, - /*.kill_channel */ FSH323Connection::kill_channel, - /*.send_dtmf */ FSH323Connection::send_dtmf, - /*.receive_message */ FSH323Connection::receive_message, - /*.receive_event */ FSH323Connection::receive_event, - /*.state_change */ FSH323Connection::state_change, - /*.read_video_frame */ FSH323Connection::read_video_frame, - /*.write_video_frame */ FSH323Connection::write_video_frame + /*.outgoing_channel */ create_outgoing_channel, + /*.read_frame */ FSH323Connection::read_audio_frame, + /*.write_frame */ FSH323Connection::write_audio_frame, + /*.kill_channel */ FSH323Connection::kill_channel, + /*.send_dtmf */ FSH323Connection::send_dtmf, + /*.receive_message */ FSH323Connection::receive_message, + /*.receive_event */ FSH323Connection::receive_event, + /*.state_change */ FSH323Connection::state_change, + /*.read_video_frame */ FSH323Connection::read_video_frame, + /*.write_video_frame */ FSH323Connection::write_video_frame }; static switch_state_handler_table_t h323fs_event_handlers = { - /*.on_init */ FSH323Connection::on_init, - /*.on_routing */ FSH323Connection::on_routing, - /*.on_execute */ FSH323Connection::on_execute, - /*.on_hangup */ on_hangup, - /*.on_exchange_media */ FSH323Connection::on_exchange_media, - /*.on_soft_execute */ FSH323Connection::on_soft_execute, - /*.on_consume_media*/ NULL, - /*.on_hibernate*/ NULL, - /*.on_reset*/ NULL, - /*.on_park*/ NULL, - /*.on_reporting*/ NULL, - /*.on_destroy*/ on_destroy + /*.on_init */ FSH323Connection::on_init, + /*.on_routing */ FSH323Connection::on_routing, + /*.on_execute */ FSH323Connection::on_execute, + /*.on_hangup */ on_hangup, + /*.on_exchange_media */ FSH323Connection::on_exchange_media, + /*.on_soft_execute */ FSH323Connection::on_soft_execute, + /*.on_consume_media*/ NULL, + /*.on_hibernate*/ NULL, + /*.on_reset*/ NULL, + /*.on_park*/ NULL, + /*.on_reporting*/ NULL, + /*.on_destroy*/ on_destroy }; -//static FSProcess *h323_process = NULL; -SWITCH_MODULE_LOAD_FUNCTION(mod_h323_load){ +SWITCH_BEGIN_EXTERN_C +/*******************************************************************************/ + +static switch_memory_pool_t *module_pool = NULL; + +SWITCH_MODULE_LOAD_FUNCTION(mod_h323_load); +SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_h323_shutdown); +SWITCH_MODULE_DEFINITION(mod_h323, mod_h323_load, mod_h323_shutdown, NULL); + +SWITCH_MODULE_LOAD_FUNCTION(mod_h323_load) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Starting loading mod_h323\n"); - *module_interface = switch_loadable_module_create_module_interface(pool, modname); - - if (!*module_interface) { - return SWITCH_STATUS_MEMERR; - } - h323_process = new FSProcess(); - if (h323_process == NULL) { - return SWITCH_STATUS_MEMERR; - } + *module_interface = switch_loadable_module_create_module_interface(pool, modname); - if (h323_process->Initialise(*module_interface)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "H323 mod initialized and running\n"); - return SWITCH_STATUS_SUCCESS; - } + if (!*module_interface) { + return SWITCH_STATUS_MEMERR; + } - delete h323_process; - h323_process = NULL; - return SWITCH_STATUS_FALSE; + module_pool = pool; + + h323_process = new FSProcess(); + + if (h323_process == NULL) { + return SWITCH_STATUS_MEMERR; + } + + if (h323_process->Initialise(*module_interface)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "H323 mod initialized and running\n"); + return SWITCH_STATUS_SUCCESS; + } + + delete h323_process; + h323_process = NULL; + + return SWITCH_STATUS_FALSE; } -SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_h323_shutdown){ - - switch_safe_free(mod_h323_globals.context); - switch_safe_free(mod_h323_globals.dialplan); - switch_safe_free(mod_h323_globals.codec_string); - delete h323_process; - h323_process = NULL; - return SWITCH_STATUS_SUCCESS; +SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_h323_shutdown) +{ + switch_safe_free(mod_h323_globals.context); + switch_safe_free(mod_h323_globals.dialplan); + switch_safe_free(mod_h323_globals.codec_string); + + delete h323_process; + h323_process = NULL; + + return SWITCH_STATUS_SUCCESS; } -void h_timer(unsigned sec){ +SWITCH_END_EXTERN_C +/*******************************************************************************/ + +void h_timer(unsigned sec) +{ timeval timeout; timeout.tv_sec = sec; timeout.tv_usec = 0; - select(NULL, NULL, NULL, NULL, &timeout); + select(0, NULL, NULL, NULL, &timeout); } @@ -265,8 +306,8 @@ class FSTrace : public ostream { #endif -PString GetH245CodecName(const H323Capability* cap){ - +PString GetH245CodecName(const H323Capability* cap) +{ switch (cap->GetSubType()) { case H245_AudioCapability::e_g711Alaw64k: case H245_AudioCapability::e_g711Alaw56k: @@ -297,43 +338,48 @@ PString GetH245CodecName(const H323Capability* cap){ } FSProcess::FSProcess() - : PLibraryProcess("Test", "mod_h323", 1, 0, AlphaCode, 1) - , m_h323endpoint(NULL){ - + : PProcess("FreeSWITCH", "mod_h323", 1, 0, AlphaCode, 1) + , m_h323endpoint(NULL) +{ PTrace::SetLevel(4); - PTrace::SetOptions(PTrace::TraceLevel); - PTrace::SetStream(new FSTrace); + PTrace::SetOptions(PTrace::TraceLevel); + PTrace::SetStream(new FSTrace); } -FSProcess::~FSProcess(){ - delete m_h323endpoint; +FSProcess::~FSProcess() +{ + delete m_h323endpoint; } -bool FSProcess::Initialise(switch_loadable_module_interface_t *iface){ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "======>FSProcess::Initialise [%p]\n", this); +bool FSProcess::Initialise(switch_loadable_module_interface_t *iface) +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "======>FSProcess::Initialise [%p]\n", this); - m_h323endpoint = new FSH323EndPoint(); - return m_h323endpoint != NULL && m_h323endpoint->Initialise(iface); + m_h323endpoint = new FSH323EndPoint(); + return m_h323endpoint != NULL && m_h323endpoint->Initialise(iface); } -bool FSH323EndPoint::Initialise(switch_loadable_module_interface_t *iface){ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSManager::Initialise [%p]\n",this); - ReadConfig(false); +bool FSH323EndPoint::Initialise(switch_loadable_module_interface_t *iface) +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSManager::Initialise [%p]\n", this); + ReadConfig(false); + /* Update tracing level for h323 */ + PTrace::SetLevel(mod_h323_globals.trace_level); + PTrace::SetOptions(PTrace::TraceLevel); - - m_freeswitch = (switch_endpoint_interface_t *) switch_loadable_module_create_interface(iface, SWITCH_ENDPOINT_INTERFACE); - m_freeswitch->interface_name = modulename; - m_freeswitch->io_routines = &h323fs_io_routines; - m_freeswitch->state_handler = &h323fs_event_handlers; + m_freeswitch = (switch_endpoint_interface_t *) switch_loadable_module_create_interface(iface, SWITCH_ENDPOINT_INTERFACE); + m_freeswitch->interface_name = modulename; + m_freeswitch->io_routines = &h323fs_io_routines; + m_freeswitch->state_handler = &h323fs_event_handlers; PString codec = ((const char *)mod_h323_globals.codec_string); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Config capabilliti %s \n",(const char *)codec); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Config capability %s \n", (const char *)codec); if (!codec.IsEmpty()) { const char** f = h323_formats; for (; *f; f += 2) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Find capabilliti %s to %s\n",f[1],(const char *)codec); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Find capability %s to %s\n",f[1], (const char *)codec); if (codec.Find(f[1]) != P_MAX_INDEX) { PString tmp = f[0]; tmp += "*{sw}"; @@ -356,96 +402,110 @@ bool FSH323EndPoint::Initialise(switch_loadable_module_interface_t *iface){ } } } - if (m_fax_old_asn){ + + if (m_fax_old_asn) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "--->fax_old_asn\n"); SetT38_IFP_PRE(); SetCapability(0, 0, new FSH323_T38Capability(OpalT38_IFP_PRE)); - }else{ + } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "--->fax_asn\n"); SetCapability(0, 0, new FSH323_T38Capability(OpalT38_IFP_COR)); } - AddAllUserInputCapabilities(0,1); + AddAllUserInputCapabilities(0, 1); - DisableFastStart(!m_faststart); - DisableH245Tunneling(!m_h245tunneling); - DisableH245inSetup(!m_h245insetup); - DisableDetectInBandDTMF(!m_dtmfinband); - SetLocalUserName(m_endpointname); + DisableFastStart(!m_faststart); + DisableH245Tunneling(!m_h245tunneling); + DisableH245inSetup(!m_h245insetup); + DisableDetectInBandDTMF(!m_dtmfinband); + if (!m_endpointname.IsEmpty()) + SetLocalUserName(m_endpointname); - if (m_listeners.empty()) { - StartListener(""); - } else { - for (std::list < FSListener >::iterator it = m_listeners.begin(); it != m_listeners.end(); ++it) { - if (!StartListener(it->listenAddress)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Cannot start listener for %s\n", (const char*)(it->name)); - } - } - } + if (m_listeners.empty()) { + StartListener(""); + } else { + for (std::list < FSListener >::iterator it = m_listeners.begin(); it != m_listeners.end(); ++it) { + if (!StartListener(it->listenAddress)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Cannot start listener for %s\n", (const char*)(it->name)); + } + } + } - if (!m_gkAddress.IsEmpty() && !m_gkIdentifer.IsEmpty() && !m_gkInterface.IsEmpty()) { + if (!m_gkAddress.IsEmpty() && !m_gkIdentifer.IsEmpty() && !m_gkInterface.IsEmpty()) { m_thread = new FSGkRegThread(this,&m_gkAddress,&m_gkIdentifer,&m_gkInterface,m_gkretry); m_thread->SetAutoDelete(); m_thread->Resume(); - } + } - return TRUE; + return TRUE; } -switch_status_t FSH323EndPoint::ReadConfig(int reload){ +switch_status_t FSH323EndPoint::ReadConfig(int reload) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323EndPoint::ReadConfig [%p]\n",this); - const char *cf = "h323.conf"; - switch_status_t status = SWITCH_STATUS_SUCCESS; + + const char *cf = "h323.conf"; + switch_status_t status = SWITCH_STATUS_SUCCESS; switch_memory_pool_t *pool = NULL; - if ((status = switch_core_new_memory_pool(&pool)) != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n"); - return status; - } + + if ((status = switch_core_new_memory_pool(&pool)) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n"); + return status; + } - set_global_context("default"); - set_global_dialplan("XML"); + set_global_context("default"); + set_global_dialplan("XML"); - switch_event_t *params = NULL; - switch_event_create(¶ms, SWITCH_EVENT_REQUEST_PARAMS); - switch_assert(params); - switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile", switch_str_nil("")); - switch_xml_t cfg; - switch_xml_t xml = switch_xml_open_cfg(cf, &cfg, params); - if (xml == NULL) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf); - return SWITCH_STATUS_FALSE; - } + switch_event_t *params = NULL; + switch_event_create(¶ms, SWITCH_EVENT_REQUEST_PARAMS); + switch_assert(params); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile", switch_str_nil("")); + switch_xml_t cfg; + switch_xml_t xml = switch_xml_open_cfg(cf, &cfg, params); - switch_xml_t xmlSettings = switch_xml_child(cfg, "settings"); + if (xml == NULL) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf); + return SWITCH_STATUS_FALSE; + } + + switch_xml_t xmlSettings = switch_xml_child(cfg, "settings"); m_pi = 8; m_ai = 0; m_endpointname = "FreeSwitch"; - if (xmlSettings) { - for (switch_xml_t xmlParam = switch_xml_child(xmlSettings, "param"); xmlParam != NULL; xmlParam = xmlParam->next) { - const char *var = switch_xml_attr_soft(xmlParam, "name"); - const char *val = switch_xml_attr_soft(xmlParam, "value"); + mod_h323_globals.ptime_override_value = -1; - if (!strcasecmp(var, "trace-level")) { - int level = atoi(val); - if (level > 0) { - mod_h323_globals.trace_level = level; - } - } else if (!strcasecmp(var, "context")) { - set_global_context(val); - } else if (!strcasecmp(var, "dialplan")) { - set_global_dialplan(val); - } else if (!strcasecmp(var, "codec-prefs")) { - set_global_codec_string(val); - } else if (!strcasecmp(var, "jitter-size")) { - char * next; - unsigned minJitter = strtoul(val, &next, 10); - if (minJitter >= 10) { - unsigned maxJitter = minJitter; - if (*next == ',') - maxJitter = atoi(next+1); - SetAudioJitterDelay(minJitter, maxJitter); // In milliseconds - } else{ + if (xmlSettings) { + for (switch_xml_t xmlParam = switch_xml_child(xmlSettings, "param"); xmlParam != NULL; xmlParam = xmlParam->next) { + const char *var = switch_xml_attr_soft(xmlParam, "name"); + const char *val = switch_xml_attr_soft(xmlParam, "value"); + + if (!strcasecmp(var, "trace-level")) { + int level = atoi(val); + if (level > 0) { + mod_h323_globals.trace_level = level; + } + } else if (!strcasecmp(var, "context")) { + set_global_context(val); + } else if (!strcasecmp(var, "dialplan")) { + set_global_dialplan(val); + } else if (!strcasecmp(var, "codec-prefs")) { + set_global_codec_string(val); + } else if (!strcasecmp(var, "use-rtp-timer")) { + mod_h323_globals.use_rtp_timer = switch_true(val); + } else if (!strcasecmp(var, "rtp-timer-name")) { + set_global_rtp_timer_name(val); + } else if (!strcasecmp(var, "ptime-override-value")) { + mod_h323_globals.ptime_override_value = atoi(val); + } else if (!strcasecmp(var, "jitter-size")) { + char * next; + unsigned minJitter = strtoul(val, &next, 10); + if (minJitter >= 10) { + unsigned maxJitter = minJitter; + if (*next == ',') + maxJitter = atoi(next+1); + SetAudioJitterDelay(minJitter, maxJitter); // In milliseconds + } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Set zero Jitter buffer\n"); SetAudioJitterDelay(0, 0); } @@ -457,15 +517,15 @@ switch_status_t FSH323EndPoint::ReadConfig(int reload){ m_h245insetup = switch_true(val); } else if (!strcasecmp(var, "dtmfinband")) { m_dtmfinband = switch_true(val); - } else if (!strcasecmp(var, "gk-address")) { - m_gkAddress = val; - } else if (!strcasecmp(var, "gk-identifer")) { - m_gkIdentifer = val; - } else if (!strcasecmp(var, "endpoint-name")) { - m_endpointname = val; - } else if (!strcasecmp(var, "gk-interface")) { - m_gkInterface = val; - } else if (!strcasecmp(var, "gk-prefix")) { + } else if (!strcasecmp(var, "gk-address")) { + m_gkAddress = val; + } else if (!strcasecmp(var, "gk-identifer")) { + m_gkIdentifer = val; + } else if (!strcasecmp(var, "endpoint-name")) { + m_endpointname = val; + } else if (!strcasecmp(var, "gk-interface")) { + m_gkInterface = val; + } else if (!strcasecmp(var, "gk-prefix")) { m_gkPrefixes.AppendString(val); } else if (!strcasecmp(var, "gk-retry")) { m_gkretry = atoi(val); @@ -476,44 +536,47 @@ switch_status_t FSH323EndPoint::ReadConfig(int reload){ } else if (!strcasecmp(var, "fax-old-asn")) { m_fax_old_asn = switch_true(val); } - } - } + } + } - switch_xml_t xmlListeners = switch_xml_child(cfg, "listeners"); - if (xmlListeners != NULL) { - for (switch_xml_t xmlListener = switch_xml_child(xmlListeners, "listener"); xmlListener != NULL; xmlListener = xmlListener->next) { + switch_xml_t xmlListeners = switch_xml_child(cfg, "listeners"); + if (xmlListeners != NULL) { + for (switch_xml_t xmlListener = switch_xml_child(xmlListeners, "listener"); xmlListener != NULL; xmlListener = xmlListener->next) { - m_listeners.push_back(FSListener()); - FSListener & listener = m_listeners.back(); + m_listeners.push_back(FSListener()); + FSListener & listener = m_listeners.back(); - listener.name = switch_xml_attr_soft(xmlListener, "name"); - if (listener.name.IsEmpty()) - listener.name = "unnamed"; + listener.name = switch_xml_attr_soft(xmlListener, "name"); + if (listener.name.IsEmpty()) + listener.name = "unnamed"; - PIPSocket::Address ip; - WORD port = 1720; + PIPSocket::Address ip; + WORD port = 1720; - for (switch_xml_t xmlParam = switch_xml_child(xmlListener, "param"); xmlParam != NULL; xmlParam = xmlParam->next) { - const char *var = switch_xml_attr_soft(xmlParam, "name"); - const char *val = switch_xml_attr_soft(xmlParam, "value"); + for (switch_xml_t xmlParam = switch_xml_child(xmlListener, "param"); xmlParam != NULL; xmlParam = xmlParam->next) { + const char *var = switch_xml_attr_soft(xmlParam, "name"); + const char *val = switch_xml_attr_soft(xmlParam, "value"); - if (!strcasecmp(var, "h323-ip")) - ip = val; - else if (!strcasecmp(var, "h323-port")) - port = (WORD) atoi(val); - } + if (!strcasecmp(var, "h323-ip")) + ip = val; + else if (!strcasecmp(var, "h323-port")) + port = (WORD) atoi(val); + } - listener.listenAddress = new H323ListenerTCP(*this,ip,port); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Created Listener '%s'\n", (const char *) listener.name); - } - } + listener.listenAddress = new H323ListenerTCP(*this, ip, port); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Created Listener '%s'\n", (const char *) listener.name); + } + } - switch_event_destroy(¶ms); + switch_event_destroy(¶ms); - if (xml) - switch_xml_free(xml); + if (xml) + switch_xml_free(xml); - return status; + if (mod_h323_globals.use_rtp_timer && !mod_h323_globals.rtp_timer_name) + set_global_rtp_timer_name("soft"); + + return status; } FSH323EndPoint::FSH323EndPoint() @@ -528,42 +591,45 @@ FSH323EndPoint::FSH323EndPoint() terminalType = e_GatewayOnly; } -FSH323EndPoint::~FSH323EndPoint(){ +FSH323EndPoint::~FSH323EndPoint() +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323EndPoint::~FSH323EndPoint [%p]\n",this); StopGkClient(); - ClearAllCalls(H323Connection::EndedByLocalUser,false); + ClearAllCalls(H323Connection::EndedByLocalUser, false); } H323Connection *FSH323EndPoint::CreateConnection( unsigned callReference, void* userData, H323Transport* transport, - H323SignalPDU* setupPDU){ + H323SignalPDU* setupPDU) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323EndPoint::CreateConnection callReference = %u userDate = %p [%p]\n",callReference,userData,this); - if ((switch_caller_profile_t *)userData){ + if ((switch_caller_profile_t *)userData) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------> SWITCH_CALL_DIRECTION_OUTBOUND\n"); - } else{ + } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------> SWITCH_CALL_DIRECTION_INBOUND\n"); } - switch_core_session_t *fsSession = switch_core_session_request(GetSwitchInterface(), - (switch_caller_profile_t *)userData ? SWITCH_CALL_DIRECTION_OUTBOUND : SWITCH_CALL_DIRECTION_INBOUND, NULL); - if (fsSession == NULL) - return NULL; + switch_core_session_t *fsSession = switch_core_session_request(GetSwitchInterface(), + (switch_caller_profile_t *)userData ? SWITCH_CALL_DIRECTION_OUTBOUND : SWITCH_CALL_DIRECTION_INBOUND, NULL); + if (fsSession == NULL) + return NULL; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------> fsSession = %p\n",fsSession); - switch_channel_t *fsChannel = switch_core_session_get_channel(fsSession); + switch_channel_t *fsChannel = switch_core_session_get_channel(fsSession); if (fsChannel == NULL) { - switch_core_session_destroy(&fsSession); - return NULL; + switch_core_session_destroy(&fsSession); + return NULL; } - return new FSH323Connection(*this,transport,callReference,(switch_caller_profile_t *)userData, fsSession, fsChannel); + return new FSH323Connection(*this, transport, callReference, (switch_caller_profile_t *)userData, fsSession, fsChannel); } -bool FSH323EndPoint::OnSetGatewayPrefixes(PStringList & prefixes) const{ +bool FSH323EndPoint::OnSetGatewayPrefixes(PStringList & prefixes) const +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323EndPoint::OnSetGatewayPrefixes [%p]\n",this); if(m_gkPrefixes.GetSize() > 0) { // PTRACE(4, "mod_h323\tOnSetGatewayPrefixes " << m_gkPrefixes); @@ -573,16 +639,18 @@ bool FSH323EndPoint::OnSetGatewayPrefixes(PStringList & prefixes) const{ return false; } -void FSH323EndPoint::StartGkClient(int retry, PString* gkAddress,PString* gkIdentifer,PString* gkInterface){ +void FSH323EndPoint::StartGkClient(int retry, PString* gkAddress,PString* gkIdentifer,PString* gkInterface) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323EndPoint::StartGkClient [%p]\n",this); - while(!UseGatekeeper(m_gkAddress, m_gkIdentifer, m_gkInterface) && retry > 0 ){ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, - "Could not start gatekeeper: gw name=\"%s\", addr=\"%s\", id=\"%s\", if=\"%s\"\n", - (const char *)m_endpointname, - (const char *)m_gkAddress, - (const char *)m_gkIdentifer, - (const char *)m_gkInterface); - if (m_stop_gk) { + + while (!UseGatekeeper(m_gkAddress, m_gkIdentifer, m_gkInterface) && retry > 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, + "Could not start gatekeeper: gw name=\"%s\", addr=\"%s\", id=\"%s\", if=\"%s\"\n", + (const char *)m_endpointname, + (const char *)m_gkAddress, + (const char *)m_gkIdentifer, + (const char *)m_gkInterface); + if (m_stop_gk) { m_stop_gk = false; return; } @@ -594,15 +662,18 @@ void FSH323EndPoint::StartGkClient(int retry, PString* gkAddress,PString* gkIden } RemoveGatekeeper(); } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Started gatekeeper: %s\n", (const char *)GetGatekeeper()->GetName()); m_thread = NULL; } -void FSH323EndPoint::StopGkClient(){ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323EndPoint::StopGkClient [%p]\n",this); +void FSH323EndPoint::StopGkClient() +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323EndPoint::StopGkClient [%p]\n", this); + if (m_thread) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Stop gatekeeper thread\n"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Stop gatekeeper thread\n"); m_stop_gk = true; while (m_stop_gk){ @@ -611,83 +682,88 @@ void FSH323EndPoint::StopGkClient(){ } RemoveGatekeeper(); m_thread = NULL; - } + } } - FSH323Connection::FSH323Connection(FSH323EndPoint& endpoint, H323Transport* transport, unsigned callReference, switch_caller_profile_t *outbound_profile, switch_core_session_t *fsSession, switch_channel_t *fsChannel) : H323Connection(endpoint,callReference) , m_endpoint(&endpoint) , m_fsSession(fsSession) - , m_fsChannel(fsChannel) + , m_fsChannel(fsChannel) , m_callOnPreAnswer(false) , m_startRTP(false) - , m_rxChennel(false) - , m_txChennel(false) - , m_ChennelAnswer(false) - , m_ChennelProgress(false) + , m_rxChannel(false) + , m_txChannel(false) + , m_ChannelAnswer(false) + , m_ChannelProgress(false) , m_select_dtmf(0) , m_active_sessionID(0) - , m_active_chennel_fax(false) + , m_active_channel_fax(false) , m_rtp_resetting(0) , m_isRequst_fax(false) - , m_channel_hangup(false){ + , m_channel_hangup(false) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::FSH323Connection [%p]\n",this); - h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_alloc(m_fsSession, sizeof(*tech_pvt)); - tech_pvt->me = this; - switch_core_session_set_private(m_fsSession, tech_pvt); + h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_alloc(m_fsSession, sizeof(*tech_pvt)); + tech_pvt->me = this; + switch_core_session_set_private(m_fsSession, tech_pvt); switch_mutex_init(&tech_pvt->flag_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(m_fsSession)); switch_mutex_init(&tech_pvt->h323_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(m_fsSession)); switch_mutex_init(&tech_pvt->h323_io_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(m_fsSession)); - if (outbound_profile != NULL) { - SetLocalPartyName(outbound_profile->caller_id_number); - SetDisplayName(outbound_profile->caller_id_name); + if (outbound_profile != NULL) { + SetLocalPartyName(outbound_profile->caller_id_number); + SetDisplayName(outbound_profile->caller_id_name); - switch_caller_profile_t *caller_profile = switch_caller_profile_clone(m_fsSession, outbound_profile); - switch_channel_set_caller_profile(m_fsChannel, caller_profile); + switch_caller_profile_t *caller_profile = switch_caller_profile_clone(m_fsSession, outbound_profile); + switch_channel_set_caller_profile(m_fsChannel, caller_profile); - PString name = "h323/"; - name += outbound_profile->destination_number; - switch_channel_set_name(m_fsChannel, name); + PString name = "h323/"; + name += outbound_profile->destination_number; + switch_channel_set_name(m_fsChannel, name); - switch_channel_set_flag(m_fsChannel, CF_OUTBOUND); - switch_channel_set_state(m_fsChannel, CS_INIT); - } + switch_channel_set_flag(m_fsChannel, CF_OUTBOUND); + switch_channel_set_state(m_fsChannel, CS_INIT); + } m_RTPlocalPort = switch_rtp_request_port((const char *)m_RTPlocalIP.AsString()); } -FSH323Connection::~FSH323Connection(){ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::~FSH323Connection [%p]\n",this); +FSH323Connection::~FSH323Connection() +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::~FSH323Connection [%p]\n",this); h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); if ((m_rtp_resetting == 1)) { - switch_core_session_unlock_codec_read(m_fsSession); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",m_fsSession); - switch_core_session_unlock_codec_write(m_fsSession); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_write [%p]\n",m_fsSession); + switch_core_session_unlock_codec_read(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",m_fsSession); + switch_core_session_unlock_codec_write(m_fsSession); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_write [%p]\n",m_fsSession); } - tech_pvt->me = NULL; + tech_pvt->me = NULL; // switch_mutex_unlock(tech_pvt->h323_mutex); // switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); } -void FSH323Connection::OnSetLocalCapabilities(){ +void FSH323Connection::OnSetLocalCapabilities() +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnSetLocalCapabilities() [%p]\n",this); H323Connection::OnSetLocalCapabilities(); SetLocalCapabilities(); } -bool FSH323Connection::SetLocalCapabilities(){ +bool FSH323Connection::SetLocalCapabilities() +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::SetLocalCapabilities() Size local capability = %d [%p]\n",localCapabilities.GetSize(),this); - if (!mod_h323_globals.codec_string) + + if (!mod_h323_globals.codec_string) return false; - bool nocodecs = true; - bool changed = false; - for (int i = 0; i < localCapabilities.GetSize(); i++) { + bool nocodecs = true; + bool changed = false; + + for (int i = 0; i < localCapabilities.GetSize(); i++) { const char* format = 0; PString fname; decodeCapability(localCapabilities[i],&format,0,&fname); @@ -704,39 +780,45 @@ bool FSH323Connection::SetLocalCapabilities(){ } localCapabilities.Remove(fname); i--; - } else nocodecs = false; + } else + nocodecs = false; } - } - if (nocodecs) { + } + + if (nocodecs) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No codecs remaining for H323 connection [%p]\n",this); changed = false; ClearCall(EndedByCapabilityExchange); - } - return changed; + } + + return changed; } -bool FSH323Connection::decodeCapability(const H323Capability& capability, const char** dataFormat, int* payload, PString* capabName){ +bool FSH323Connection::decodeCapability(const H323Capability& capability, const char** dataFormat, int* payload, PString* capabName) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::decodeCapability [%p]\n",this); - PString fname((const char *)capability.GetFormatName()); + + PString fname((const char *)capability.GetFormatName()); - if (fname.Find("{sw}") == (fname.GetLength() - 4)) + if (fname.Find("{sw}") == (fname.GetLength() - 4)) fname = fname.Mid(0,fname.GetLength()-4); - if (fname.Find("{hw}") == (fname.GetLength() - 4)) + if (fname.Find("{hw}") == (fname.GetLength() - 4)) fname = fname.Mid(0,fname.GetLength()-4); - OpalMediaFormat oformat(fname, false); - int pload = oformat.GetPayloadType(); - const char *format = 0; - const char** f = h323_formats; - for (; *f; f += 2) { + OpalMediaFormat oformat(fname, false); + int pload = oformat.GetPayloadType(); + const char *format = 0; + const char** f = h323_formats; + + for (; *f; f += 2) { if (fname.Find(*f) == 0) { format = f[1]; break; } - } + } - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE,"capability '%s' format '%s' %d",(const char*)fname,format,pload); - if (format) { + if (format) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE,"capability '%s' format '%s' %d",(const char*)fname,format,pload); if (capabName) *capabName = fname; if (dataFormat) @@ -744,46 +826,51 @@ bool FSH323Connection::decodeCapability(const H323Capability& capability, const if (payload) *payload = pload; return true; - } - return false; + } + + return false; } H323Connection::AnswerCallResponse FSH323Connection::OnAnswerCall(const PString &caller, - const H323SignalPDU &setupPDU, H323SignalPDU &connectPDU){ + const H323SignalPDU &setupPDU, H323SignalPDU &connectPDU) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnAnswerCall caller = %s [%p]\n",(const char*)caller,this); if (m_fsSession == NULL) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session request failed.\n"); - return H323Connection::AnswerCallDenied; - } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session request failed.\n"); + return H323Connection::AnswerCallDenied; + } - switch_core_session_add_stream(m_fsSession, NULL); + switch_core_session_add_stream(m_fsSession, NULL); - switch_channel_t *channel = switch_core_session_get_channel(m_fsSession); - if (channel == NULL) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session does not have a channel\n"); - return H323Connection::AnswerCallDenied; - } + switch_channel_t *channel = switch_core_session_get_channel(m_fsSession); + if (channel == NULL) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session does not have a channel\n"); + return H323Connection::AnswerCallDenied; + } const Q931& q931 = setupPDU.GetQ931(); const H225_Setup_UUIE& setup = setupPDU.m_h323_uu_pdu.m_h323_message_body; - const H225_ArrayOf_AliasAddress& address = setup.m_destinationAddress; - for (int i = 0; i 0) + + if (address.GetSize() > 0) called = (const char *)H323GetAliasAddressString(address[0]); - if (!called.IsEmpty()) + if (!called.IsEmpty()) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE,"Called number or alias = %s\n",(const char*)called); - else { + else { PString callnam; if (q931.GetCalledPartyNumber(callnam)) { called=(const char *)callnam; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE,"Called-Party-Number = %s\n",(const char*)called); } - } + } - switch_caller_profile_t *caller_profile = switch_caller_profile_new(switch_core_session_get_pool(m_fsSession), + switch_caller_profile_t *caller_profile = switch_caller_profile_new(switch_core_session_get_pool(m_fsSession), NULL, /** username */ mod_h323_globals.dialplan, @@ -807,10 +894,11 @@ H323Connection::AnswerCallResponse FSH323Connection::OnAnswerCall(const PString called /** destination_number */ ); - if (caller_profile == NULL) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not create caller profile\n"); - return H323Connection::AnswerCallDenied; - } + if (caller_profile == NULL) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not create caller profile\n"); + return H323Connection::AnswerCallDenied; + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Created switch caller profile:\n" " username = %s\n" " dialplan = %s\n" @@ -830,22 +918,23 @@ H323Connection::AnswerCallResponse FSH323Connection::OnAnswerCall(const PString ,caller_profile->destination_number); - switch_channel_set_caller_profile(channel, caller_profile); + switch_channel_set_caller_profile(channel, caller_profile); - char name[256] = "h323/"; - switch_copy_string(name + 5, caller_profile->destination_number, sizeof(name)-5); - switch_channel_set_name(channel, name); - switch_channel_set_state(channel, CS_INIT); + char name[256] = "h323/"; + switch_copy_string(name + 5, caller_profile->destination_number, sizeof(name)-5); + switch_channel_set_name(channel, name); + switch_channel_set_state(channel, CS_INIT); - if (switch_core_session_thread_launch(m_fsSession) != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not launch session thread\n"); - return H323Connection::AnswerCallDenied; - } + if (switch_core_session_thread_launch(m_fsSession) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not launch session thread\n"); + return H323Connection::AnswerCallDenied; + } return H323Connection::AnswerCallDeferred; } -H323Channel* FSH323Connection::CreateRealTimeLogicalChannel(const H323Capability& capability,H323Channel::Directions dir,unsigned sessionID,const H245_H2250LogicalChannelParameters* param, RTP_QOS * rtpqos){ +H323Channel* FSH323Connection::CreateRealTimeLogicalChannel(const H323Capability& capability,H323Channel::Directions dir,unsigned sessionID,const H245_H2250LogicalChannelParameters* param, RTP_QOS * rtpqos) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::CreateRealTimeLogicalChannel [%p]\n",this); H323TransportAddress m_h323transportadd = GetSignallingChannel()->GetLocalAddress(); @@ -854,19 +943,22 @@ H323Channel* FSH323Connection::CreateRealTimeLogicalChannel(const H323Capability return new FSH323_ExternalRTPChannel(*this, capability, dir, sessionID,m_RTPlocalIP,m_RTPlocalPort); } -PBoolean FSH323Connection::OnStartLogicalChannel(H323Channel & channel){ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnStartLogicalChannel chennel = %p [%p]\n",&channel,this); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnStartLogicalChannel connectionState = %s [%p]\n",ConnectionStatesNames[connectionState],this); +PBoolean FSH323Connection::OnStartLogicalChannel(H323Channel & channel) +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnStartLogicalChannel chennel = %p [%p]\n",&channel,this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnStartLogicalChannel connectionState = %s [%p]\n",ConnectionStatesNames[connectionState],this); return connectionState != ShuttingDownConnection; } -PBoolean FSH323Connection::OnCreateLogicalChannel(const H323Capability& capability, H323Channel::Directions dir, unsigned& errorCode){ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnCreateLogicalChannel ('%s',%s) [%p]\n",(const char *)capability.GetFormatName(),GetDirections[dir],this); +PBoolean FSH323Connection::OnCreateLogicalChannel(const H323Capability& capability, H323Channel::Directions dir, unsigned& errorCode) +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnCreateLogicalChannel ('%s',%s) [%p]\n",(const char *)capability.GetFormatName(),GetDirections[dir],this); return H323Connection::OnCreateLogicalChannel(capability,dir,errorCode); } -void FSH323Connection::OnReceivedReleaseComplete(const H323SignalPDU & pdu){ +void FSH323Connection::OnReceivedReleaseComplete(const H323SignalPDU & pdu) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnReceivedReleaseComplete value = %d\n",(switch_call_cause_t)pdu.GetQ931().GetCause()); h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); if ((tech_pvt->me != NULL) && (m_rtp_resetting == 1)) { @@ -877,39 +969,44 @@ void FSH323Connection::OnReceivedReleaseComplete(const H323SignalPDU & pdu){ } tech_pvt->me = NULL; switch_channel_hangup(switch_core_session_get_channel(m_fsSession),(switch_call_cause_t)pdu.GetQ931().GetCause()); + return H323Connection::OnReceivedReleaseComplete(pdu); } bool FSH323Connection::OnReceivedProgress(const H323SignalPDU &pdu) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnReceivedProgress [%p]\n",this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnReceivedProgress [%p]\n", this); H323Connection::OnReceivedProgress(pdu); - if ((m_rxChennel && m_txChennel) || (m_ChennelProgress && m_rxChennel)) + if ((m_rxChannel && m_txChannel) || (m_ChannelProgress && m_rxChannel)) switch_channel_mark_pre_answered(m_fsChannel); else{ - m_ChennelProgress = true; + m_ChannelProgress = true; } return true; } -bool FSH323Connection::OnReceivedSignalSetup(const H323SignalPDU & setupPDU){ - +bool FSH323Connection::OnReceivedSignalSetup(const H323SignalPDU & setupPDU) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnReceivedSignalSetup [%p]\n",this); - if (!H323Connection::OnReceivedSignalSetup(setupPDU)) return false; + + if (!H323Connection::OnReceivedSignalSetup(setupPDU)) + return false; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"---------> after FSH323Connection::OnReceivedSignalSetup connectionState = %s [%p]\n",ConnectionStatesNames[connectionState],this); H323SignalPDU callProceedingPDU; H225_CallProceeding_UUIE & callProceeding = callProceedingPDU.BuildCallProceeding(*this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"---------> after callProceedingPDU.BuildCallProceeding connectionState = %s [%p]\n",ConnectionStatesNames[connectionState],this); if (connectionState == ShuttingDownConnection){ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"---------> connectionState = ShuttingDownConnection [%p]\n",this); return false; } - - if (SendFastStartAcknowledge(callProceeding.m_fastStart)){ - callProceeding.IncludeOptionalField(H225_CallProceeding_UUIE::e_fastStart); + + if (SendFastStartAcknowledge(callProceeding.m_fastStart)) { + callProceeding.IncludeOptionalField(H225_CallProceeding_UUIE::e_fastStart); } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE,"SendFastStartAcknowledge = FALSE\n"); - if (connectionState == ShuttingDownConnection){ + if (connectionState == ShuttingDownConnection) { return true; } earlyStart = TRUE; @@ -921,36 +1018,41 @@ bool FSH323Connection::OnReceivedSignalSetup(const H323SignalPDU & setupPDU){ controlChannel->SetUpTransportPDU(callProceeding.m_h245Address, TRUE); } } - if (connectionState == ShuttingDownConnection){ - return true; - } - - if (!WriteSignalPDU(callProceedingPDU)){ - return false; + if (connectionState == ShuttingDownConnection) { + return true; } + + if (!WriteSignalPDU(callProceedingPDU)) { + return false; + } + return true; } -bool FSH323Connection::OnReceivedCallProceeding(const H323SignalPDU & pdu){ +bool FSH323Connection::OnReceivedCallProceeding(const H323SignalPDU & pdu) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>PFSH323Connection::OnReceivedCallProceeding [%p]\n",this); unsigned pi; - if (!pdu.GetQ931().GetProgressIndicator(pi)) pi = 0; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"----------->OnAlerting PI = %u",pi); - if (pi > 0){ - if ((m_rxChennel && m_txChennel) || (m_ChennelProgress && m_rxChennel)) + if (pi > 0) { + if ((m_rxChannel && m_txChannel) || (m_ChannelProgress && m_rxChannel)) switch_channel_mark_pre_answered(m_fsChannel); - else{ - m_ChennelProgress = true; + else { + m_ChannelProgress = true; } } + return H323Connection::OnReceivedCallProceeding(pdu); } -bool FSH323Connection::OnSendCallProceeding(H323SignalPDU & callProceedingPDU){ +bool FSH323Connection::OnSendCallProceeding(H323SignalPDU & callProceedingPDU) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnSendCallProceeding fastStartState = %s [%p]\n",FastStartStateNames[fastStartState],this); + return false; // return true; } @@ -958,20 +1060,23 @@ bool FSH323Connection::OnSendCallProceeding(H323SignalPDU & callProceedingPDU){ bool FSH323Connection::OnSendReleaseComplete(H323SignalPDU & pdu) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnSendReleaseComplete cause = %u\n",(switch_call_cause_t)pdu.GetQ931().GetCause()); + switch_channel_hangup(m_fsChannel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); return H323Connection::OnSendReleaseComplete(pdu); } -PBoolean FSH323Connection::OpenLogicalChannel(const H323Capability& capability, unsigned sessionID, H323Channel::Directions dir){ +PBoolean FSH323Connection::OpenLogicalChannel(const H323Capability& capability, unsigned sessionID, H323Channel::Directions dir) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OpenLogicalChannel ('%s', %d, %s) [%p]\n",(const char *)capability.GetFormatName(),sessionID,GetDirections[dir],this); - return H323Connection::OpenLogicalChannel(capability,sessionID,dir); + + return H323Connection::OpenLogicalChannel(capability,sessionID,dir); } bool FSH323Connection::OnReceivedCapabilitySet(const H323Capabilities & remoteCaps, const H245_MultiplexCapability * muxCap, - H245_TerminalCapabilitySetReject & reject){ - + H245_TerminalCapabilitySetReject & reject) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::OnReceivedCapabilitySet [%p]\n",this); if (connectionState == ShuttingDownConnection) return false; @@ -994,9 +1099,8 @@ bool FSH323Connection::OnReceivedCapabilitySet(const H323Capabilities & remoteCa return connectionState != ShuttingDownConnection; } - -bool FSH323Connection::OnAlerting(const H323SignalPDU &alertingPDU, const PString &user){ - +bool FSH323Connection::OnAlerting(const H323SignalPDU &alertingPDU, const PString &user) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>PFSH323Connection::OnAlerting user = %s [%p]\n",(const char *)user,this); unsigned pi; switch_status_t status = switch_channel_mark_ring_ready(m_fsChannel); @@ -1005,18 +1109,18 @@ bool FSH323Connection::OnAlerting(const H323SignalPDU &alertingPDU, const PStrin if (!alertingPDU.GetQ931().GetProgressIndicator(pi)) pi = 0; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"----------->OnAlerting PI = %u\n",pi); - if (pi > 0){ - if ((m_rxChennel && m_txChennel) || (m_ChennelProgress && m_rxChennel)) + if (pi > 0) { + if ((m_rxChannel && m_txChannel) || (m_ChannelProgress && m_rxChannel)) switch_channel_mark_pre_answered(m_fsChannel); - else{ - m_ChennelProgress = true; + else { + m_ChannelProgress = true; } } return ( status == SWITCH_STATUS_SUCCESS); } -void FSH323Connection::AnsweringCall(AnswerCallResponse response){ - +void FSH323Connection::AnsweringCall(AnswerCallResponse response) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::AnsweringCall [%p]\n",this); switch (response) { @@ -1029,7 +1133,7 @@ void FSH323Connection::AnsweringCall(AnswerCallResponse response){ if (!mediaWaitForConnect) { // create a new facility PDU if doing AnswerDeferredWithMedia H323SignalPDU want245PDU; - H225_Progress_UUIE & prog = want245PDU.BuildProgress(*this); + //H225_Progress_UUIE & prog = want245PDU.BuildProgress(*this); PBoolean sendPDU = TRUE; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE,"mediaWaitForConnect = FALSE\n"); /* if (SendFastStartAcknowledge(prog.m_fastStart)){ @@ -1107,16 +1211,18 @@ void FSH323Connection::AnsweringCall(AnswerCallResponse response){ } } -void FSH323Connection::OnEstablished(){ - +void FSH323Connection::OnEstablished() +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>PFSH323Connection::OnEstablished [%p]\n",this); if(m_startRTP) switch_channel_mark_answered(m_fsChannel); - else m_ChennelAnswer = true; - if (m_active_chennel_fax) + else + m_ChannelAnswer = true; + + if (m_active_channel_fax) RequestModeChangeT38("T.38\nT.38"); else - m_active_chennel_fax = true; + m_active_channel_fax = true; } PBoolean FSH323Connection::OnRequestModeChange(const H245_RequestMode & pdu, H245_RequestModeAck & /*ack*/, @@ -1138,7 +1244,8 @@ PBoolean FSH323Connection::OnRequestModeChange(const H245_RequestMode & pdu, return false; } -void FSH323Connection::OnModeChanged(const H245_ModeDescription & newMode){ +void FSH323Connection::OnModeChanged(const H245_ModeDescription & newMode) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>PFSH323Connection::OnModeChanged [%p]\n",this); for (PINDEX i = 0; i < newMode.GetSize(); i++) { H323Capability * capability = localCapabilities.FindCapability(newMode[i]); @@ -1150,7 +1257,7 @@ void FSH323Connection::OnModeChanged(const H245_ModeDescription & newMode){ if (type.m_application.GetTag() == H245_DataMode_application::e_t38fax){ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"ttype.m_application.GetTag() = H245_DataMode_application::e_t38fax\n"); H245_DataMode_application_t38fax & fax = type.m_application; - H245_DataProtocolCapability & proto = fax.m_t38FaxProtocol; + //H245_DataProtocolCapability & proto = fax.m_t38FaxProtocol; const H245_T38FaxProfile & profile = fax.m_t38FaxProfile; switch_t38_options_t* t38_options = (switch_t38_options_t*)switch_channel_get_private(m_fsChannel, "t38_options"); @@ -1160,7 +1267,7 @@ void FSH323Connection::OnModeChanged(const H245_ModeDescription & newMode){ } t38_options->T38VendorInfo = "0 0 0"; - t38_options->T38FaxVersion = profile.m_version; + t38_options->T38FaxVersion = (uint16_t)profile.m_version; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"T38FaxVersion:%lu\n",(unsigned long)profile.m_version); t38_options->T38MaxBitRate = type.m_bitRate*100; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"T38MaxBitRate:%d\n",t38_options->T38MaxBitRate); @@ -1188,7 +1295,7 @@ void FSH323Connection::OnModeChanged(const H245_ModeDescription & newMode){ t38_options->T38FaxUdpEC = "t38UDPRedundancy"; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"T38FaxUdpEC:%s\n",t38_options->T38FaxUdpEC); const char *uuid = switch_channel_get_variable(m_fsChannel, SWITCH_SIGNAL_BOND_VARIABLE); - if (uuid != NULL){ + if (uuid != NULL) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"uuid:%s\n",uuid); switch_channel_set_private(switch_core_session_get_channel(switch_core_session_locate(switch_channel_get_variable(m_fsChannel, SWITCH_SIGNAL_BOND_VARIABLE))), "t38_options", t38_options); @@ -1215,41 +1322,49 @@ void FSH323Connection::OnModeChanged(const H245_ModeDescription & newMode){ H323Connection::OnModeChanged(newMode); } -bool FSH323Connection::OnSendSignalSetup(H323SignalPDU & setupPDU){ +bool FSH323Connection::OnSendSignalSetup(H323SignalPDU & setupPDU) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>PFSH323Connection::OnSendSignalSetup [%p]\n",this); setupPDU.GetQ931().SetBearerCapabilities(Q931::TransferSpeech, 1); return true; } -void FSH323Connection::setRemoteAddress(const char* remoteIP, WORD remotePort){ +void FSH323Connection::setRemoteAddress(const char* remoteIP, WORD remotePort) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>PFSH323Connection::setRemoteAddress remoteIP = %s , remotePort = %d [%p]\n",remoteIP,remotePort,this); - if (!m_remotePort) { + + if (!m_remotePort) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Got remote RTP address %s:%d [%p]\n",remoteIP,remotePort,this); m_remotePort = remotePort; m_remoteAddr = remoteIP; - } + } } -switch_status_t FSH323Connection::on_execute(){ +switch_status_t FSH323Connection::on_execute() +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::on_execute [%p]\n",this); - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } -switch_status_t FSH323Connection::on_routing(){ +switch_status_t FSH323Connection::on_routing() +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::on_routing [%p]\n",this); - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } -switch_status_t FSH323Connection::kill_channel(int sig){ +switch_status_t FSH323Connection::kill_channel(int sig) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::kill_channel sig = %d [%p]\n",sig,this); + h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); + if (!tech_pvt) { return SWITCH_STATUS_FALSE; } - switch (sig) { + switch (sig) { case SWITCH_SIG_BREAK: if (switch_rtp_ready(tech_pvt->rtp_session)) { switch_rtp_break(tech_pvt->rtp_session); @@ -1270,15 +1385,17 @@ switch_status_t FSH323Connection::kill_channel(int sig){ switch_rtp_kill_socket(tech_pvt->rtp_session); } break; - } + } - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } -switch_status_t FSH323Connection::send_dtmf(const switch_dtmf_t *dtmf){ +switch_status_t FSH323Connection::send_dtmf(const switch_dtmf_t *dtmf) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::send_dtmf [%p]\n",this); - SendUserInputTone(dtmf->digit, dtmf->duration); - return SWITCH_STATUS_SUCCESS; + + SendUserInputTone(dtmf->digit, dtmf->duration); + return SWITCH_STATUS_SUCCESS; } void FSH323Connection::SendUserInputTone(char tone, unsigned duration, unsigned logicalChannel, unsigned rtpTimestamp) @@ -1309,39 +1426,43 @@ void FSH323Connection::OnUserInputString(const PString &value) } } -void FSH323Connection::CleanUpOnCall(){ +void FSH323Connection::CleanUpOnCall() +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::CleanUpOnCall [%p]\n",this); connectionState = ShuttingDownConnection; } -switch_status_t FSH323Connection::receive_message(switch_core_session_message_t *msg){ - h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); +switch_status_t FSH323Connection::receive_message(switch_core_session_message_t *msg) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::receive_message MSG = %d\n",msg->message_id); - - switch_channel_t *channel = switch_core_session_get_channel(m_fsSession); - switch (msg->message_id) { - case SWITCH_MESSAGE_INDICATE_BRIDGE: - case SWITCH_MESSAGE_INDICATE_UNBRIDGE: - case SWITCH_MESSAGE_INDICATE_AUDIO_SYNC: - switch_channel_set_private_flag(channel, CF_NEED_FLUSH); - break; - default: - break; - } + switch_channel_t *channel = switch_core_session_get_channel(m_fsSession); + h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); - switch (msg->message_id) { + switch (msg->message_id) { + case SWITCH_MESSAGE_INDICATE_BRIDGE: + case SWITCH_MESSAGE_INDICATE_UNBRIDGE: + case SWITCH_MESSAGE_INDICATE_AUDIO_SYNC: + switch_channel_set_private_flag(channel, CF_NEED_FLUSH); + break; + default: + break; + } + + switch (msg->message_id) { case SWITCH_MESSAGE_INDICATE_RINGING: { - AnsweringCall(AnswerCallPending); + AnsweringCall(AnswerCallPending); break; } case SWITCH_MESSAGE_INDICATE_DEFLECT: { + if (msg->string_arg != NULL) + TransferCall(msg->string_arg); break; } case SWITCH_MESSAGE_INDICATE_PROGRESS: { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_lock\n"); switch_mutex_lock(tech_pvt->h323_mutex); - if (m_txChennel && m_rxChennel){ + if (m_txChannel && m_rxChannel){ m_callOnPreAnswer = true; } switch_mutex_unlock(tech_pvt->h323_mutex); @@ -1349,7 +1470,7 @@ switch_status_t FSH323Connection::receive_message(switch_core_session_message_t AnsweringCall(AnswerCallPending); AnsweringCall(AnswerCallDeferredWithMedia); - if (m_txChennel && m_rxChennel){ + if (m_txChannel && m_rxChannel){ if (!switch_channel_test_flag(m_fsChannel, CF_EARLY_MEDIA)) { switch_channel_mark_pre_answered(m_fsChannel); } @@ -1370,13 +1491,13 @@ switch_status_t FSH323Connection::receive_message(switch_core_session_message_t AnsweringCall(H323Connection::AnswerCallNow); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Media started on connection [%p]\n",this); - if (m_txChennel && m_rxChennel){ + if (m_txChannel && m_rxChannel){ if (!switch_channel_test_flag(m_fsChannel, CF_EARLY_MEDIA)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-------------------->switch_channel_mark_answered(m_fsChannel) [%p]\n",this); switch_channel_mark_answered(m_fsChannel); } } else{ - m_ChennelAnswer = true; + m_ChannelAnswer = true; if (fastStartState == FastStartDisabled){ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-------------------->m_txAudioOpened.Wait START [%p]\n",this); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-------------------->m_rxAudioOpened.Wait START [%p]\n",this); @@ -1396,10 +1517,10 @@ switch_status_t FSH323Connection::receive_message(switch_core_session_message_t m_isRequst_fax = true; switch_mutex_unlock(tech_pvt->h323_mutex); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); - if (m_active_chennel_fax) + if (m_active_channel_fax) RequestModeChangeT38("T.38\nT.38"); else - m_active_chennel_fax = true; + m_active_channel_fax = true; break; } case SWITCH_MESSAGE_INDICATE_UDPTL_MODE:{ @@ -1422,57 +1543,143 @@ switch_status_t FSH323Connection::receive_message(switch_core_session_message_t default:{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Received message id = %d [%p]\n", msg->message_id,this); } - } - return SWITCH_STATUS_SUCCESS; + } + + return SWITCH_STATUS_SUCCESS; } -switch_status_t FSH323Connection::receive_event(switch_event_t *event){ +switch_status_t FSH323Connection::receive_event(switch_event_t *event) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::receive_event event id = %d [%p]\n",event->event_id,this); -// PTRACE(4, "mod_h323\tReceived event " << event->event_id << " on connection " << *this); - return SWITCH_STATUS_SUCCESS; +// PTRACE(4, "mod_h323\tReceived event " << event->event_id << " on connection " << *this); + + return SWITCH_STATUS_SUCCESS; } -switch_status_t FSH323Connection::state_change(){ +switch_status_t FSH323Connection::state_change() +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::state_change [%p]\n",this); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"State changed on connection [%p]\n",this); - return SWITCH_STATUS_SUCCESS; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"State changed on connection [%p]\n",this); + + return SWITCH_STATUS_SUCCESS; } -switch_status_t FSH323Connection::on_init(){ +switch_status_t FSH323Connection::on_init() +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::on_init [%p]\n",this); - switch_channel_t *channel = switch_core_session_get_channel(m_fsSession); - if (channel == NULL) { - return SWITCH_STATUS_FALSE; - } - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Started routing for connection [%p]\n",this); - switch_channel_set_state(channel, CS_ROUTING); - return SWITCH_STATUS_SUCCESS; + switch_channel_t *channel = switch_core_session_get_channel(m_fsSession); + if (channel == NULL) { + return SWITCH_STATUS_FALSE; + } + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Started routing for connection [%p]\n",this); + switch_channel_set_state(channel, CS_ROUTING); + + return SWITCH_STATUS_SUCCESS; } -switch_status_t FSH323Connection::on_exchange_media(){ +switch_status_t FSH323Connection::on_exchange_media() +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::on_exchange_media [%p]\n",this); - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } -switch_status_t FSH323Connection::on_soft_execute(){ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::on_soft_execute [%p]\n",this); +switch_status_t FSH323Connection::on_soft_execute() +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::on_soft_execute [%p]\n",this); - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } -switch_status_t FSH323Connection::read_audio_frame(switch_frame_t **frame, switch_io_flag_t flags, int stream_id){ +switch_status_t FSH323Connection::read_audio_frame(switch_frame_t **frame, switch_io_flag_t flags, int stream_id) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::read_audio_frame [%p]\n",this); + + /*switch_channel_t *channel = NULL; + h323_private_t *tech_pvt = NULL; + int payload = 0; + + channel = m_fsChannel; + assert(channel != NULL); + + tech_pvt = (h323_private_t *)switch_core_session_get_private(m_fsSession); + assert(tech_pvt != NULL); + + while (!(tech_pvt->read_codec.implementation && switch_rtp_ready(tech_pvt->rtp_session))) { + if (switch_channel_ready(channel)) { + switch_yield(10000); + } else { + PTRACE(4, "mod_h323\t<======FSH323Connection::read_audio_frame " << this); + return SWITCH_STATUS_GENERR; + } + } + + tech_pvt->read_frame.datalen = 0; + switch_set_flag_locked(tech_pvt, TFLAG_READING); + + switch_status_t status; + + switch_assert(tech_pvt->rtp_session != NULL); + tech_pvt->read_frame.datalen = 0; + + + while (tech_pvt->read_frame.datalen == 0) { + tech_pvt->read_frame.flags = SFF_NONE; + + status = switch_rtp_zerocopy_read_frame(tech_pvt->rtp_session, &tech_pvt->read_frame, flags); + if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK) { + PTRACE(4, "mod_h323\t<======FSH323Connection::read_audio_frame " << this); + return SWITCH_STATUS_FALSE; + } + + payload = tech_pvt->read_frame.payload; + + if (switch_rtp_has_dtmf(tech_pvt->rtp_session)) { + switch_dtmf_t dtmf = { 0 }; + switch_rtp_dequeue_dtmf(tech_pvt->rtp_session, &dtmf); + switch_channel_queue_dtmf(channel, &dtmf); + } + + if (tech_pvt->read_frame.datalen > 0) { + size_t bytes = 0; + int frames = 1; + + if (!switch_test_flag((&tech_pvt->read_frame), SFF_CNG)) { + if ((bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_packet)) { + frames = (tech_pvt->read_frame.datalen / bytes); + } + tech_pvt->read_frame.samples = (int) (frames * tech_pvt->read_codec.implementation->samples_per_packet); + } + break; + } + } + + switch_clear_flag_locked(tech_pvt, TFLAG_READING); + + if (tech_pvt->read_frame.datalen == 0) { + *frame = NULL; + PTRACE(4, "mod_h323\t<======FSH323Connection::read_audio_frame " << this); + return SWITCH_STATUS_GENERR; + } + + *frame = &tech_pvt->read_frame; + + PTRACE(4, "mod_h323\t<======FSH323Connection::read_audio_frame " << this); + return SWITCH_STATUS_SUCCESS;*/ + h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); tech_pvt->read_frame.flags = 0; switch_set_flag_locked(tech_pvt, TFLAG_READING); - if (!switch_channel_ready(m_fsChannel)) { + + if (!switch_channel_ready(m_fsChannel)) { switch_clear_flag_locked(tech_pvt, TFLAG_READING); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::read_audio_frame END\n"); - return SWITCH_STATUS_FALSE; - } + return SWITCH_STATUS_FALSE; + } + switch_mutex_lock(tech_pvt->h323_io_mutex); if (switch_test_flag(tech_pvt, TFLAG_IO)) { if (!switch_core_codec_ready(&tech_pvt->read_codec )) { @@ -1490,7 +1697,9 @@ switch_status_t FSH323Connection::read_audio_frame(switch_frame_t **frame, switc switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::read_audio_frame END\n\n"); return status; } - // PTRACE(4, "mod_h323\t--------->\n source = "<read_frame.source<< "\n packetlen = "<read_frame.packetlen<<"\n datalen = "<read_frame.datalen<<"\n samples = "<read_frame.samples<<"\n rate = "<read_frame.rate<<"\n payload = "<<(int)tech_pvt->read_frame.payload<<"\n timestamp = "<read_frame.timestamp<<"\n seq = "<read_frame.seq<<"\n ssrc = "<read_frame.ssrc); + +// PTRACE(4, "mod_h323\t--------->\n source = "<read_frame.source<< "\n packetlen = "<read_frame.packetlen<<"\n datalen = "<read_frame.datalen<<"\n samples = "<read_frame.samples<<"\n rate = "<read_frame.rate<<"\n payload = "<<(int)tech_pvt->read_frame.payload<<"\n timestamp = "<read_frame.timestamp<<"\n seq = "<read_frame.seq<<"\n ssrc = "<read_frame.ssrc); + if (tech_pvt->read_frame.flags & SFF_CNG) { tech_pvt->read_frame.buflen = sizeof(m_buf); tech_pvt->read_frame.data = m_buf; @@ -1500,34 +1709,62 @@ switch_status_t FSH323Connection::read_audio_frame(switch_frame_t **frame, switc tech_pvt->read_frame.m = SWITCH_FALSE; tech_pvt->read_frame.seq = 0; tech_pvt->read_frame.ssrc = 0; - tech_pvt->read_frame.codec = &tech_pvt->read_codec ; + /* The codec has alrady been set here */ //tech_pvt->read_frame.codec = &tech_pvt->read_codec ; } else { - tech_pvt->read_frame.codec = &tech_pvt->read_codec ; + /* The codec has alrady been set here */ //tech_pvt->read_frame.codec = &tech_pvt->read_codec ; } - }else{ + } else { switch_mutex_unlock(tech_pvt->h323_io_mutex); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"--------->TFLAG_IO OFF\n"); switch_yield(10000); } + switch_mutex_unlock(tech_pvt->h323_io_mutex); switch_clear_flag_locked(tech_pvt, TFLAG_READING); - *frame = &tech_pvt->read_frame; + *frame = &tech_pvt->read_frame; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::read_audio_frame END\n\n"); - return SWITCH_STATUS_SUCCESS; + + return SWITCH_STATUS_SUCCESS; } -switch_status_t FSH323Connection::write_audio_frame(switch_frame_t *frame, switch_io_flag_t flags, int stream_id){ +switch_status_t FSH323Connection::write_audio_frame(switch_frame_t *frame, switch_io_flag_t flags, int stream_id) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::write_audio_frame [%p]\n",this); + /*switch_channel_t *channel = NULL; + h323_private_t *tech_pvt = NULL; + switch_status_t status = SWITCH_STATUS_SUCCESS; + + channel = switch_core_session_get_channel(m_fsSession); + assert(channel != NULL); + + tech_pvt = (h323_private_t *)switch_core_session_get_private(m_fsSession); + assert(tech_pvt != NULL); + +#if SWITCH_BYTE_ORDER == __BIG_ENDIAN + if (switch_test_flag(tech_pvt, TFLAG_LINEAR)) { + switch_swap_linear(frame->data, (int) frame->datalen / 2); + } +#endif + + switch_set_flag_locked(tech_pvt, TFLAG_WRITING); + + switch_rtp_write_frame(tech_pvt->rtp_session, frame); + + switch_clear_flag_locked(tech_pvt, TFLAG_WRITING); + + PTRACE(4, "mod_h323\t<======FSH323Connection::write_audio_frame " << this); + return status;*/ + switch_status_t status = SWITCH_STATUS_SUCCESS; h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); switch_assert(tech_pvt != NULL); if (!switch_channel_ready(m_fsChannel)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::write_audio_frame END\n\n"); - return SWITCH_STATUS_FALSE; - } + return SWITCH_STATUS_FALSE; + } while (!(tech_pvt->read_codec.implementation && switch_rtp_ready(tech_pvt->rtp_session))) { if (switch_channel_ready(m_fsChannel)) { @@ -1545,120 +1782,119 @@ switch_status_t FSH323Connection::write_audio_frame(switch_frame_t *frame, switc if ((frame->flags & SFF_CNG)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::write_audio_frame END\n\n"); - return SWITCH_STATUS_SUCCESS; - } + return SWITCH_STATUS_SUCCESS; + } + switch_set_flag_locked(tech_pvt, TFLAG_WRITING); - if (switch_rtp_write_frame(tech_pvt->rtp_session, frame)< 0) { + if (switch_rtp_write_frame(tech_pvt->rtp_session, frame) < 0) { status = SWITCH_STATUS_GENERR; } switch_clear_flag_locked(tech_pvt, TFLAG_WRITING); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::write_audio_frame END\n\n"); + return status; } -switch_status_t FSH323Connection::read_video_frame(switch_frame_t **frame, switch_io_flag_t flag, int stream_id){ +switch_status_t FSH323Connection::read_video_frame(switch_frame_t **frame, switch_io_flag_t flag, int stream_id) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::read_video_frame [%p]\n",this); - + return SWITCH_STATUS_FALSE; /* Not yet implemented */ } -switch_status_t FSH323Connection::write_video_frame(switch_frame_t *frame, switch_io_flag_t flag, int stream_id){ +switch_status_t FSH323Connection::write_video_frame(switch_frame_t *frame, switch_io_flag_t flag, int stream_id) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323Connection::write_video_frame [%p]\n",this); + return SWITCH_STATUS_FALSE; /* Not yet implemented */ } /////////////////////////////////////////////////////////////////////// -FSH323_ExternalRTPChannel::FSH323_ExternalRTPChannel( - FSH323Connection& connection, - const H323Capability& capability, - Directions direction, - unsigned sessionID, - const PIPSocket::Address& ip, - WORD dataPort) - : H323_ExternalRTPChannel(connection, capability, direction, sessionID,ip,dataPort) +FSH323_ExternalRTPChannel::FSH323_ExternalRTPChannel(FSH323Connection& connection, + const H323Capability& capability, + Directions direction, + unsigned sessionID, + const PIPSocket::Address& ip, + WORD dataPort) + : H323_ExternalRTPChannel(connection, capability, direction, sessionID,ip,dataPort) , m_conn(&connection) , m_fsSession(connection.GetSession()) , m_capability(&capability) , m_RTPlocalPort(dataPort) - , m_sessionID(sessionID){ - - h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); + , m_sessionID(sessionID) +{ m_RTPlocalIP = (const char *)ip.AsString(); SetExternalAddress(H323TransportAddress(ip, dataPort), H323TransportAddress(ip, dataPort+1)); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::FSH323_ExternalRTPChannel sessionID = %d :%s addr = %s:%d [%p]\n",sessionID,GetDirections[GetDirection()],(const char*)m_RTPlocalIP,m_RTPlocalPort,this); - - memset(&m_readFrame, 0, sizeof(m_readFrame)); - m_readFrame.codec = m_switchCodec; - m_readFrame.flags = SFF_RAW_RTP; - + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::FSH323_ExternalRTPChannel sessionID = %d :%s addr = %s:%d [%p]\n",sessionID,GetDirections[GetDirection()],(const char*)m_RTPlocalIP,m_RTPlocalPort,this); + m_fsChannel = switch_core_session_get_channel(m_fsSession); - //SetExternalAddress(H323TransportAddress(localIpAddress, m_RTPlocalPort), H323TransportAddress(localIpAddress, m_RTPlocalPort+1)); + //SetExternalAddress(H323TransportAddress(localIpAddress, m_RTPlocalPort), H323TransportAddress(localIpAddress, m_RTPlocalPort+1)); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------->capability.GetPayloadType() return = %s\n",((capability.GetPayloadType() <= RTP_DataFrame::LastKnownPayloadType)?PayloadTypesNames[capability.GetPayloadType()]:"[pt=128]")); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------->capability.GetFormatName() return = %s\n",(const char*)(capability.GetFormatName())); PString fname((const char *)capability.GetFormatName()); - if (fname.Find("{sw}") == (fname.GetLength() - 4)) + if (fname.Find("{sw}") == (fname.GetLength() - 4)) fname = fname.Mid(0,fname.GetLength()-4); - if (fname.Find("{hw}") == (fname.GetLength() - 4)) + if (fname.Find("{hw}") == (fname.GetLength() - 4)) fname = fname.Mid(0,fname.GetLength()-4); OpalMediaFormat format(fname, FALSE); m_format = &format; - payloadCode = format.GetPayloadType(); + payloadCode = (BYTE)format.GetPayloadType(); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------->payloadCode = %d\n",(int)payloadCode); } -FSH323_ExternalRTPChannel::~FSH323_ExternalRTPChannel(){ - h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::~FSH323_ExternalRTPChannel %s [%p]\n",GetDirections[GetDirection()],this); +FSH323_ExternalRTPChannel::~FSH323_ExternalRTPChannel() +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::~FSH323_ExternalRTPChannel %s [%p]\n",GetDirections[GetDirection()],this); if (m_rtp_resetting) { switch_core_session_unlock_codec_read(m_fsSession); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",m_fsSession); switch_core_session_unlock_codec_write(m_fsSession); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_write [%p]\n",m_fsSession); } - } -PBoolean FSH323_ExternalRTPChannel::Start(){ +PBoolean FSH323_ExternalRTPChannel::Start() +{ h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(m_fsSession); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_lock\n"); switch_mutex_lock(tech_pvt->h323_mutex); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::Start() [%p]\n",this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::Start() [%p]\n",this); + const char *err = NULL; switch_rtp_flag_t flags; char * timer_name = NULL; const char *var; - - + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->m_sessionID = %d m_active_sessionID = %d\n",sessionID,m_conn->m_active_sessionID); - if (!(m_conn && H323_ExternalRTPChannel::Start())){ + if (!(m_conn && H323_ExternalRTPChannel::Start())) { switch_mutex_unlock(tech_pvt->h323_mutex); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); return false; } - if ((tech_pvt->me == NULL)||((tech_pvt->me != NULL) && tech_pvt->me->m_channel_hangup)){ + if ((tech_pvt->me == NULL) || ((tech_pvt->me != NULL) && tech_pvt->me->m_channel_hangup)) { switch_mutex_unlock(tech_pvt->h323_mutex); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); return false; } - if ((m_conn->m_active_sessionID != 0) && (m_conn->m_active_sessionID != sessionID)){ + if ((m_conn->m_active_sessionID != 0) && (m_conn->m_active_sessionID != sessionID)) { if (switch_core_codec_ready(&tech_pvt->read_codec) || switch_core_codec_ready(&tech_pvt->write_codec)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->Changing Codec to %s\n",(const char*)GetH245CodecName(m_capability)); - m_conn->m_rxChennel = false; - m_conn->m_txChennel = false; + m_conn->m_rxChannel = false; + m_conn->m_txChannel = false; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_lock_codec_read [%p]\n",m_fsSession); switch_core_session_lock_codec_read(m_fsSession); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_lock_codec_write [%p]\n",m_fsSession); switch_core_session_lock_codec_write(m_fsSession); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_io_mutex_lock\n"); switch_mutex_lock(tech_pvt->h323_io_mutex); - switch_clear_flag_locked(tech_pvt, TFLAG_IO); + switch_clear_flag_locked(tech_pvt, TFLAG_IO); switch_mutex_unlock(tech_pvt->h323_io_mutex); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_io_mutex_unlock\n"); m_conn->m_rtp_resetting = 1; @@ -1674,8 +1910,13 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ } } m_conn->m_active_sessionID = sessionID; - bool isAudio; + bool isAudio = false; + switch_codec_t *codec = NULL; unsigned m_codec_ms = m_capability->GetTxFramesInPacket(); + + if (mod_h323_globals.ptime_override_value > -1) + m_codec_ms = mod_h323_globals.ptime_override_value; + switch (m_capability->GetMainType()){ case H323Capability::e_Audio:{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------------->H323Capability::e_Audio\n"); @@ -1696,7 +1937,6 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ } default:break; } - H323Codec *codec = GetCodec(); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->GetFrameSize() return = %u\n",(unsigned)m_format->GetFrameSize()); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->GetFrameTime() return = %u\n",m_format->GetFrameTime()); @@ -1705,73 +1945,77 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->m_capability->GetFormatName() return = %s\n",(const char*)(m_capability->GetFormatName())); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->GetH245CodecName() return = %s\n",(const char*)GetH245CodecName(m_capability)); - if (GetDirection() == IsReceiver){ - m_switchCodec = isAudio ? &tech_pvt->read_codec : &tech_pvt->vid_read_codec; - m_switchTimer = isAudio ? &tech_pvt->read_timer : &tech_pvt->vid_read_timer; - m_conn->m_rxChennel = true; - }else{ - m_switchCodec = isAudio ? &tech_pvt->write_codec : &tech_pvt->vid_write_codec; - m_conn->m_txChennel = true; - if (m_conn->m_callOnPreAnswer){ - m_switchCodec = isAudio ? &tech_pvt->read_codec : &tech_pvt->vid_read_codec; - m_switchTimer = isAudio ? &tech_pvt->read_timer : &tech_pvt->vid_read_timer; + if (GetDirection() == IsReceiver) { + codec = isAudio ? &tech_pvt->read_codec : &tech_pvt->vid_read_codec; + //m_switchTimer = isAudio ? &tech_pvt->read_timer : &tech_pvt->vid_read_timer; + m_conn->m_rxChannel = true; + } else { + codec = isAudio ? &tech_pvt->write_codec : &tech_pvt->vid_write_codec; + m_conn->m_txChannel = true; + if (m_conn->m_callOnPreAnswer) { + codec = isAudio ? &tech_pvt->read_codec : &tech_pvt->vid_read_codec; + //m_switchTimer = isAudio ? &tech_pvt->read_timer : &tech_pvt->vid_read_timer; } } - if (switch_core_codec_init(m_switchCodec, GetH245CodecName(m_capability), NULL, // FMTP - 8000, m_codec_ms, 1, // Channels - SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL, // Settings - switch_core_session_get_pool(m_fsSession)) != SWITCH_STATUS_SUCCESS) { + tech_pvt->read_frame.codec = &tech_pvt->read_codec; /* Set codec here - no need to set it every time a frame is read */ + + if (switch_core_codec_init(codec, GetH245CodecName(m_capability), NULL, // FMTP + 8000, m_codec_ms, 1, // Channels + SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL, // Settings + switch_core_session_get_pool(m_fsSession)) != SWITCH_STATUS_SUCCESS) { - if (switch_core_codec_init(m_switchCodec, GetH245CodecName(m_capability), NULL, // FMTP - 8000, 0, 1, // Channels - SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL, // Settings - switch_core_session_get_pool(m_fsSession)) != SWITCH_STATUS_SUCCESS) { + if (switch_core_codec_init(codec, GetH245CodecName(m_capability), NULL, // FMTP + 8000, 0, 1, // Channels + SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL, // Settings + switch_core_session_get_pool(m_fsSession)) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,"%s Cannot initialise %s %s codec for connection [%p]\n",switch_channel_get_name(m_fsChannel), ((GetDirection() == IsReceiver)? " read" : " write") , GetMainTypes[m_capability->GetMainType()],(const char*)(m_capability->GetFormatName()),this); - switch_channel_hangup(m_fsChannel, SWITCH_CAUSE_INCOMPATIBLE_DESTINATION); + switch_channel_hangup(m_fsChannel, SWITCH_CAUSE_INCOMPATIBLE_DESTINATION); switch_mutex_unlock(tech_pvt->h323_mutex); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); - return false; - } + return false; + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,"%s Unsupported ptime of %u on %s %s codec %s for connection [%p]\n",switch_channel_get_name(m_fsChannel),m_codec_ms,((GetDirection() == IsReceiver)? " read" : " write") - ,GetMainTypes[m_capability->GetMainType()],(const char*)(m_capability->GetFormatName()),this); - } + , GetMainTypes[m_capability->GetMainType()],(const char*)(m_capability->GetFormatName()),this); + } - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,"%s initialise %s codec %s for connection [%p]\n",switch_channel_get_name(m_fsChannel),((GetDirection() == IsReceiver)? " read" : " write") - ,GetMainTypes[m_capability->GetMainType()],(const char*)(m_capability->GetFormatName()),this); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"%s initialise %s codec %s for connection [%p]\n",switch_channel_get_name(m_fsChannel),((GetDirection() == IsReceiver)? " read" : " write") + , GetMainTypes[m_capability->GetMainType()],(const char*)(m_capability->GetFormatName()),this); - - if (GetDirection() == IsReceiver) { - m_readFrame.rate = tech_pvt->read_codec.implementation->actual_samples_per_second; - - if (isAudio) { - switch_core_session_set_read_codec(m_fsSession, m_switchCodec); - if (switch_core_timer_init(m_switchTimer, - "soft", - m_switchCodec->implementation->microseconds_per_packet / 1000, - m_switchCodec->implementation->samples_per_packet, - switch_core_session_get_pool(m_fsSession)) != SWITCH_STATUS_SUCCESS) { - switch_core_codec_destroy(m_switchCodec); - m_switchCodec = NULL; + if (GetDirection() == IsReceiver) { + //m_readFrame.rate = tech_pvt->read_codec.implementation->actual_samples_per_second; + + if (isAudio) { + switch_core_session_set_read_codec(m_fsSession, codec); + /*if (switch_core_timer_init(m_switchTimer, + "soft", + codec->implementation->microseconds_per_packet / 1000, + codec->implementation->samples_per_packet, + switch_core_session_get_pool(m_fsSession)) != SWITCH_STATUS_SUCCESS) { + + switch_core_codec_destroy(codec); + codec = NULL; switch_mutex_unlock(tech_pvt->h323_mutex); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); - return false; - } - switch_channel_set_variable(m_fsChannel,"timer_name","soft"); - if (m_conn->m_ChennelProgress) - switch_core_session_set_write_codec(m_fsSession, m_switchCodec); - } else { - switch_core_session_set_video_read_codec(m_fsSession, m_switchCodec); - switch_channel_set_flag(m_fsChannel, CF_VIDEO); - } - } else { - if (isAudio) { - switch_core_session_set_write_codec(m_fsSession, m_switchCodec); + return false; + } + switch_channel_set_variable(m_fsChannel,"timer_name", "soft");*/ + if (m_conn->m_ChannelProgress) + switch_core_session_set_write_codec(m_fsSession, codec); + } else { + switch_core_session_set_video_read_codec(m_fsSession, codec); + switch_channel_set_flag(m_fsChannel, CF_VIDEO); + } + } else { + if (isAudio) { + switch_core_session_set_write_codec(m_fsSession, codec); if (m_conn->m_callOnPreAnswer){ - m_readFrame.rate = tech_pvt->read_codec.implementation->actual_samples_per_second; - switch_core_session_set_read_codec(m_fsSession, m_switchCodec); - if (switch_core_timer_init(m_switchTimer, + //m_readFrame.rate = tech_pvt->read_codec.implementation->actual_samples_per_second; + switch_core_session_set_read_codec(m_fsSession, codec); + /*if (switch_core_timer_init(m_switchTimer, "soft", m_switchCodec->implementation->microseconds_per_packet / 1000, m_switchCodec->implementation->samples_per_packet, @@ -1782,26 +2026,26 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); return false; } - switch_channel_set_variable(m_fsChannel,"timer_name","soft"); + switch_channel_set_variable(m_fsChannel,"timer_name","soft");*/ } - } else { - switch_core_session_set_video_write_codec(m_fsSession, m_switchCodec); - switch_channel_set_flag(m_fsChannel, CF_VIDEO); - } - } + } else { + switch_core_session_set_video_write_codec(m_fsSession, codec); + switch_channel_set_flag(m_fsChannel, CF_VIDEO); + } + } -// PTRACE(4, "mod_h323\tSet " << ((GetDirection() == IsReceiver)? " read" : " write") << ' ' -// << m_capability->GetMainType() << " codec to << " << m_capability << " for connection " << *this); +// PTRACE(4, "mod_h323\tSet " << ((GetDirection() == IsReceiver)? " read" : " write") << ' ' +// << m_capability->GetMainType() << " codec to << " << m_capability << " for connection " << *this); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Set %s %s codec to %s for connection [%p]\n",((GetDirection() == IsReceiver)? " read" : " write") ,GetMainTypes[m_capability->GetMainType()],(const char*)m_capability->GetFormatName(),this); PIPSocket::Address remoteIpAddress; - GetRemoteAddress(remoteIpAddress,m_RTPremotePort); + GetRemoteAddress(remoteIpAddress,m_RTPremotePort); m_RTPremoteIP = (const char *)remoteIpAddress.AsString(); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->tech_pvt->rtp_session = [%p]\n",tech_pvt->rtp_session); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->samples_per_packet = %lu\n",m_switchCodec->implementation->samples_per_packet); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->actual_samples_per_second = %lu\n",m_switchCodec->implementation->actual_samples_per_second); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->samples_per_packet = %lu\n", codec->implementation->samples_per_packet); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->actual_samples_per_second = %lu\n", codec->implementation->actual_samples_per_second); bool ch_port = false; if (tech_pvt->rtp_session != NULL){ @@ -1824,25 +2068,35 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ if ((!m_conn->m_startRTP)) { flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_DATAWAIT|SWITCH_RTP_FLAG_AUTO_CNG|SWITCH_RTP_FLAG_RAW_WRITE); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->timer_name = %s\n",switch_channel_get_variable(m_fsChannel, "timer_name")); - if ((var = switch_channel_get_variable(m_fsChannel, "timer_name"))) { - timer_name = (char *) var; + + if (mod_h323_globals.use_rtp_timer) { + flags |= SWITCH_RTP_FLAG_USE_TIMER; + timer_name = mod_h323_globals.rtp_timer_name; + } else { + if ((var = switch_channel_get_variable(m_fsChannel, "timer_name"))) { + timer_name = (char *) var; + flags |= SWITCH_RTP_FLAG_USE_TIMER; + } } - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->timer_name = %s\n",timer_name); + + if (timer_name) + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------->timer_name = %s\n", timer_name); + tech_pvt->rtp_session = switch_rtp_new((const char *)m_RTPlocalIP, - m_RTPlocalPort, - (const char *)m_RTPremoteIP, - m_RTPremotePort, - (switch_payload_t)payloadCode, - m_switchCodec->implementation->samples_per_packet, - m_codec_ms * 1000, - (switch_rtp_flag_t) flags, timer_name, &err, - switch_core_session_get_pool(m_fsSession)); + m_RTPlocalPort, + (const char *)m_RTPremoteIP, + m_RTPremotePort, + (switch_payload_t)payloadCode, + codec->implementation->samples_per_packet, + codec->implementation->microseconds_per_packet, + flags, timer_name, &err, + switch_core_session_get_pool(m_fsSession)); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------------->tech_pvt->rtp_session = %p\n",tech_pvt->rtp_session); m_conn->m_startRTP = true; if (switch_rtp_ready(tech_pvt->rtp_session)) { switch_channel_set_flag(m_fsChannel, CF_FS_RTP); - }else{ + } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "AUDIO RTP REPORTS ERROR: [%s]\n", switch_str_nil(err)); switch_channel_hangup(m_fsChannel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); switch_mutex_unlock(tech_pvt->h323_mutex); @@ -1850,6 +2104,7 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ return SWITCH_STATUS_FALSE; } } + if (ch_port){ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_io_mutex_lock\n"); switch_mutex_lock(tech_pvt->h323_io_mutex); @@ -1859,8 +2114,8 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ switch_core_session_unlock_codec_read(m_fsSession); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",m_fsSession); } - - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->External RTP address %s:%u\n",(const char*)m_RTPremoteIP,m_RTPremotePort); + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->External RTP address %s:%u\n",(const char*)m_RTPremoteIP,m_RTPremotePort); if (GetDirection() == IsReceiver) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_io_mutex_lock\n"); @@ -1871,35 +2126,35 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ } if (m_conn->m_rtp_resetting) { - if (GetDirection() == IsReceiver){ + if (GetDirection() == IsReceiver) { switch_core_session_unlock_codec_read(m_fsSession); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",m_fsSession); - }else{ + } else { switch_core_session_unlock_codec_write(m_fsSession); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_write [%p]\n",m_fsSession); - if (m_conn->m_callOnPreAnswer){ + if (m_conn->m_callOnPreAnswer) { switch_core_session_unlock_codec_read(m_fsSession); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",m_fsSession); } } } - if (GetDirection() == IsReceiver) m_conn->m_rxAudioOpened.Signal(); - else m_conn->m_txAudioOpened.Signal(); + if (GetDirection() == IsReceiver) + m_conn->m_rxAudioOpened.Signal(); + else + m_conn->m_txAudioOpened.Signal(); - if ( m_conn->m_ChennelAnswer && m_conn->m_rxChennel && m_conn->m_txChennel){ - switch_channel_mark_answered(m_fsChannel); - } + if (m_conn->m_ChannelAnswer && m_conn->m_rxChannel && m_conn->m_txChannel) + switch_channel_mark_answered(m_fsChannel); - if ((m_conn->m_ChennelProgress && m_conn->m_rxChennel)||(m_conn->m_callOnPreAnswer && m_conn->m_txChennel)){ + if ((m_conn->m_ChannelProgress && m_conn->m_rxChannel)||(m_conn->m_callOnPreAnswer && m_conn->m_txChannel)) switch_channel_mark_pre_answered(m_fsChannel); - } - - if ((m_capability->GetMainType() == H323Capability::e_Data) && m_conn->m_rxChennel && m_conn->m_txChennel ) { + + if (m_capability->GetMainType() == H323Capability::e_Data && m_conn->m_rxChannel && m_conn->m_txChannel) { const char *uuid = switch_channel_get_variable(m_fsChannel, SWITCH_SIGNAL_BOND_VARIABLE); if (uuid != NULL){ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------------------->switch_rtp_udptl_mode\n"); - switch_rtp_udptl_mode(tech_pvt->rtp_session); + switch_rtp_udptl_mode(tech_pvt->rtp_session); switch_core_session_message_t msg = { 0 }; msg.from = switch_channel_get_name(m_fsChannel); msg.message_id = SWITCH_MESSAGE_INDICATE_UDPTL_MODE; @@ -1908,96 +2163,101 @@ PBoolean FSH323_ExternalRTPChannel::Start(){ } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); switch_mutex_unlock(tech_pvt->h323_mutex); + return true; } - -PBoolean FSH323_ExternalRTPChannel::OnReceivedPDU( - const H245_H2250LogicalChannelParameters& param, - unsigned& errorCode){ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::OnReceivedPDU [%p]\n",this); +PBoolean FSH323_ExternalRTPChannel::OnReceivedPDU(const H245_H2250LogicalChannelParameters& param, unsigned& errorCode) +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::OnReceivedPDU [%p]\n",this); - if (!H323_ExternalRTPChannel::OnReceivedPDU(param,errorCode)) + if (!H323_ExternalRTPChannel::OnReceivedPDU(param,errorCode)) return true; - PIPSocket::Address remoteIpAddress; - WORD remotePort; - GetRemoteAddress(remoteIpAddress,remotePort); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Remote RTP address %s:%u\n",(const char *)remoteIpAddress.AsString(),remotePort); - m_conn->setRemoteAddress((const char *)remoteIpAddress.AsString(), remotePort); - return true; + PIPSocket::Address remoteIpAddress; + WORD remotePort; + GetRemoteAddress(remoteIpAddress,remotePort); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"Remote RTP address %s:%u\n",(const char *)remoteIpAddress.AsString(),remotePort); + m_conn->setRemoteAddress((const char *)remoteIpAddress.AsString(), remotePort); + return true; } -PBoolean FSH323_ExternalRTPChannel::OnSendingPDU(H245_H2250LogicalChannelParameters& param){ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"FSH323_ExternalRTPChannel::OnSendingPDU [%p]\n",this); - return H323_ExternalRTPChannel::OnSendingPDU(param); +PBoolean FSH323_ExternalRTPChannel::OnSendingPDU(H245_H2250LogicalChannelParameters& param) +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"FSH323_ExternalRTPChannel::OnSendingPDU [%p]\n",this); + return H323_ExternalRTPChannel::OnSendingPDU(param); } -PBoolean FSH323_ExternalRTPChannel::OnReceivedAckPDU(const H245_H2250LogicalChannelAckParameters& param){ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::OnReceivedAckPDU [%p]\n",this); - return H323_ExternalRTPChannel::OnReceivedAckPDU(param); +PBoolean FSH323_ExternalRTPChannel::OnReceivedAckPDU(const H245_H2250LogicalChannelAckParameters& param) +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::OnReceivedAckPDU [%p]\n",this); + return H323_ExternalRTPChannel::OnReceivedAckPDU(param); } -void FSH323_ExternalRTPChannel::OnSendOpenAck(H245_H2250LogicalChannelAckParameters& param){ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::OnSendOpenAck [%p]\n",this); - H323_ExternalRTPChannel::OnSendOpenAck(param); +void FSH323_ExternalRTPChannel::OnSendOpenAck(H245_H2250LogicalChannelAckParameters& param) +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323_ExternalRTPChannel::OnSendOpenAck [%p]\n",this); + H323_ExternalRTPChannel::OnSendOpenAck(param); } -FSH323Connection * FSH323EndPoint::FSMakeCall(const PString & dest, void *userData){ +FSH323Connection * FSH323EndPoint::FSMakeCall(const PString & dest, void *userData) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>FSH323EndPoint::FSMakeCall DST NUMBER = %s [%p]\n",(const char*)dest,this); FSH323Connection * connection; PString token; H323Transport *transport = NULL; - if (listeners.GetSize() > 0) { - H323TransportAddress taddr = listeners[0].GetTransportAddress(); - PIPSocket::Address addr; - WORD port; - if (taddr.GetIpAndPort(addr, port)) { - if (addr) { - transport = new H323TransportTCP(*this, addr,false); - if (!transport) - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"----> Unable to create transport for outgoing call\n"); - } - } else - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"----> Unable to get address and port\n"); + if (listeners.GetSize() > 0) { + H323TransportAddress taddr = listeners[0].GetTransportAddress(); + PIPSocket::Address addr; + WORD port; + if (taddr.GetIpAndPort(addr, port)) { + if (addr) { + transport = new H323TransportTCP(*this, addr,false); + if (!transport) + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"----> Unable to create transport for outgoing call\n"); + } + } else + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"----> Unable to get address and port\n"); } - if (!(connection = (FSH323Connection *)H323EndPoint::MakeCall(dest, token, userData))) { - return NULL; - } + if (!(connection = (FSH323Connection *)H323EndPoint::MakeCall(dest, token, userData))) { + return NULL; + } + return connection; } - static switch_call_cause_t create_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_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags, switch_call_cause_t *cancel_cause) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>create_outgoing_channel DST NUMBER = %s\n",outbound_profile->destination_number); FSH323Connection * connection; - if (h323_process == NULL) { - return SWITCH_CAUSE_CRASH; - } + if (h323_process == NULL) { + return SWITCH_CAUSE_CRASH; + } FSH323EndPoint & ep = h323_process->GetH323EndPoint(); if (!(connection = ep.FSMakeCall(outbound_profile->destination_number,outbound_profile))){ return SWITCH_CAUSE_PROTOCOL_ERROR; } - *new_session = connection->GetSession(); + *new_session = connection->GetSession(); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"--------->GetSession() return = [%p]\n",connection->GetSession()); - return SWITCH_CAUSE_SUCCESS; + return SWITCH_CAUSE_SUCCESS; } -static switch_status_t on_destroy(switch_core_session_t *session){ +static switch_status_t on_destroy(switch_core_session_t *session) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>on_destroy\n"); - h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(session); + h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(session); - if (tech_pvt) { + if (tech_pvt) { if (tech_pvt->read_codec.implementation) { switch_core_codec_destroy(&tech_pvt->read_codec); } @@ -2016,20 +2276,23 @@ static switch_status_t on_destroy(switch_core_session_t *session){ if (tech_pvt->vid_read_timer.timer_interface) { switch_core_timer_destroy(&tech_pvt->vid_read_timer); } - } + } - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; } -static switch_status_t on_hangup(switch_core_session_t *session){ +static switch_status_t on_hangup(switch_core_session_t *session) +{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"======>switch_status_t on_hangup [%p]\n",session); + + switch_channel_t *channel = switch_core_session_get_channel(session); h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(session); - - - switch_channel_t *channel = switch_core_session_get_channel(session); - if (tech_pvt->me) { - if (tech_pvt->me->m_rtp_resetting == 1) { + FSH323Connection *me = tech_pvt->me; + tech_pvt->me = NULL; + + if (me) { + if (me->m_rtp_resetting == 1) { switch_core_session_unlock_codec_read(session); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->switch_core_session_unlock_codec_read [%p]\n",session); switch_core_session_unlock_codec_write(session); @@ -2037,46 +2300,39 @@ static switch_status_t on_hangup(switch_core_session_t *session){ } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_lock\n"); switch_mutex_lock(tech_pvt->h323_mutex); - tech_pvt->me->m_channel_hangup = true; + me->m_channel_hangup = true; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); switch_mutex_unlock(tech_pvt->h323_mutex); - if (tech_pvt->me->TryLock() == 1){ - tech_pvt->me->CloseAllLogicalChannels(true); - tech_pvt->me->CloseAllLogicalChannels(false); - tech_pvt->me->Unlock(); - } - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"----->%s\n",(const char *)(tech_pvt->me->GetCallToken())); - Q931::CauseValues cause = (Q931::CauseValues)switch_channel_get_cause_q850(channel); - int trylock = tech_pvt->me->TryLock(); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-----> () = %d\n",trylock); - if (trylock == 1){ - const PString currentToken(tech_pvt->me->GetCallToken()); - FSH323Connection *connection = (FSH323Connection *)tech_pvt->me->GetEndPoint()->FindConnectionWithLock(currentToken); + if (me->TryLock() == 1) { + me->CloseAllLogicalChannels(true); + me->CloseAllLogicalChannels(false); + me->Unlock(); + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"----->%s\n",(const char *)(me->GetCallToken())); + Q931::CauseValues cause = (Q931::CauseValues)switch_channel_get_cause_q850(channel); + int trylock = me->TryLock(); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-----> () = %d\n",trylock); + if (trylock == 1) { + const PString currentToken(me->GetCallToken()); + FSH323Connection *connection = (FSH323Connection *)me->GetEndPoint()->FindConnectionWithLock(currentToken); connection->Unlock(); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-----> UnLock()\n"); - tech_pvt->me->Unlock(); + me->Unlock(); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-----> UnLock()\n"); - }else if (trylock == -1){ - tech_pvt->me->Unlock(); + } else if (trylock == -1) { + me->Unlock(); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"-----> UnLock()\n"); } - tech_pvt->me->SetQ931Cause(cause); - tech_pvt->me->ClearCallSynchronous(NULL, H323TranslateToCallEndReason(cause, UINT_MAX)); - tech_pvt->me = NULL; + me->SetQ931Cause(cause); + me->ClearCallSynchronous(NULL, H323TranslateToCallEndReason(cause, UINT_MAX)); // switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_lock\n"); // switch_mutex_lock(tech_pvt->h323_mutex); - } + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_lock\n"); switch_mutex_lock(tech_pvt->h323_mutex); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"------------->h323_mutex_unlock\n"); switch_mutex_unlock(tech_pvt->h323_mutex); - return SWITCH_STATUS_SUCCESS; + + return SWITCH_STATUS_SUCCESS; } - - - - - - - - diff --git a/src/mod/endpoints/mod_h323/mod_h323.h b/src/mod/endpoints/mod_h323/mod_h323.h index 9d8369ddfc..a88abf5301 100644 --- a/src/mod/endpoints/mod_h323/mod_h323.h +++ b/src/mod/endpoints/mod_h323/mod_h323.h @@ -1,4 +1,30 @@ - +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2005-2010, Anthony Minessale II + * + * Version: MPL 1.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * + * The Initial Developer of the Original Code is + * Anthony Minessale II + * Portions created by the Initial Developer are Copyright (C) + * the Initial Developer. All Rights Reserved. + * + * + * mod_h323.h -- H323 endpoint + * + */ #if defined(__GNUC__) && defined(HAVE_VISIBILITY) #pragma GCC visibility push(default) @@ -39,34 +65,34 @@ const char* const GetDirections[H323Channel::NumDirections+1] = { }; const char * const PayloadTypesNames[RTP_DataFrame::LastKnownPayloadType] = { - "PCMU", - "FS1016", - "G721", - "GSM", - "G7231", - "DVI4_8k", - "DVI4_16k", - "LPC", - "PCMA", - "G722", - "L16_Stereo", - "L16_Mono", - "G723", - "CN", - "MPA", - "G728", - "DVI4_11k", - "DVI4_22k", - "G729", - "CiscoCN", - NULL, NULL, NULL, NULL, NULL, - "CelB", - "JPEG", - NULL, NULL, NULL, NULL, - "H261", - "MPV", - "MP2T", - "H263" + "PCMU", + "FS1016", + "G721", + "GSM", + "G7231", + "DVI4_8k", + "DVI4_16k", + "LPC", + "PCMA", + "G722", + "L16_Stereo", + "L16_Mono", + "G723", + "CN", + "MPA", + "G728", + "DVI4_11k", + "DVI4_22k", + "G729", + "CiscoCN", + NULL, NULL, NULL, NULL, NULL, + "CelB", + "JPEG", + NULL, NULL, NULL, NULL, + "H261", + "MPV", + "MP2T", + "H263" }; @@ -94,7 +120,6 @@ const char* const GetMainTypes[H323Capability::e_NumMainTypes+1] = { "NumMainTypes" }; - extern void SetT38_IFP_PRE(); class OpalMediaFormat; class H245_T38FaxProfile; @@ -133,6 +158,9 @@ struct mod_h323_globals { char *codec_string; char *context; char *dialplan; + int use_rtp_timer; + char *rtp_timer_name; + int ptime_override_value; }; extern struct mod_h323_globals mod_h323_globals; @@ -161,24 +189,27 @@ typedef struct { #define DECLARE_CALLBACK0(name) \ static switch_status_t name(switch_core_session_t *session) { \ h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(session); \ - return tech_pvt && tech_pvt->me != NULL ? tech_pvt->me->name() : SWITCH_STATUS_FALSE; } \ + FSH323Connection *me = (tech_pvt && tech_pvt->me != NULL) ? tech_pvt->me : NULL; \ + return me != NULL ? me->name() : SWITCH_STATUS_FALSE; } \ switch_status_t name() #define DECLARE_CALLBACK1(name, type1, name1) \ static switch_status_t name(switch_core_session_t *session, type1 name1) { \ h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(session); \ - return tech_pvt && tech_pvt->me != NULL ? tech_pvt->me->name(name1) : SWITCH_STATUS_FALSE; } \ + FSH323Connection *me = (tech_pvt && tech_pvt->me != NULL) ? tech_pvt->me : NULL; \ + return me != NULL ? me->name(name1) : SWITCH_STATUS_FALSE; } \ switch_status_t name(type1 name1) #define DECLARE_CALLBACK3(name, type1, name1, type2, name2, type3, name3) \ static switch_status_t name(switch_core_session_t *session, type1 name1, type2 name2, type3 name3) { \ h323_private_t *tech_pvt = (h323_private_t *) switch_core_session_get_private(session); \ - return tech_pvt && tech_pvt->me != NULL ? tech_pvt->me->name(name1, name2, name3) : SWITCH_STATUS_FALSE; } \ + FSH323Connection *me = (tech_pvt && tech_pvt->me != NULL) ? tech_pvt->me : NULL; \ + return me != NULL ? me->name(name1, name2, name3) : SWITCH_STATUS_FALSE; } \ switch_status_t name(type1 name1, type2 name2, type3 name3) class FSH323EndPoint; -class FSProcess:public PLibraryProcess { - PCLASSINFO(FSProcess, PLibraryProcess); +class FSProcess:public PProcess { + PCLASSINFO(FSProcess, PProcess); public: FSProcess(); @@ -186,6 +217,8 @@ class FSProcess:public PLibraryProcess { bool Initialise(switch_loadable_module_interface_t *iface); + void Main() + { } FSH323EndPoint & GetH323EndPoint() const { return *m_h323endpoint; } protected: @@ -193,8 +226,9 @@ class FSProcess:public PLibraryProcess { }; struct FSListener { - FSListener() { - } PString name; + FSListener() + { } + PString name; H323ListenerTCP *listenAddress; PString localUserName; PString gatekeeper; @@ -210,13 +244,12 @@ class FSH323EndPoint:public H323EndPoint { ~FSH323EndPoint(); - /**Create a connection that uses the specified call. - */ + /* Create a connection that uses the specified call. */ virtual H323Connection *CreateConnection(unsigned callReference, void *userData, H323Transport * transport, H323SignalPDU * setupPDU); virtual bool OnSetGatewayPrefixes(PStringList & prefixes) const; bool Initialise(switch_loadable_module_interface_t *iface); - + switch_status_t ReadConfig(int reload); void StartGkClient(int retry, PString * gkAddress, PString * gkIdentifer, PString * gkInterface); @@ -224,8 +257,9 @@ class FSH323EndPoint:public H323EndPoint { switch_endpoint_interface_t *GetSwitchInterface() const { return m_freeswitch; - } FSH323Connection *FSMakeCall(const PString & dest, void *userData); - list < FSListener > m_listeners; + } + FSH323Connection *FSMakeCall(const PString & dest, void *userData); + list < FSListener > m_listeners; int m_ai; int m_pi; protected: @@ -274,8 +308,8 @@ class FSH323Connection:public H323Connection { ~FSH323Connection(); virtual H323Channel *CreateRealTimeLogicalChannel(const H323Capability & capability, - H323Channel::Directions dir, - unsigned sessionID, const H245_H2250LogicalChannelParameters * param, RTP_QOS * rtpqos = NULL); + H323Channel::Directions dir, + unsigned sessionID, const H245_H2250LogicalChannelParameters * param, RTP_QOS * rtpqos = NULL); virtual PBoolean OnStartLogicalChannel(H323Channel & channel); virtual PBoolean OnCreateLogicalChannel(const H323Capability & capability, H323Channel::Directions dir, unsigned &errorCode); virtual bool OnReceivedSignalSetup(const H323SignalPDU & setupPDU); @@ -313,32 +347,32 @@ class FSH323Connection:public H323Connection { void CleanUpOnCall(); DECLARE_CALLBACK0(on_init); - DECLARE_CALLBACK0(on_routing); - DECLARE_CALLBACK0(on_execute); - DECLARE_CALLBACK0(on_exchange_media); - DECLARE_CALLBACK0(on_soft_execute); - DECLARE_CALLBACK1(kill_channel, int, sig); - DECLARE_CALLBACK1(send_dtmf, const switch_dtmf_t *, dtmf); - DECLARE_CALLBACK1(receive_message, switch_core_session_message_t *, msg); - DECLARE_CALLBACK1(receive_event, switch_event_t *, event); - DECLARE_CALLBACK0(state_change); + DECLARE_CALLBACK0(on_routing); + DECLARE_CALLBACK0(on_execute); + DECLARE_CALLBACK0(on_exchange_media); + DECLARE_CALLBACK0(on_soft_execute); + DECLARE_CALLBACK1(kill_channel, int, sig); + DECLARE_CALLBACK1(send_dtmf, const switch_dtmf_t *, dtmf); + DECLARE_CALLBACK1(receive_message, switch_core_session_message_t *, msg); + DECLARE_CALLBACK1(receive_event, switch_event_t *, event); + DECLARE_CALLBACK0(state_change); - DECLARE_CALLBACK3(read_audio_frame, switch_frame_t **, frame, switch_io_flag_t, flags, int, stream_id); - DECLARE_CALLBACK3(write_audio_frame, switch_frame_t *, frame, switch_io_flag_t, flags, int, stream_id); - DECLARE_CALLBACK3(read_video_frame, switch_frame_t **, frame, switch_io_flag_t, flag, int, stream_id); - DECLARE_CALLBACK3(write_video_frame, switch_frame_t *, frame, switch_io_flag_t, flag, int, stream_id); + DECLARE_CALLBACK3(read_audio_frame, switch_frame_t **, frame, switch_io_flag_t, flags, int, stream_id); + DECLARE_CALLBACK3(write_audio_frame, switch_frame_t *, frame, switch_io_flag_t, flags, int, stream_id); + DECLARE_CALLBACK3(read_video_frame, switch_frame_t **, frame, switch_io_flag_t, flag, int, stream_id); + DECLARE_CALLBACK3(write_video_frame, switch_frame_t *, frame, switch_io_flag_t, flag, int, stream_id); bool m_callOnPreAnswer; bool m_startRTP; - bool m_rxChennel; - bool m_txChennel; - bool m_ChennelAnswer; - bool m_ChennelProgress; + bool m_rxChannel; + bool m_txChannel; + bool m_ChannelAnswer; + bool m_ChannelProgress; unsigned char m_select_dtmf; PSyncPoint m_rxAudioOpened; PSyncPoint m_txAudioOpened; unsigned m_active_sessionID; - bool m_active_chennel_fax; + bool m_active_channel_fax; int m_rtp_resetting; bool m_isRequst_fax; bool m_channel_hangup; @@ -350,7 +384,7 @@ class FSH323Connection:public H323Connection { switch_channel_t *m_fsChannel; PIPSocket::Address m_RTPlocalIP; WORD m_RTPlocalPort; - unsigned char m_buf[SWITCH_RECOMMENDED_BUFFER_SIZE]; + unsigned char m_buf[SWITCH_RECOMMENDED_BUFFER_SIZE]; }; @@ -358,10 +392,9 @@ class FSH323_ExternalRTPChannel:public H323_ExternalRTPChannel { PCLASSINFO(FSH323_ExternalRTPChannel, H323_ExternalRTPChannel); public: /* Create a new channel. */ - FSH323_ExternalRTPChannel(FSH323Connection & connection, - const H323Capability & capability, Directions direction, unsigned sessionID, const PIPSocket::Address & ip, WORD dataPort); + FSH323_ExternalRTPChannel(FSH323Connection & connection, const H323Capability & capability, Directions direction, unsigned sessionID, const PIPSocket::Address & ip, WORD dataPort); /* Destructor */ - ~FSH323_ExternalRTPChannel(); + ~FSH323_ExternalRTPChannel(); virtual PBoolean Start(); virtual PBoolean OnReceivedAckPDU(const H245_H2250LogicalChannelAckParameters & param); @@ -375,15 +408,12 @@ class FSH323_ExternalRTPChannel:public H323_ExternalRTPChannel { const H323Capability *m_capability; switch_core_session_t *m_fsSession; switch_channel_t *m_fsChannel; - switch_codec_t *m_switchCodec; OpalMediaFormat *m_format; - switch_frame_t m_readFrame; - switch_timer_t *m_switchTimer; PString m_RTPremoteIP; WORD m_RTPremotePort; PString m_RTPlocalIP; WORD m_RTPlocalPort; - BYTE payloadCode; + BYTE payloadCode; unsigned m_sessionID; int m_rtp_resetting; }; @@ -393,15 +423,20 @@ class BaseG7231Capab:public H323AudioCapability { public: BaseG7231Capab(const char *fname, bool annexA = true) : H323AudioCapability(7, 4), m_name(fname), m_aa(annexA) { - } virtual PObject *Clone() const { + } + virtual PObject *Clone() const { return new BaseG7231Capab(*this); - } virtual unsigned GetSubType() const { + } + virtual unsigned GetSubType() const { return H245_AudioCapability::e_g7231; - } virtual PString GetFormatName() const { + } + virtual PString GetFormatName() const { return m_name; - } virtual H323Codec *CreateCodec(H323Codec::Direction direction) const { + } + virtual H323Codec *CreateCodec(H323Codec::Direction direction) const { return 0; - } virtual Comparison Compare(const PObject & obj) const { + } + virtual Comparison Compare(const PObject & obj) const { Comparison res = H323AudioCapability::Compare(obj); if (res != EqualTo) return res; @@ -411,13 +446,15 @@ class BaseG7231Capab:public H323AudioCapability { if (m_aa && !aa) return GreaterThan; return EqualTo; - } virtual bool OnSendingPDU(H245_AudioCapability & pdu, unsigned packetSize) const { + } + virtual bool OnSendingPDU(H245_AudioCapability & pdu, unsigned packetSize) const { pdu.SetTag(GetSubType()); H245_AudioCapability_g7231 & g7231 = pdu; g7231.m_maxAl_sduAudioFrames = packetSize; g7231.m_silenceSuppression = m_aa; return true; - } virtual bool OnReceivedPDU(const H245_AudioCapability & pdu, unsigned &packetSize) { + } + virtual bool OnReceivedPDU(const H245_AudioCapability & pdu, unsigned &packetSize) { if (pdu.GetTag() != H245_AudioCapability::e_g7231) return false; const H245_AudioCapability_g7231 & g7231 = pdu; @@ -440,13 +477,13 @@ class BaseG729Capab:public H323AudioCapability { virtual PObject *Clone() const { return new BaseG729Capab(*this); - } + } virtual unsigned GetSubType() const { return m_type; - } + } virtual PString GetFormatName() const { return m_name; - } + } virtual H323Codec *CreateCodec(H323Codec::Direction direction) const { return 0; } @@ -462,23 +499,29 @@ class BaseGSM0610Cap:public H323AudioCapability { BaseGSM0610Cap(const char *fname, unsigned type = H245_AudioCapability::e_gsmFullRate) : H323AudioCapability(24, 2), m_name(fname), m_type(type), m_comfortNoise(0), m_scrambled(0) { - } virtual PObject *Clone() const { + } + virtual PObject *Clone() const { return new BaseGSM0610Cap(*this); - } virtual H323Codec *CreateCodec(H323Codec::Direction direction) const { + } + virtual H323Codec *CreateCodec(H323Codec::Direction direction) const { return 0; - } virtual unsigned GetSubType() const { + } + virtual unsigned GetSubType() const { return H245_AudioCapability::e_gsmFullRate; - } virtual PString GetFormatName() const { + } + virtual PString GetFormatName() const { return m_name; - } virtual bool OnSendingPDU(H245_AudioCapability & pdu, unsigned packetSize) const { + } + virtual bool OnSendingPDU(H245_AudioCapability & pdu, unsigned packetSize) const { pdu.SetTag(H245_AudioCapability::e_gsmFullRate); H245_GSMAudioCapability & gsm = pdu; gsm.m_audioUnitSize = packetSize * 33; gsm.m_comfortNoise = m_comfortNoise; gsm.m_scrambled = m_scrambled; return true; - } virtual bool OnReceivedPDU(const H245_AudioCapability & pdu, unsigned &packetSize) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"==============>BaseGSM0610Cap::OnReceivedPDU [%p]\n",this); + } + virtual bool OnReceivedPDU(const H245_AudioCapability & pdu, unsigned &packetSize) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"==============>BaseGSM0610Cap::OnReceivedPDU [%p]\n", this); if (pdu.GetTag() != H245_AudioCapability::e_gsmFullRate) return false; const H245_GSMAudioCapability & gsm = pdu; @@ -537,9 +580,9 @@ H323Channel * FSH323_T38Capability::CreateChannel( const H245_H2250LogicalChannelParameters * params) const { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,"FSH323_T38Capability::CreateChannel %p sessionID= %u direction=%s [%p]\n" - ,&connection - ,sessionID - ,GetDirections[direction]); + , &connection + , sessionID + , GetDirections[direction]); return connection.CreateRealTimeLogicalChannel(*this, direction, sessionID, params); } From 235f8124362b956335a9e748db25724758588dc4 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 23 Jul 2010 12:46:40 +0400 Subject: [PATCH 036/161] add missing param fax-old-asn in h323.conf.xml --- src/mod/endpoints/mod_h323/h323.conf.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mod/endpoints/mod_h323/h323.conf.xml b/src/mod/endpoints/mod_h323/h323.conf.xml index df2056767c..bf5929008b 100644 --- a/src/mod/endpoints/mod_h323/h323.conf.xml +++ b/src/mod/endpoints/mod_h323/h323.conf.xml @@ -18,6 +18,7 @@ + From 123c3bc4a71ee348c02b616ab33fa0e909fde8f8 Mon Sep 17 00:00:00 2001 From: cypromis Date: Fri, 23 Jul 2010 13:28:45 +0200 Subject: [PATCH 037/161] All ozmods are openzap modules so why list each and every one of them in the specfile ? --- freeswitch.spec | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/freeswitch.spec b/freeswitch.spec index e37b4790cb..099478092a 100644 --- a/freeswitch.spec +++ b/freeswitch.spec @@ -810,11 +810,7 @@ fi %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/zt.conf %{prefix}/lib/libopenzap.so* %{prefix}/mod/mod_openzap.so* -%{prefix}/mod/ozmod_analog.so* -%{prefix}/mod/ozmod_analog_em.so* -%{prefix}/mod/ozmod_isdn.so* -%{prefix}/mod/ozmod_skel.so* -%{prefix}/mod/ozmod_zt.so* +%{prefix}/mod/ozmod_*.so* ############################################################################################################################### # From 015bcaf67196d415b7bce54a2e1b22e36f5668a0 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Fri, 23 Jul 2010 09:12:48 -0500 Subject: [PATCH 038/161] MODENDP-301 Add mod_h323 to windows --- Freeswitch.2008.sln | 13 ++ .../endpoints/mod_h323/mod_h323_2008.vcproj | 169 ++++++++++++++++++ 2 files changed, 182 insertions(+) create mode 100644 src/mod/endpoints/mod_h323/mod_h323_2008.vcproj diff --git a/Freeswitch.2008.sln b/Freeswitch.2008.sln index 4dc23e8d4a..2547362fb0 100644 --- a/Freeswitch.2008.sln +++ b/Freeswitch.2008.sln @@ -933,6 +933,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_opal", "src\mod\endpoin {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_h323", "src\mod\endpoints\mod_h323\mod_h323_2008.vcproj", "{05C9FB27-480E-4D53-B3B7-7338E2514666}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_skinny", "src\mod\endpoints\mod_skinny\mod_skinny_2008.vcproj", "{CC1DD008-9406-448D-A0AD-33C3186CFADB}" ProjectSection(ProjectDependencies) = postProject {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} @@ -2380,6 +2385,13 @@ Global {05C9FB27-480E-4D53-B3B7-6338E2526666}.Debug|x64.ActiveCfg = Debug|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.Release|Win32.ActiveCfg = Release|Win32 {05C9FB27-480E-4D53-B3B7-6338E2526666}.Release|x64.ActiveCfg = Release|Win32 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.All|Win32.ActiveCfg = Release|Win32 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.All|Win32.Build.0 = Release|Win32 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.All|x64.ActiveCfg = Release|Win32 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.Debug|Win32.ActiveCfg = Debug|Win32 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.Debug|x64.ActiveCfg = Debug|Win32 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.Release|Win32.ActiveCfg = Release|Win32 + {05C9FB27-480E-4D53-B3B7-7338E2514666}.Release|x64.ActiveCfg = Release|Win32 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.All|Win32.ActiveCfg = Release|Win32 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.All|x64.ActiveCfg = Release|Win32 {CC1DD008-9406-448D-A0AD-33C3186CFADB}.Debug|Win32.ActiveCfg = Debug|Win32 @@ -2794,6 +2806,7 @@ Global {0DF3ABD0-DDC0-4265-B778-07C66780979B} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} {B3F424EC-3D8F-417C-B244-3919D5E1A577} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} {05C9FB27-480E-4D53-B3B7-6338E2526666} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} + {05C9FB27-480E-4D53-B3B7-7338E2514666} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} {CC1DD008-9406-448D-A0AD-33C3186CFADB} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} {C6E78A4C-DB1E-47F4-9B63-4DC27D86343F} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} {30A5B29C-983E-4580-9FD0-D647CCDCC7EB} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} diff --git a/src/mod/endpoints/mod_h323/mod_h323_2008.vcproj b/src/mod/endpoints/mod_h323/mod_h323_2008.vcproj new file mode 100644 index 0000000000..8246d73609 --- /dev/null +++ b/src/mod/endpoints/mod_h323/mod_h323_2008.vcproj @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From c98b863181699954651383659f220fb1e3d06627 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 23 Jul 2010 09:40:57 -0500 Subject: [PATCH 039/161] supress error message --- src/mod/applications/mod_dptools/mod_dptools.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c index 00dcda3c08..5a1b8c5d14 100755 --- a/src/mod/applications/mod_dptools/mod_dptools.c +++ b/src/mod/applications/mod_dptools/mod_dptools.c @@ -2818,6 +2818,7 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session, myflags |= SOF_NOBLOCK; } + switch_snprintf(stupid, sizeof(stupid), "user/%s", user); if (switch_stristr(stupid, d_dest)) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Waddya Daft? You almost called '%s' in an infinate loop!\n", @@ -2829,6 +2830,11 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session, const char *context; switch_caller_profile_t *cp; + if (var_event) { + switch_event_del_header(var_event, "origination_uuid"); + } + + new_channel = switch_core_session_get_channel(*new_session); if ((context = switch_channel_get_variable(new_channel, "user_context"))) { From 710376fbe8c7fb9b4ee6f5c301d362e2eb01c11c Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 23 Jul 2010 14:11:47 -0500 Subject: [PATCH 040/161] try to avoid skipping hangup hook --- .../mod_spidermonkey/mod_spidermonkey.c | 36 ++++++++++++------- src/switch_core.c | 1 + 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c index 177b5586a1..790afab1e7 100644 --- a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c +++ b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c @@ -1608,7 +1608,7 @@ static jsval check_hangup_hook(struct js_session *jss, jsval * rp) jsval ret = JS_TRUE; char *resp; - if (!jss->check_state && jss->on_hangup && (jss->hook_state == CS_HANGUP || jss->hook_state == CS_ROUTING)) { + if (jss && !jss->check_state && jss->on_hangup && (jss->hook_state == CS_HANGUP || jss->hook_state == CS_ROUTING)) { jss->check_state++; argv[argc++] = OBJECT_TO_JSVAL(jss->obj); if (jss->hook_state == CS_HANGUP) { @@ -1637,6 +1637,9 @@ static switch_status_t hanguphook(switch_core_session_t *session) if ((jss = switch_channel_get_private(channel, "jss"))) { switch_channel_state_t state = switch_channel_get_state(channel); + if (state > CS_HANGUP) { + state = CS_HANGUP; + } if (jss->hook_state != state) { jss->hook_state = state; jss->check_state = 0; @@ -2375,21 +2378,24 @@ static JSBool session_hangup(JSContext * cx, JSObject * obj, uintN argc, jsval * METHOD_SANITY_CHECK(); channel = switch_core_session_get_channel(jss->session); - CHANNEL_SANITY_CHECK(); + //CHANNEL_SANITY_CHECK(); - if (argc > 1) { - if (JSVAL_IS_INT(argv[0])) { - int32 i = 0; - JS_ValueToInt32(cx, argv[0], &i); - cause = i; - } else { - cause_name = JS_GetStringBytes(JS_ValueToString(cx, argv[0])); - cause = switch_channel_str2cause(cause_name); + if (switch_channel_up(channel)) { + if (argc > 1) { + if (JSVAL_IS_INT(argv[0])) { + int32 i = 0; + JS_ValueToInt32(cx, argv[0], &i); + cause = i; + } else { + cause_name = JS_GetStringBytes(JS_ValueToString(cx, argv[0])); + cause = switch_channel_str2cause(cause_name); + } } + + switch_channel_hangup(channel, cause); + switch_core_session_kill_channel(jss->session, SWITCH_SIG_KILL); } - switch_channel_hangup(channel, cause); - switch_core_session_kill_channel(jss->session, SWITCH_SIG_KILL); return JS_TRUE; } @@ -3051,6 +3057,10 @@ static void session_destroy(JSContext * cx, JSObject * obj) if (cx && obj) { if ((jss = JS_GetPrivate(cx, obj))) { + jsval rval; + + check_hangup_hook(jss, &rval); + JS_SetPrivate(cx, obj, NULL); if (jss->speech && *jss->speech->sh.name) { destroy_speech_engine(jss); @@ -3623,7 +3633,7 @@ static void js_parse_and_execute(switch_core_session_t *session, const char *inp const char *script; int argc = 0, x = 0, y = 0; unsigned int flags = 0; - struct js_session *jss; + struct js_session *jss = NULL; JSContext *cx = NULL; jsval rval; diff --git a/src/switch_core.c b/src/switch_core.c index d48cd46dfc..060e6cff8f 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -1235,6 +1235,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_init(switch_core_flag_t flags, switc runtime.max_dtmf_duration = SWITCH_MAX_DTMF_DURATION; runtime.default_dtmf_duration = SWITCH_DEFAULT_DTMF_DURATION; runtime.min_dtmf_duration = SWITCH_MIN_DTMF_DURATION; + switch_set_flag((&runtime), SCF_NO_NEW_SESSIONS); /* INIT APR and Create the pool context */ if (apr_initialize() != SWITCH_STATUS_SUCCESS) { From 86703188550c2d1ced8bae8f18c736bc9a8dd5b8 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 23 Jul 2010 14:13:45 -0500 Subject: [PATCH 041/161] remove dup line --- src/switch_core.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/switch_core.c b/src/switch_core.c index 060e6cff8f..d48cd46dfc 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -1235,7 +1235,6 @@ SWITCH_DECLARE(switch_status_t) switch_core_init(switch_core_flag_t flags, switc runtime.max_dtmf_duration = SWITCH_MAX_DTMF_DURATION; runtime.default_dtmf_duration = SWITCH_DEFAULT_DTMF_DURATION; runtime.min_dtmf_duration = SWITCH_MIN_DTMF_DURATION; - switch_set_flag((&runtime), SCF_NO_NEW_SESSIONS); /* INIT APR and Create the pool context */ if (apr_initialize() != SWITCH_STATUS_SUCCESS) { From 9a667aeb1f6a179f058d8e09c01273cbf6a70e01 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 23 Jul 2010 16:15:10 -0500 Subject: [PATCH 042/161] fix leak --- src/mod/applications/mod_fifo/mod_fifo.c | 87 ++++++++++++++++++++---- src/switch_core_sqldb.c | 10 ++- 2 files changed, 79 insertions(+), 18 deletions(-) diff --git a/src/mod/applications/mod_fifo/mod_fifo.c b/src/mod/applications/mod_fifo/mod_fifo.c index d26ddf0a8e..4d9e26658b 100644 --- a/src/mod/applications/mod_fifo/mod_fifo.c +++ b/src/mod/applications/mod_fifo/mod_fifo.c @@ -720,6 +720,8 @@ static switch_status_t fifo_execute_sql(char *sql, switch_mutex_t *mutex) goto end; } + if (globals.debug > 1) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "sql: %s\n", sql); + status = switch_cache_db_execute_sql(dbh, sql, NULL); end: @@ -1135,8 +1137,8 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void const char *codec; struct call_helper *rows[MAX_ROWS] = { 0 }; int rowcount = 0; - - + switch_memory_pool_t *pool; + if (!globals.running) return NULL; switch_uuid_get(&uuid); @@ -1322,6 +1324,8 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void add_caller_outbound_call(id, &cancel_cause); + if (globals.debug) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s dialing: %s\n", node->name, originate_string); + status = switch_ivr_originate(NULL, &session, &cause, originate_string, timeout, NULL, NULL, NULL, NULL, ovars, SOF_NONE, &cancel_cause); del_caller_outbound_call(id); @@ -1447,7 +1451,8 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void switch_event_destroy(&pop_dup); } - switch_core_destroy_memory_pool(&cbh->pool); + pool = cbh->pool; + switch_core_destroy_memory_pool(&pool); switch_mutex_lock(globals.mutex); globals.threads--; @@ -1687,14 +1692,14 @@ static void find_consumers(fifo_node_t *node) { switch_thread_t *thread; switch_threadattr_t *thd_attr = NULL; - struct callback_helper *cbh; + struct callback_helper *cbh = NULL; switch_memory_pool_t *pool = NULL; - + switch_core_new_memory_pool(&pool); cbh = switch_core_alloc(pool, sizeof(*cbh)); cbh->pool = pool; cbh->need = 1; - + if (node->outbound_per_cycle != cbh->need) { cbh->need = node->outbound_per_cycle; } @@ -1706,6 +1711,8 @@ static void find_consumers(fifo_node_t *node) switch_threadattr_detach_set(thd_attr, 1); switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); switch_thread_create(&thread, thd_attr, ringall_thread_run, cbh, cbh->pool); + } else { + switch_core_destroy_memory_pool(&pool); } } @@ -1733,9 +1740,8 @@ static void *SWITCH_THREAD_FUNC node_thread_run(switch_thread_t *thread, void *o switch_mutex_lock(globals.mutex); - if (globals.debug) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Trying priority: %d\n", cur_priority); - } + if (globals.debug) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Trying priority: %d\n", cur_priority); + for (hi = switch_hash_first(NULL, globals.fifo_hash); hi; hi = switch_hash_next(hi)) { switch_hash_this(hi, &var, NULL, &val); @@ -3507,8 +3513,52 @@ static void list_node(fifo_node_t *node, switch_xml_t x_report, int *off, int ve } +void dump_hash(switch_hash_t *hash, switch_stream_handle_t *stream) +{ + switch_hash_index_t *hi; + void *val; + const void *var; -#define FIFO_API_SYNTAX "list|list_verbose|count|importance []|reparse [del_all]" + switch_mutex_lock(globals.mutex); + for (hi = switch_hash_first(NULL, hash); hi; hi = switch_hash_next(hi)) { + switch_hash_this(hi, &var, NULL, &val); + stream->write_function(stream, " %s: %s\n", (char *)var, (char *)val); + } + switch_mutex_unlock(globals.mutex); +} + +void node_dump(switch_stream_handle_t *stream) +{ + + + switch_hash_index_t *hi; + fifo_node_t *node; + void *val; + switch_mutex_lock(globals.mutex); + for (hi = switch_hash_first(NULL, globals.fifo_hash); hi; hi = switch_hash_next(hi)) { + switch_hash_this(hi, NULL, NULL, &val); + if ((node = (fifo_node_t *) val)) { + stream->write_function(stream, "node: %s outbound_name=%s outbound_per_cycle=%d outbound_priority=%d outbound_strategy=%s\n", + node->name, node->outbound_name, node->outbound_per_cycle, + node->outbound_priority, strat_parse(node->outbound_strategy)); + } + } + + stream->write_function(stream, " caller_orig:\n"); + dump_hash(globals.caller_orig_hash, stream); + stream->write_function(stream, " consumer_orig:\n"); + dump_hash(globals.consumer_orig_hash, stream); + stream->write_function(stream, " bridge:\n"); + dump_hash(globals.bridge_hash, stream); + + switch_mutex_unlock(globals.mutex); + + +} + + + +#define FIFO_API_SYNTAX "list|list_verbose|count|debug|status|importance []|reparse [del_all]" SWITCH_STANDARD_API(fifo_api_function) { int len = 0; @@ -3538,9 +3588,18 @@ SWITCH_STANDARD_API(fifo_api_function) goto done; } + if (!strcasecmp(argv[0], "status")) { + node_dump(stream); + goto done; + } + if (!strcasecmp(argv[0], "debug")) { - globals.debug = !globals.debug; - stream->write_function(stream, "debug %s\n", globals.debug ? "on" : "off"); + if (argv[1]) { + if ((globals.debug = atoi(argv[1])) < 0) { + globals.debug = 0; + } + } + stream->write_function(stream, "debug %d\n", globals.debug); goto done; } @@ -4252,9 +4311,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_fifo_shutdown) globals.running = 0; /* Cleanup */ - if (globals.node_thread_running) { - stop_node_thread(); - } + stop_node_thread(); while(globals.threads) { switch_cond_next(); diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c index 0ea4150b15..d72925c5fc 100644 --- a/src/switch_core_sqldb.c +++ b/src/switch_core_sqldb.c @@ -385,10 +385,12 @@ SWITCH_DECLARE(switch_status_t) _switch_cache_db_get_db_handle(switch_cache_db_h new_dbh->hash = switch_ci_hashfunc_default(db_str, &hlen); - if (db) + if (db) { new_dbh->native_handle.core_db_dbh = db; - else + } else { new_dbh->native_handle.odbc_dbh = odbc_dbh; + } + switch_mutex_init(&new_dbh->mutex, SWITCH_MUTEX_UNNESTED, new_dbh->pool); switch_set_string(new_dbh->creator, db_callsite_str); switch_mutex_lock(new_dbh->mutex); @@ -398,8 +400,9 @@ SWITCH_DECLARE(switch_status_t) _switch_cache_db_get_db_handle(switch_cache_db_h end: - if (new_dbh) + if (new_dbh) { new_dbh->last_used = switch_epoch_time_now(NULL); + } switch_mutex_unlock(sql_manager.dbh_mutex); @@ -1605,6 +1608,7 @@ void switch_core_sqldb_stop(void) switch_thread_join(&st, sql_manager.thread); } + switch_cache_db_flush_handles(); sql_close(0); switch_core_hash_destroy(&sql_manager.dbh_hash); From e660e01d204c77dd6fd6f68b2f4fae8af570a730 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Fri, 23 Jul 2010 19:49:30 -0500 Subject: [PATCH 043/161] add missing vs2010 --- .../mod_pocketsphinx.2010.vcxproj | 217 ++++++++++++++++++ src/mod/asr_tts/mod_unimrcp/unimrcp.props | 15 ++ 2 files changed, 232 insertions(+) create mode 100644 src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.2010.vcxproj create mode 100644 src/mod/asr_tts/mod_unimrcp/unimrcp.props diff --git a/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.2010.vcxproj b/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.2010.vcxproj new file mode 100644 index 0000000000..8a58c693c6 --- /dev/null +++ b/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.2010.vcxproj @@ -0,0 +1,217 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + mod_pocketsphinx + {2286DA73-9FC5-45BC-A508-85994C3317AB} + mod_pocketsphinx + Win32Proj + + + + DynamicLibrary + Unicode + true + + + DynamicLibrary + Unicode + + + DynamicLibrary + Unicode + true + + + DynamicLibrary + Unicode + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + true + false + false + + + + Disabled + ..\..\..\..\libs\sphinxbase-0.4.99\include;..\..\..\..\libs\pocketsphinx-0.5.99\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_POCKETSPHINX_EXPORTS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + EditAndContinue + + + $(SolutionDir)$(Configuration);%(AdditionalLibraryDirectories) + true + Windows + MachineX86 + + + if not exist "$(OutDir)grammar\model\communicator" xcopy "$(SolutionDir)libs\Communicator_semi_40.cd_semi_6000\*.*" "$(OutDir)..\grammar\model\communicator" /C /D /Y /S /I + + + + + X64 + + + Disabled + ..\..\..\..\libs\sphinxbase-0.4.99\include;..\..\..\..\libs\pocketsphinx-0.5.99\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_POCKETSPHINX_EXPORTS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + ProgramDatabase + + + $(SolutionDir)$(Configuration);%(AdditionalLibraryDirectories) + true + Windows + MachineX64 + + + if not exist "$(OutDir)grammar\model\communicator" xcopy "$(SolutionDir)libs\Communicator_semi_40.cd_semi_6000\*.*" "$(OutDir)..\grammar\model\communicator" /C /D /Y /S /I + + + + + MaxSpeed + true + ..\..\..\..\libs\sphinxbase-0.4.99\include;..\..\..\..\libs\pocketsphinx-0.5.99\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_POCKETSPHINX_EXPORTS;%(PreprocessorDefinitions) + MultiThreadedDLL + true + Use + Level3 + ProgramDatabase + + + false + + + $(SolutionDir)$(Configuration);%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX86 + + + if not exist "$(OutDir)grammar\model\communicator" xcopy "$(SolutionDir)libs\Communicator_semi_40.cd_semi_6000\*.*" "$(OutDir)..\grammar\model\communicator" /C /D /Y /S /I + + + + + + X64 + + + MaxSpeed + true + ..\..\..\..\libs\sphinxbase-0.4.99\include;..\..\..\..\libs\pocketsphinx-0.5.99\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_POCKETSPHINX_EXPORTS;%(PreprocessorDefinitions) + MultiThreadedDLL + true + Use + Level3 + ProgramDatabase + + + false + + + $(SolutionDir)$(Configuration);%(AdditionalLibraryDirectories) + true + Windows + true + true + MachineX64 + + + if not exist "$(OutDir)grammar\model\communicator" xcopy "$(SolutionDir)libs\Communicator_semi_40.cd_semi_6000\*.*" "$(OutDir)..\grammar\model\communicator" /C /D /Y /S /I + + + + + + + + + + + + + {af8163ee-fa76-4904-a11d-7d70a1b5ba2e} + false + + + {4f92b672-dadb-4047-8d6a-4bb3796733fd} + false + + + {2dee4895-1134-439c-b688-52203e57d878} + false + + + {94001a0e-a837-445c-8004-f918f10d0226} + false + + + {2f025ead-99bd-40f5-b2cc-f0a28cad7f2d} + false + + + {202d7a4e-760d-4d0e-afa1-d7459ced30ff} + false + + + + + + \ No newline at end of file diff --git a/src/mod/asr_tts/mod_unimrcp/unimrcp.props b/src/mod/asr_tts/mod_unimrcp/unimrcp.props new file mode 100644 index 0000000000..a904aa25db --- /dev/null +++ b/src/mod/asr_tts/mod_unimrcp/unimrcp.props @@ -0,0 +1,15 @@ + + + + + + + <_ProjectFileVersion>10.0.30319.1 + + + + $(SolutionDir)libs\unimrcp\platforms\libunimrcp-client\include;$(SolutionDir)libs\unimrcp\libs\mrcp-client\include;$(SolutionDir)libs\unimrcp\libs\mrcp-signaling\include;$(SolutionDir)libs\unimrcp\libs\apr-toolkit\include;$(SolutionDir)libs\unimrcp\build;$(SolutionDir)libs\unimrcp\libs\mrcp\include;$(SolutionDir)libs\unimrcp\libs\mrcp\message\include;$(SolutionDir)libs\unimrcp\libs\mrcp\control\include;$(SolutionDir)libs\unimrcp\libs\mrcp\resources\include;$(SolutionDir)libs\unimrcp\libs\mpf\include;$(SolutionDir)libs\unimrcp\libs\mrcpv2-transport\include;$(SolutionDir)libs\unimrcp\modules\mrcp-sofiasip\include;$(SolutionDir)libs\unimrcp\modules\mrcp-unirtsp\include;%(AdditionalIncludeDirectories) + MRCP_STATIC_LIB MPF_STATIC_LIB APT_STATIC_LIB;%(PreprocessorDefinitions) + + + \ No newline at end of file From 7d554c1164d9c6a0492caac44340b3cf324d19f9 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sat, 24 Jul 2010 00:20:19 -0500 Subject: [PATCH 044/161] fix seg in js hangup --- .../languages/mod_spidermonkey/mod_spidermonkey.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c index 790afab1e7..77515a689e 100644 --- a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c +++ b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c @@ -1633,14 +1633,11 @@ static jsval check_hangup_hook(struct js_session *jss, jsval * rp) static switch_status_t hanguphook(switch_core_session_t *session) { switch_channel_t *channel = switch_core_session_get_channel(session); + switch_channel_state_t state = switch_channel_get_state(channel); struct js_session *jss = NULL; - if ((jss = switch_channel_get_private(channel, "jss"))) { - switch_channel_state_t state = switch_channel_get_state(channel); - if (state > CS_HANGUP) { - state = CS_HANGUP; - } - if (jss->hook_state != state) { + if (state == CS_HANGUP || state == CS_ROUTING) { + if ((jss = switch_channel_get_private(channel, "jss"))) { jss->hook_state = state; jss->check_state = 0; } @@ -2381,6 +2378,8 @@ static JSBool session_hangup(JSContext * cx, JSObject * obj, uintN argc, jsval * //CHANNEL_SANITY_CHECK(); if (switch_channel_up(channel)) { + jsval ret = JS_TRUE; + if (argc > 1) { if (JSVAL_IS_INT(argv[0])) { int32 i = 0; @@ -2394,6 +2393,10 @@ static JSBool session_hangup(JSContext * cx, JSObject * obj, uintN argc, jsval * switch_channel_hangup(channel, cause); switch_core_session_kill_channel(jss->session, SWITCH_SIG_KILL); + + jss->hook_state = CS_HANGUP; + check_hangup_hook(jss, &ret); + } return JS_TRUE; From 8915c6a94e2e87b13c7e513532807bb5c7352c93 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sat, 24 Jul 2010 01:03:21 -0500 Subject: [PATCH 045/161] reduce memory usage --- src/mod/applications/mod_fifo/mod_fifo.c | 50 ++++++++++--------- .../mod_event_socket/mod_event_socket.c | 39 +++++++++------ 2 files changed, 52 insertions(+), 37 deletions(-) diff --git a/src/mod/applications/mod_fifo/mod_fifo.c b/src/mod/applications/mod_fifo/mod_fifo.c index 4d9e26658b..925a618c74 100644 --- a/src/mod/applications/mod_fifo/mod_fifo.c +++ b/src/mod/applications/mod_fifo/mod_fifo.c @@ -562,7 +562,7 @@ static struct { switch_event_node_t *node; char hostname[256]; char *dbname; - char *odbc_dsn; + char odbc_dsn[1024]; char *odbc_user; char *odbc_pass; int node_thread_running; @@ -781,6 +781,7 @@ static fifo_node_t *create_node(const char *name, uint32_t importance, switch_mu return NULL; } + switch_core_new_memory_pool(&pool); node = switch_core_alloc(pool, sizeof(*node)); @@ -788,7 +789,7 @@ static fifo_node_t *create_node(const char *name, uint32_t importance, switch_mu node->outbound_strategy = default_strategy; node->name = switch_core_strdup(node->pool, name); for (x = 0; x < MAX_PRI; x++) { - fifo_queue_create(&node->fifo_list[x], SWITCH_CORE_QUEUE_LEN, node->pool); + fifo_queue_create(&node->fifo_list[x], 1000, node->pool); switch_assert(node->fifo_list[x]); } @@ -844,7 +845,7 @@ struct call_helper { switch_memory_pool_t *pool; }; -#define MAX_ROWS 2048 +#define MAX_ROWS 25 struct callback_helper { int need; switch_memory_pool_t *pool; @@ -1138,16 +1139,16 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void struct call_helper *rows[MAX_ROWS] = { 0 }; int rowcount = 0; switch_memory_pool_t *pool; - - if (!globals.running) return NULL; - - switch_uuid_get(&uuid); - switch_uuid_format(uuid_str, &uuid); switch_mutex_lock(globals.mutex); globals.threads++; switch_mutex_unlock(globals.mutex); + if (!globals.running) goto dpool; + + switch_uuid_get(&uuid); + switch_uuid_format(uuid_str, &uuid); + if (!cbh->rowcount) { goto end; } @@ -1451,6 +1452,8 @@ static void *SWITCH_THREAD_FUNC ringall_thread_run(switch_thread_t *thread, void switch_event_destroy(&pop_dup); } + dpool: + pool = cbh->pool; switch_core_destroy_memory_pool(&pool); @@ -1971,7 +1974,7 @@ SWITCH_STANDARD_API(fifo_add_outbound_function) } -static void dec_use_count(switch_core_session_t *session) +static void dec_use_count(switch_core_session_t *session, switch_bool_t send_event) { char *sql; const char *outbound_id; @@ -1991,12 +1994,14 @@ static void dec_use_count(switch_core_session_t *session) fifo_execute_sql(sql, globals.sql_mutex); switch_safe_free(sql); } - - if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) { - switch_channel_event_set_data(channel, event); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-consumer-stop"); - switch_event_fire(&event); + + if (send_event) { + if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FIFO_EVENT) == SWITCH_STATUS_SUCCESS) { + switch_channel_event_set_data(channel, event); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Name", MANUAL_QUEUE_NAME); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FIFO-Action", "bridge-consumer-stop"); + switch_event_fire(&event); + } } } @@ -2006,7 +2011,7 @@ static switch_status_t hanguphook(switch_core_session_t *session) switch_channel_state_t state = switch_channel_get_state(channel); if (state == CS_HANGUP) { - dec_use_count(session); + dec_use_count(session, SWITCH_TRUE); switch_core_event_hook_remove_state_change(session, hanguphook); } @@ -2142,7 +2147,7 @@ SWITCH_STANDARD_APP(fifo_function) const char *serviced_uuid = NULL; if (switch_core_event_hook_remove_receive_message(session, messagehook) == SWITCH_STATUS_SUCCESS) { - dec_use_count(session); + dec_use_count(session, SWITCH_FALSE); switch_core_event_hook_remove_state_change(session, hanguphook); } @@ -3522,7 +3527,7 @@ void dump_hash(switch_hash_t *hash, switch_stream_handle_t *stream) switch_mutex_lock(globals.mutex); for (hi = switch_hash_first(NULL, hash); hi; hi = switch_hash_next(hi)) { switch_hash_this(hi, &var, NULL, &val); - stream->write_function(stream, " %s: %s\n", (char *)var, (char *)val); + stream->write_function(stream, " %s\n", (char *)var); } switch_mutex_unlock(globals.mutex); } @@ -3607,6 +3612,7 @@ SWITCH_STANDARD_API(fifo_api_function) if (!strcasecmp(argv[0], "reparse")) { load_config(1, argv[1] && !strcasecmp(argv[1], "del_all")); + stream->write_function(stream, "+OK\n"); goto done; } @@ -3814,7 +3820,7 @@ static switch_status_t load_config(int reload, int del_all) if (!strcasecmp(var, "odbc-dsn") && !zstr(val)) { if (switch_odbc_available()) { - globals.odbc_dsn = switch_core_strdup(globals.pool, val); + switch_set_string(globals.odbc_dsn, val); if ((globals.odbc_user = strchr(globals.odbc_dsn, ':'))) { *globals.odbc_user++ = '\0'; if ((globals.odbc_pass = strchr(globals.odbc_user, ':'))) { @@ -4247,7 +4253,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_fifo_load) return SWITCH_STATUS_GENERR; } - switch_core_new_memory_pool(&globals.pool); + globals.pool = pool; switch_core_hash_init(&globals.fifo_hash, globals.pool); switch_core_hash_init(&globals.caller_orig_hash, globals.pool); @@ -4266,7 +4272,6 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_fifo_load) switch_event_unbind(&globals.node); switch_event_free_subclass(FIFO_EVENT); switch_core_hash_destroy(&globals.fifo_hash); - switch_core_destroy_memory_pool(&globals.pool); return status; } @@ -4300,7 +4305,6 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_fifo_shutdown) void *val; switch_event_t *pop = NULL; fifo_node_t *node; - switch_memory_pool_t *pool = globals.pool; switch_mutex_t *mutex = globals.mutex; switch_event_unbind(&globals.node); @@ -4340,7 +4344,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_fifo_shutdown) switch_core_hash_destroy(&globals.fifo_hash); memset(&globals, 0, sizeof(globals)); switch_mutex_unlock(mutex); - switch_core_destroy_memory_pool(&pool); + return SWITCH_STATUS_SUCCESS; } diff --git a/src/mod/event_handlers/mod_event_socket/mod_event_socket.c b/src/mod/event_handlers/mod_event_socket/mod_event_socket.c index bc80c046e6..e6c403b658 100644 --- a/src/mod/event_handlers/mod_event_socket/mod_event_socket.c +++ b/src/mod/event_handlers/mod_event_socket/mod_event_socket.c @@ -31,7 +31,8 @@ */ #include #define CMD_BUFLEN 1024 * 1000 - +#define MAX_QUEUE_LEN 5000 +#define MAX_MISSED 200 SWITCH_MODULE_LOAD_FUNCTION(mod_event_socket_load); SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_event_socket_shutdown); SWITCH_MODULE_RUNTIME_FUNCTION(mod_event_socket_runtime); @@ -142,6 +143,7 @@ static const char *format2str(event_format_t format) } static void remove_listener(listener_t *listener); +static void kill_listener(listener_t *l); static void kill_all_listeners(void); static uint32_t next_id(void) @@ -181,7 +183,9 @@ static switch_status_t socket_logger(const switch_log_node_t *node, switch_log_l } } else { switch_log_node_free(&dnode); - l->lost_logs++; + if (++l->lost_logs > MAX_MISSED) { + kill_listener(l); + } } } } @@ -374,7 +378,9 @@ static void event_handler(switch_event_t *event) } } } else { - l->lost_events++; + if (++l->lost_events > MAX_MISSED) { + kill_listener(l); + } switch_event_destroy(&clone); } } else { @@ -454,8 +460,8 @@ SWITCH_STANDARD_APP(socket_function) } switch_thread_rwlock_create(&listener->rwlock, switch_core_session_get_pool(session)); - switch_queue_create(&listener->event_queue, SWITCH_CORE_QUEUE_LEN, switch_core_session_get_pool(session)); - switch_queue_create(&listener->log_queue, SWITCH_CORE_QUEUE_LEN, switch_core_session_get_pool(session)); + switch_queue_create(&listener->event_queue, MAX_QUEUE_LEN, switch_core_session_get_pool(session)); + switch_queue_create(&listener->log_queue, MAX_QUEUE_LEN, switch_core_session_get_pool(session)); listener->sock = new_sock; listener->pool = switch_core_session_get_pool(session); @@ -573,6 +579,15 @@ static void remove_listener(listener_t *listener) switch_mutex_unlock(globals.listener_mutex); } +static void kill_listener(listener_t *l) +{ + switch_clear_flag(l, LFLAG_RUNNING); + if (l->sock) { + switch_socket_shutdown(l->sock, SWITCH_SHUTDOWN_READWRITE); + switch_socket_close(l->sock); + } + +} static void kill_all_listeners(void) { @@ -580,11 +595,7 @@ static void kill_all_listeners(void) switch_mutex_lock(globals.listener_mutex); for (l = listen_list.listeners; l; l = l->next) { - switch_clear_flag(l, LFLAG_RUNNING); - if (l->sock) { - switch_socket_shutdown(l->sock, SWITCH_SHUTDOWN_READWRITE); - switch_socket_close(l->sock); - } + kill_listener(l); } switch_mutex_unlock(globals.listener_mutex); } @@ -787,8 +798,8 @@ SWITCH_STANDARD_API(event_sink_function) switch_set_flag(listener, LFLAG_AUTHED); switch_set_flag(listener, LFLAG_STATEFUL); switch_set_flag(listener, LFLAG_ALLOW_LOG); - switch_queue_create(&listener->event_queue, SWITCH_CORE_QUEUE_LEN, listener->pool); - switch_queue_create(&listener->log_queue, SWITCH_CORE_QUEUE_LEN, listener->pool); + switch_queue_create(&listener->event_queue, MAX_QUEUE_LEN, listener->pool); + switch_queue_create(&listener->log_queue, MAX_QUEUE_LEN, listener->pool); if (loglevel) { switch_log_level_t ltype = switch_log_str2level(loglevel); @@ -2716,8 +2727,8 @@ SWITCH_MODULE_RUNTIME_FUNCTION(mod_event_socket_runtime) } switch_thread_rwlock_create(&listener->rwlock, listener_pool); - switch_queue_create(&listener->event_queue, SWITCH_CORE_QUEUE_LEN, listener_pool); - switch_queue_create(&listener->log_queue, SWITCH_CORE_QUEUE_LEN, listener_pool); + switch_queue_create(&listener->event_queue, MAX_QUEUE_LEN, listener_pool); + switch_queue_create(&listener->log_queue, MAX_QUEUE_LEN, listener_pool); listener->sock = inbound_socket; listener->pool = listener_pool; From 9b46a0aabefbe0f6a7971ba4f307095c9f8f3a47 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 24 Jul 2010 11:07:29 -0500 Subject: [PATCH 046/161] more vs2010 tweaks - remove mod_spidermonkey and releated from x64 for now --- Freeswitch.2010.sln | 17 ++++------------- .../src/msvc/make_at_dictionary.2010.vcxproj | 2 +- .../src/msvc/make_modem_filter.2010.vcxproj | 2 +- libs/win32/Download OGG.2010.vcxproj | 4 ++-- 4 files changed, 8 insertions(+), 17 deletions(-) diff --git a/Freeswitch.2010.sln b/Freeswitch.2010.sln index 37b0415498..6c11e31c55 100644 --- a/Freeswitch.2010.sln +++ b/Freeswitch.2010.sln @@ -575,7 +575,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_say_zh", "src\mod\say\m EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_managed", "src\mod\languages\mod_managed\mod_managed.2010.vcxproj", "{7B42BDA1-72C0-4378-A9B6-5C530F8CD61E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSWITCH.Managed", "src\mod\languages\mod_managed\managed\FreeSWITCH.Managed.2010.csproj", "{834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSWITCH.Managed.2010", "src\mod\languages\mod_managed\managed\FreeSWITCH.Managed.2010.csproj", "{834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download mpg123", "libs\win32\Download mpg123.2010.vcxproj", "{E796E337-DE78-4303-8614-9A590862EE95}" EndProject @@ -832,11 +832,9 @@ Global {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Win32.ActiveCfg = Debug|Win32 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Win32.Build.0 = Debug|Win32 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|x64.ActiveCfg = Debug|x64 - {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|x64.Build.0 = Debug|x64 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Win32.ActiveCfg = Release|Win32 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Win32.Build.0 = Release|Win32 {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x64.ActiveCfg = Release|x64 - {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x64.Build.0 = Release|x64 {692F6330-4D87-4C82-81DF-40DB5892636E}.All|Win32.ActiveCfg = Release|x64 {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x64.ActiveCfg = Release|x64 {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x64.Build.0 = Release|x64 @@ -1148,22 +1146,18 @@ Global {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Win32.ActiveCfg = Debug|Win32 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Win32.Build.0 = Debug|Win32 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|x64.ActiveCfg = Debug|x64 - {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|x64.Build.0 = Debug|x64 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Win32.ActiveCfg = Release|Win32 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Win32.Build.0 = Release|Win32 {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x64.ActiveCfg = Release|x64 - {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x64.Build.0 = Release|x64 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|Win32.ActiveCfg = Release|x64 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x64.ActiveCfg = Release|x64 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x64.Build.0 = Release|x64 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Win32.ActiveCfg = Debug|Win32 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Win32.Build.0 = Debug|Win32 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|x64.ActiveCfg = Debug|x64 - {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|x64.Build.0 = Debug|x64 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Win32.ActiveCfg = Release|Win32 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Win32.Build.0 = Release|Win32 {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x64.ActiveCfg = Release|x64 - {8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x64.Build.0 = Release|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|Win32.ActiveCfg = Release|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x64.ActiveCfg = Release|x64 {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x64.Build.0 = Release|x64 @@ -1192,11 +1186,9 @@ Global {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Win32.ActiveCfg = Debug|Win32 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Win32.Build.0 = Debug|Win32 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|x64.ActiveCfg = Debug|x64 - {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|x64.Build.0 = Debug|x64 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Win32.ActiveCfg = Release|Win32 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Win32.Build.0 = Release|Win32 {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x64.ActiveCfg = Release|x64 - {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x64.Build.0 = Release|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|Win32.ActiveCfg = Release|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x64.ActiveCfg = Release|x64 {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x64.Build.0 = Release|x64 @@ -1291,11 +1283,9 @@ Global {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Win32.ActiveCfg = Debug|Win32 {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Win32.Build.0 = Debug|Win32 {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|x64.ActiveCfg = Debug|x64 - {028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|x64.Build.0 = Debug|x64 {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Win32.ActiveCfg = Release|Win32 {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Win32.Build.0 = Release|Win32 {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x64.ActiveCfg = Release|x64 - {028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x64.Build.0 = Release|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|Win32.ActiveCfg = Release|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x64.ActiveCfg = Release|x64 {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x64.Build.0 = Release|x64 @@ -1456,11 +1446,9 @@ Global {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Win32.ActiveCfg = Debug|Win32 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|Win32.Build.0 = Debug|Win32 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|x64.ActiveCfg = Debug|x64 - {36E854E3-CE12-4348-A125-CCF3F9D74813}.Debug|x64.Build.0 = Debug|x64 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Win32.ActiveCfg = Release|Win32 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|Win32.Build.0 = Release|Win32 {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|x64.ActiveCfg = Release|x64 - {36E854E3-CE12-4348-A125-CCF3F9D74813}.Release|x64.Build.0 = Release|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|Win32.ActiveCfg = Release|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x64.ActiveCfg = Release|x64 {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x64.Build.0 = Release|x64 @@ -1781,9 +1769,11 @@ Global {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Win32.ActiveCfg = Debug|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|Win32.Build.0 = Debug|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x64.ActiveCfg = Debug|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Debug|x64.Build.0 = Debug|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Win32.ActiveCfg = Release|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|Win32.Build.0 = Release|Any CPU {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x64.ActiveCfg = Release|Any CPU + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0}.Release|x64.Build.0 = Release|Any CPU {E796E337-DE78-4303-8614-9A590862EE95}.All|Win32.ActiveCfg = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.All|Win32.Build.0 = Release|Win32 {E796E337-DE78-4303-8614-9A590862EE95}.All|x64.ActiveCfg = Release|Win32 @@ -2471,6 +2461,7 @@ Global {36E854E3-CE12-4348-A125-CCF3F9D74813} = {0C808854-54D1-4230-BFF5-77B5FD905000} {7B077E7F-1BE7-4291-AB86-55E527B25CAC} = {0C808854-54D1-4230-BFF5-77B5FD905000} {7B42BDA1-72C0-4378-A9B6-5C530F8CD61E} = {0C808854-54D1-4230-BFF5-77B5FD905000} + {834E2B2F-5483-4B80-8FE3-FE48FF76E5C0} = {0C808854-54D1-4230-BFF5-77B5FD905000} {692F6330-4D87-4C82-81DF-40DB5892636E} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0} {2286DA73-9FC5-45BC-A508-85994C3317AB} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0} {66444AEE-554C-11DD-A9F0-8C5D56D89593} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0} diff --git a/libs/spandsp/src/msvc/make_at_dictionary.2010.vcxproj b/libs/spandsp/src/msvc/make_at_dictionary.2010.vcxproj index 3727cebf49..8e8f4d8c14 100644 --- a/libs/spandsp/src/msvc/make_at_dictionary.2010.vcxproj +++ b/libs/spandsp/src/msvc/make_at_dictionary.2010.vcxproj @@ -27,7 +27,7 @@ <_ProjectFileVersion>10.0.30319.1 $(PlatformName)\$(Configuration)\ - $(PlatformName)\$(Configuration)\ + $(PlatformName)\make_at_dictionary\$(Configuration)\ false diff --git a/libs/spandsp/src/msvc/make_modem_filter.2010.vcxproj b/libs/spandsp/src/msvc/make_modem_filter.2010.vcxproj index 110e1f5c34..09771d6cac 100644 --- a/libs/spandsp/src/msvc/make_modem_filter.2010.vcxproj +++ b/libs/spandsp/src/msvc/make_modem_filter.2010.vcxproj @@ -27,7 +27,7 @@ <_ProjectFileVersion>10.0.30319.1 $(PlatformName)\$(Configuration)\ - $(PlatformName)\$(Configuration)\ + $(PlatformName)\make_modem_filter\$(Configuration)\ false diff --git a/libs/win32/Download OGG.2010.vcxproj b/libs/win32/Download OGG.2010.vcxproj index c6b4f1e930..90ea59bf87 100644 --- a/libs/win32/Download OGG.2010.vcxproj +++ b/libs/win32/Download OGG.2010.vcxproj @@ -65,11 +65,11 @@ Document - Downloading Lame. + Downloading OGG. if not exist "$(ProjectDir)..\libogg-1.1.3" cscript /nologo "$(ProjectDir)util.vbs" GetUnzip http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz "$(ProjectDir).." $(ProjectDir)..\libogg-1.1.3;%(Outputs) - Downloading Lame. + Downloading OGG. if not exist "$(ProjectDir)..\libogg-1.1.3" cscript /nologo "$(ProjectDir)util.vbs" GetUnzip http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz "$(ProjectDir).." $(ProjectDir)..\libogg-1.1.3;%(Outputs) From f029f7ef7cb04ec21c0cb65e9716645cc0942508 Mon Sep 17 00:00:00 2001 From: Steve Underwood Date: Sun, 25 Jul 2010 03:29:44 +0800 Subject: [PATCH 047/161] Moved spandsp to a more recent version. A huge number of little changes occur here, as recently spandsp lost all the $Id$ entries the source files had for the dark old days of CVS --- libs/spandsp/Makefile.am | 4 +- libs/spandsp/autogen.sh | 3 - libs/spandsp/configure.ac | 51 +- libs/spandsp/doc/Makefile.am | 2 - libs/spandsp/doc/t38_manual.xml | 1 - libs/spandsp/spandsp-sim/Makefile.am | 2 - libs/spandsp/spandsp-sim/g1050.c | 2 - libs/spandsp/spandsp-sim/line_model.c | 16 +- libs/spandsp/spandsp-sim/make_line_models.c | 2 - libs/spandsp/spandsp-sim/rfc2198_sim.c | 2 - libs/spandsp/spandsp-sim/spandsp-sim.h | 2 - libs/spandsp/spandsp-sim/spandsp/g1050.h | 2 - libs/spandsp/spandsp-sim/spandsp/line_model.h | 6 +- .../spandsp/spandsp-sim/spandsp/line_models.h | 2 - .../spandsp/spandsp-sim/spandsp/rfc2198_sim.h | 2 - libs/spandsp/spandsp-sim/spandsp/test_utils.h | 2 - libs/spandsp/spandsp-sim/test_utils.c | 2 - libs/spandsp/spandsp/global-tones.xml | 29 + libs/spandsp/spandsp/tsb85.xml | 5 +- libs/spandsp/src/Makefile.am | 124 ++-- libs/spandsp/src/adsi.c | 2 - libs/spandsp/src/async.c | 2 - libs/spandsp/src/at_interpreter.c | 35 +- libs/spandsp/src/awgn.c | 2 - libs/spandsp/src/bell_r2_mf.c | 2 - libs/spandsp/src/bert.c | 2 - libs/spandsp/src/bit_operations.c | 2 - libs/spandsp/src/bitstream.c | 24 +- libs/spandsp/src/complex_filters.c | 2 - libs/spandsp/src/complex_vector_float.c | 2 - libs/spandsp/src/complex_vector_int.c | 2 - libs/spandsp/src/crc.c | 114 ++-- libs/spandsp/src/dds_float.c | 2 - libs/spandsp/src/dds_int.c | 2 - libs/spandsp/src/dtmf.c | 2 - libs/spandsp/src/echo.c | 2 - libs/spandsp/src/fax.c | 146 ++++- libs/spandsp/src/fax_modems.c | 20 +- libs/spandsp/src/faxfont.h | 2 - libs/spandsp/src/filter_tools.c | 2 - libs/spandsp/src/filter_tools.h | 2 - libs/spandsp/src/floating_fudge.h | 2 - libs/spandsp/src/fsk.c | 4 +- libs/spandsp/src/g711.c | 2 - libs/spandsp/src/g722.c | 2 - libs/spandsp/src/g726.c | 2 - libs/spandsp/src/gsm0610_decode.c | 2 - libs/spandsp/src/gsm0610_encode.c | 2 - libs/spandsp/src/gsm0610_local.h | 2 - libs/spandsp/src/gsm0610_long_term.c | 2 - libs/spandsp/src/gsm0610_lpc.c | 2 - libs/spandsp/src/gsm0610_preprocess.c | 2 - libs/spandsp/src/gsm0610_rpe.c | 36 +- libs/spandsp/src/gsm0610_short_term.c | 2 - libs/spandsp/src/hdlc.c | 2 - libs/spandsp/src/ima_adpcm.c | 2 - libs/spandsp/src/logging.c | 2 - libs/spandsp/src/lpc10_analyse.c | 2 - libs/spandsp/src/lpc10_decode.c | 8 +- libs/spandsp/src/lpc10_encdecs.h | 2 - libs/spandsp/src/lpc10_encode.c | 2 - libs/spandsp/src/lpc10_placev.c | 2 - libs/spandsp/src/lpc10_voicing.c | 2 - libs/spandsp/src/make_at_dictionary.c | 12 +- libs/spandsp/src/make_modem_filter.c | 58 +- libs/spandsp/src/mmx_sse_decs.h | 2 - libs/spandsp/src/modem_connect_tones.c | 4 +- libs/spandsp/src/modem_echo.c | 22 +- libs/spandsp/src/msvc/config.h | 2 - libs/spandsp/src/noise.c | 2 - libs/spandsp/src/playout.c | 2 - libs/spandsp/src/plc.c | 2 - libs/spandsp/src/power_meter.c | 2 - libs/spandsp/src/queue.c | 2 - libs/spandsp/src/schedule.c | 2 - libs/spandsp/src/sig_tone.c | 4 +- libs/spandsp/src/silence_gen.c | 2 - libs/spandsp/src/spandsp.h.in | 16 +- libs/spandsp/src/spandsp/adsi.h | 2 - libs/spandsp/src/spandsp/arctan2.h | 2 - libs/spandsp/src/spandsp/async.h | 2 - libs/spandsp/src/spandsp/at_interpreter.h | 2 - libs/spandsp/src/spandsp/awgn.h | 2 - libs/spandsp/src/spandsp/bell_r2_mf.h | 2 - libs/spandsp/src/spandsp/bert.h | 2 - libs/spandsp/src/spandsp/biquad.h | 2 - libs/spandsp/src/spandsp/bit_operations.h | 2 - libs/spandsp/src/spandsp/bitstream.h | 12 +- libs/spandsp/src/spandsp/complex.h | 2 - libs/spandsp/src/spandsp/complex_filters.h | 2 - .../src/spandsp/complex_vector_float.h | 2 - libs/spandsp/src/spandsp/complex_vector_int.h | 2 - libs/spandsp/src/spandsp/crc.h | 13 +- libs/spandsp/src/spandsp/dc_restore.h | 2 - libs/spandsp/src/spandsp/dds.h | 2 - libs/spandsp/src/spandsp/dtmf.h | 2 - libs/spandsp/src/spandsp/echo.h | 2 - libs/spandsp/src/spandsp/expose.h | 18 +- libs/spandsp/src/spandsp/fast_convert.h | 8 +- libs/spandsp/src/spandsp/fax.h | 16 +- libs/spandsp/src/spandsp/fax_modems.h | 16 +- libs/spandsp/src/spandsp/fir.h | 2 - libs/spandsp/src/spandsp/fsk.h | 4 +- libs/spandsp/src/spandsp/g168models.h | 2 - libs/spandsp/src/spandsp/g711.h | 24 +- libs/spandsp/src/spandsp/g722.h | 2 - libs/spandsp/src/spandsp/g726.h | 2 - libs/spandsp/src/spandsp/gsm0610.h | 2 - libs/spandsp/src/spandsp/hdlc.h | 2 - libs/spandsp/src/spandsp/ima_adpcm.h | 2 - libs/spandsp/src/spandsp/logging.h | 2 - libs/spandsp/src/spandsp/lpc10.h | 2 - .../spandsp/src/spandsp/modem_connect_tones.h | 2 - libs/spandsp/src/spandsp/modem_echo.h | 4 +- libs/spandsp/src/spandsp/noise.h | 2 - libs/spandsp/src/spandsp/oki_adpcm.h | 2 - libs/spandsp/src/spandsp/playout.h | 2 - libs/spandsp/src/spandsp/plc.h | 2 - libs/spandsp/src/spandsp/power_meter.h | 2 - libs/spandsp/src/spandsp/private/adsi.h | 2 - libs/spandsp/src/spandsp/private/async.h | 2 - .../src/spandsp/private/at_interpreter.h | 2 - libs/spandsp/src/spandsp/private/awgn.h | 2 - libs/spandsp/src/spandsp/private/bell_r2_mf.h | 2 - libs/spandsp/src/spandsp/private/bert.h | 2 - libs/spandsp/src/spandsp/private/bitstream.h | 2 - libs/spandsp/src/spandsp/private/dtmf.h | 2 - libs/spandsp/src/spandsp/private/echo.h | 2 - libs/spandsp/src/spandsp/private/fax.h | 6 +- libs/spandsp/src/spandsp/private/fax_modems.h | 2 - libs/spandsp/src/spandsp/private/fsk.h | 2 - libs/spandsp/src/spandsp/private/g711.h | 2 - libs/spandsp/src/spandsp/private/g722.h | 2 - libs/spandsp/src/spandsp/private/g726.h | 2 - libs/spandsp/src/spandsp/private/gsm0610.h | 2 - libs/spandsp/src/spandsp/private/hdlc.h | 2 - libs/spandsp/src/spandsp/private/ima_adpcm.h | 2 - libs/spandsp/src/spandsp/private/logging.h | 2 - libs/spandsp/src/spandsp/private/lpc10.h | 2 - .../src/spandsp/private/modem_connect_tones.h | 2 - libs/spandsp/src/spandsp/private/modem_echo.h | 2 - libs/spandsp/src/spandsp/private/noise.h | 2 - libs/spandsp/src/spandsp/private/oki_adpcm.h | 2 - libs/spandsp/src/spandsp/private/queue.h | 2 - libs/spandsp/src/spandsp/private/schedule.h | 2 - libs/spandsp/src/spandsp/private/sig_tone.h | 2 - .../spandsp/src/spandsp/private/silence_gen.h | 2 - .../src/spandsp/private/super_tone_rx.h | 2 - .../src/spandsp/private/super_tone_tx.h | 2 - libs/spandsp/src/spandsp/private/swept_tone.h | 12 +- libs/spandsp/src/spandsp/private/t30.h | 69 +- .../spandsp/private/t30_dis_dtc_dcs_bits.h | 2 - libs/spandsp/src/spandsp/private/t31.h | 3 +- libs/spandsp/src/spandsp/private/t38_core.h | 2 - .../src/spandsp/private/t38_non_ecm_buffer.h | 2 - .../src/spandsp/private/t38_terminal.h | 4 +- libs/spandsp/src/spandsp/private/t4_rx.h | 65 +- libs/spandsp/src/spandsp/private/t4_tx.h | 43 +- libs/spandsp/src/spandsp/private/time_scale.h | 2 - .../spandsp/src/spandsp/private/tone_detect.h | 2 - .../src/spandsp/private/tone_generate.h | 2 - libs/spandsp/src/spandsp/private/v17rx.h | 7 +- libs/spandsp/src/spandsp/private/v17tx.h | 2 - libs/spandsp/src/spandsp/private/v18.h | 2 - libs/spandsp/src/spandsp/private/v22bis.h | 12 +- libs/spandsp/src/spandsp/private/v27ter_rx.h | 22 +- libs/spandsp/src/spandsp/private/v27ter_tx.h | 2 - libs/spandsp/src/spandsp/private/v29rx.h | 20 +- libs/spandsp/src/spandsp/private/v29tx.h | 2 - libs/spandsp/src/spandsp/private/v42.h | 2 - libs/spandsp/src/spandsp/private/v42bis.h | 2 - libs/spandsp/src/spandsp/private/v8.h | 12 +- libs/spandsp/src/spandsp/queue.h | 2 - libs/spandsp/src/spandsp/saturated.h | 150 ++++- libs/spandsp/src/spandsp/schedule.h | 2 - libs/spandsp/src/spandsp/sig_tone.h | 2 - libs/spandsp/src/spandsp/silence_gen.h | 2 - libs/spandsp/src/spandsp/super_tone_rx.h | 2 - libs/spandsp/src/spandsp/super_tone_tx.h | 2 - libs/spandsp/src/spandsp/swept_tone.h | 12 +- libs/spandsp/src/spandsp/t30.h | 27 +- libs/spandsp/src/spandsp/t30_api.h | 80 +-- libs/spandsp/src/spandsp/t30_fcf.h | 2 - libs/spandsp/src/spandsp/t30_logging.h | 2 - libs/spandsp/src/spandsp/t31.h | 8 +- libs/spandsp/src/spandsp/t35.h | 2 - libs/spandsp/src/spandsp/t38_core.h | 18 +- libs/spandsp/src/spandsp/t38_gateway.h | 2 - libs/spandsp/src/spandsp/t38_non_ecm_buffer.h | 2 - libs/spandsp/src/spandsp/t38_terminal.h | 30 +- libs/spandsp/src/spandsp/t4_rx.h | 16 +- libs/spandsp/src/spandsp/t4_tx.h | 17 +- libs/spandsp/src/spandsp/telephony.h | 2 - libs/spandsp/src/spandsp/time_scale.h | 2 - libs/spandsp/src/spandsp/timing.h | 2 - libs/spandsp/src/spandsp/tone_detect.h | 2 - libs/spandsp/src/spandsp/tone_generate.h | 5 +- libs/spandsp/src/spandsp/v17rx.h | 2 - libs/spandsp/src/spandsp/v17tx.h | 2 - libs/spandsp/src/spandsp/v18.h | 2 - libs/spandsp/src/spandsp/v22bis.h | 6 +- libs/spandsp/src/spandsp/v27ter_rx.h | 4 +- libs/spandsp/src/spandsp/v27ter_tx.h | 2 - libs/spandsp/src/spandsp/v29rx.h | 4 +- libs/spandsp/src/spandsp/v29tx.h | 2 - libs/spandsp/src/spandsp/v42.h | 2 - libs/spandsp/src/spandsp/v42bis.h | 12 +- libs/spandsp/src/spandsp/v8.h | 27 +- libs/spandsp/src/spandsp/vector_float.h | 2 - libs/spandsp/src/spandsp/vector_int.h | 2 - libs/spandsp/src/spandsp/version.h | 8 +- libs/spandsp/src/spandsp/version.h.in | 2 - libs/spandsp/src/super_tone_rx.c | 2 - libs/spandsp/src/super_tone_tx.c | 2 - libs/spandsp/src/swept_tone.c | 12 +- libs/spandsp/src/t30.c | 608 ++++++++++-------- libs/spandsp/src/t30_api.c | 49 +- libs/spandsp/src/t30_local.h | 2 - libs/spandsp/src/t30_logging.c | 14 +- libs/spandsp/src/t31.c | 79 ++- libs/spandsp/src/t35.c | 2 - libs/spandsp/src/t38_core.c | 53 +- libs/spandsp/src/t38_gateway.c | 67 +- libs/spandsp/src/t38_non_ecm_buffer.c | 2 - libs/spandsp/src/t38_terminal.c | 248 ++++++- libs/spandsp/src/t4_rx.c | 47 +- libs/spandsp/src/t4_t6_decode_states.h | 2 - libs/spandsp/src/t4_tx.c | 54 +- libs/spandsp/src/testcpuid.c | 2 - libs/spandsp/src/time_scale.c | 2 - libs/spandsp/src/tone_detect.c | 2 - libs/spandsp/src/tone_generate.c | 2 - .../src/v17_v32bis_rx_constellation_maps.h | 2 - .../src/v17_v32bis_tx_constellation_maps.h | 2 - libs/spandsp/src/v17rx.c | 3 +- libs/spandsp/src/v17tx.c | 6 +- libs/spandsp/src/v18.c | 48 +- libs/spandsp/src/v22bis_rx.c | 58 +- libs/spandsp/src/v22bis_tx.c | 8 +- libs/spandsp/src/v27ter_rx.c | 26 +- libs/spandsp/src/v27ter_tx.c | 6 +- libs/spandsp/src/v29rx.c | 42 +- libs/spandsp/src/v29tx.c | 8 +- libs/spandsp/src/v29tx_constellation_maps.h | 2 - libs/spandsp/src/v42.c | 2 - libs/spandsp/src/v42bis.c | 66 +- libs/spandsp/src/v8.c | 229 ++++--- libs/spandsp/src/vector_float.c | 2 - libs/spandsp/src/vector_int.c | 2 - libs/spandsp/test-data/Makefile.am | 2 - libs/spandsp/test-data/etsi/Makefile.am | 2 - libs/spandsp/test-data/etsi/fax/Makefile.am | 2 - .../etsi/fax/generate_etsi_300_242_pages.c | 10 +- libs/spandsp/test-data/itu/Makefile.am | 2 - libs/spandsp/test-data/itu/fax/Makefile.am | 22 +- .../test-data/itu/fax/generate_dithered_tif.c | 2 - .../test-data/itu/fax/generate_sized_pages.c | 2 - libs/spandsp/test-data/local/Makefile.am | 3 +- libs/spandsp/tests/Makefile.am | 27 +- libs/spandsp/tests/adsi_tests.c | 2 - libs/spandsp/tests/async_tests.c | 2 - libs/spandsp/tests/at_interpreter_tests.c | 2 - libs/spandsp/tests/awgn_tests.c | 4 +- libs/spandsp/tests/bell_mf_rx_tests.c | 2 - libs/spandsp/tests/bell_mf_tx_tests.c | 2 - libs/spandsp/tests/bert_tests.c | 2 - libs/spandsp/tests/bit_operations_tests.c | 2 - libs/spandsp/tests/complex_tests.c | 2 - .../tests/complex_vector_float_tests.c | 2 - libs/spandsp/tests/complex_vector_int_tests.c | 2 - libs/spandsp/tests/crc_tests.c | 25 +- libs/spandsp/tests/dc_restore_tests.c | 2 - libs/spandsp/tests/dds_tests.c | 2 - libs/spandsp/tests/dtmf_rx_tests.c | 41 +- libs/spandsp/tests/dtmf_tx_tests.c | 2 - libs/spandsp/tests/echo_monitor.cpp | 2 - libs/spandsp/tests/echo_monitor.h | 2 - libs/spandsp/tests/echo_tests.c | 2 - libs/spandsp/tests/fax_decode.c | 47 +- libs/spandsp/tests/fax_tester.c | 14 +- libs/spandsp/tests/fax_tester.h | 12 +- libs/spandsp/tests/fax_tests.c | 28 +- libs/spandsp/tests/fax_tests.sh | 5 +- libs/spandsp/tests/fax_utils.c | 11 +- libs/spandsp/tests/fax_utils.h | 2 - libs/spandsp/tests/fsk_tests.c | 26 +- libs/spandsp/tests/g1050_tests.c | 2 - libs/spandsp/tests/g168_tests.c | 2 - libs/spandsp/tests/g711_tests.c | 2 - libs/spandsp/tests/g722_tests.c | 2 - libs/spandsp/tests/g726_tests.c | 2 - libs/spandsp/tests/gsm0610_tests.c | 2 - libs/spandsp/tests/hdlc_tests.c | 7 +- libs/spandsp/tests/ima_adpcm_tests.c | 2 - libs/spandsp/tests/line_model_monitor.cpp | 2 - libs/spandsp/tests/line_model_monitor.h | 2 - libs/spandsp/tests/line_model_tests.c | 13 +- libs/spandsp/tests/logging_tests.c | 2 - libs/spandsp/tests/lpc10_tests.c | 2 - libs/spandsp/tests/make_g168_css.c | 2 - libs/spandsp/tests/media_monitor.cpp | 2 - libs/spandsp/tests/media_monitor.h | 2 - .../spandsp/tests/modem_connect_tones_tests.c | 2 - libs/spandsp/tests/modem_echo_tests.c | 4 +- libs/spandsp/tests/modem_monitor.cpp | 2 - libs/spandsp/tests/modem_monitor.h | 2 - libs/spandsp/tests/noise_tests.c | 2 - libs/spandsp/tests/pcap_parse.c | 202 ++++++ libs/spandsp/tests/pcap_parse.h | 54 ++ libs/spandsp/tests/playout_tests.c | 2 - libs/spandsp/tests/plc_tests.c | 2 - libs/spandsp/tests/power_meter_tests.c | 2 - libs/spandsp/tests/queue_tests.c | 6 +- libs/spandsp/tests/r2_mf_rx_tests.c | 2 - libs/spandsp/tests/r2_mf_tx_tests.c | 2 - libs/spandsp/tests/regression_tests.sh | 91 ++- libs/spandsp/tests/rfc2198_sim_tests.c | 2 - libs/spandsp/tests/schedule_tests.c | 2 - libs/spandsp/tests/sig_tone_tests.c | 3 +- libs/spandsp/tests/super_tone_rx_tests.c | 2 - libs/spandsp/tests/super_tone_tx_tests.c | 2 - libs/spandsp/tests/swept_tone_tests.c | 2 - libs/spandsp/tests/t31_tests.c | 85 ++- libs/spandsp/tests/t38_core_tests.c | 2 - libs/spandsp/tests/t38_decode.c | 277 ++++++++ libs/spandsp/tests/t38_gateway_tests.c | 58 +- .../tests/t38_gateway_to_terminal_tests.c | 226 ++++++- libs/spandsp/tests/t38_non_ecm_buffer_tests.c | 2 - libs/spandsp/tests/t38_terminal_tests.c | 36 +- .../tests/t38_terminal_to_gateway_tests.c | 18 +- libs/spandsp/tests/t4_tests.c | 204 ++++-- libs/spandsp/tests/testadsi.c | 2 - libs/spandsp/tests/testfax.c | 2 - libs/spandsp/tests/time_scale_tests.c | 2 - libs/spandsp/tests/tone_detect_tests.c | 2 - libs/spandsp/tests/tone_generate_tests.c | 2 - libs/spandsp/tests/tsb85_tests.c | 74 ++- libs/spandsp/tests/tsb85_tests.sh | 5 +- libs/spandsp/tests/udptl.c | 592 +++++++++++++++++ libs/spandsp/tests/udptl.h | 158 +++++ libs/spandsp/tests/v17_tests.c | 81 ++- libs/spandsp/tests/v18_tests.c | 2 - libs/spandsp/tests/v22bis_tests.c | 22 +- libs/spandsp/tests/v27ter_tests.c | 70 +- libs/spandsp/tests/v29_tests.c | 70 +- libs/spandsp/tests/v42_tests.c | 2 - libs/spandsp/tests/v42bis_tests.c | 2 - libs/spandsp/tests/v42bis_tests.sh | 3 - libs/spandsp/tests/v8_tests.c | 325 ++++++---- libs/spandsp/tests/vector_float_tests.c | 2 - libs/spandsp/tests/vector_int_tests.c | 2 - libs/spandsp/unpack_g722_data.sh | 3 - libs/spandsp/unpack_g726_data.sh | 3 - libs/spandsp/unpack_gsm0610_data.sh | 39 +- libs/spandsp/unpack_v56ter_data.sh | 3 - 355 files changed, 4621 insertions(+), 2135 deletions(-) create mode 100644 libs/spandsp/tests/pcap_parse.c create mode 100644 libs/spandsp/tests/pcap_parse.h create mode 100644 libs/spandsp/tests/t38_decode.c create mode 100644 libs/spandsp/tests/udptl.c create mode 100644 libs/spandsp/tests/udptl.h diff --git a/libs/spandsp/Makefile.am b/libs/spandsp/Makefile.am index 69f1b06823..193c108c6b 100644 --- a/libs/spandsp/Makefile.am +++ b/libs/spandsp/Makefile.am @@ -15,8 +15,6 @@ ## You should have received a copy of the GNU Lesser General Public ## License along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -## -## $Id: Makefile.am,v 1.49 2009/05/30 05:55:22 steveu Exp $ AM_CFLAGS = $(COMP_VENDOR_CFLAGS) AM_LDFLAGS = $(COMP_VENDOR_LDFLAGS) @@ -37,9 +35,9 @@ EXTRA_DIST = autogen.sh \ debian/rules \ debian/watch \ README.testdata \ - spandsp.pc \ spandsp.spec \ spandsp/fax-tests.dtd \ + spandsp/fax-tests.xml \ spandsp/global-tones.xml \ spandsp/tones.dtd \ spandsp/tsb85.xml \ diff --git a/libs/spandsp/autogen.sh b/libs/spandsp/autogen.sh index a32d63e370..2d9a0670da 100755 --- a/libs/spandsp/autogen.sh +++ b/libs/spandsp/autogen.sh @@ -16,9 +16,6 @@ # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# $Id: autogen.sh,v 1.6 2008/03/30 18:33:24 steveu Exp $ -# UNAME=`uname` diff --git a/libs/spandsp/configure.ac b/libs/spandsp/configure.ac index bfc348584c..3aeb44ff52 100644 --- a/libs/spandsp/configure.ac +++ b/libs/spandsp/configure.ac @@ -15,17 +15,11 @@ # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# $Id: configure.ac,v 1.73 2009/10/03 04:37:25 steveu Exp $ # @start 1 AC_INIT -CFLAGS="$CFLAGS $CONFIGURE_CFLAGS" -CXXFLAGS="$CXXFLAGS $CONFIGURE_CXXFLAGS" -LDFLAGS="$LDFLAGS $CONFIGURE_LDFLAGS" - m4_include(config/ax_compiler_vendor.m4) m4_include(config/ax_check_real_file.m4) m4_include(config/ax_fixed_point_machine.m4) @@ -209,7 +203,9 @@ AC_CHECK_HEADERS([sys/select.h]) AC_CHECK_HEADERS([sys/ioctl.h]) AC_CHECK_HEADERS([sys/fcntl.h]) AC_CHECK_HEADERS([sndfile.h]) +AC_CHECK_HEADERS([fenv.h]) AC_CHECK_HEADERS([fftw3.h], , [AC_CHECK_HEADERS([fftw.h])]) +AC_CHECK_HEADERS([pcap.h]) AC_CHECK_HEADERS([pthread.h]) if test "${build}" == "${host}" then @@ -270,6 +266,11 @@ then esac fi +#AC_DEFINE([SPANDSP_SUPPORT_T85], [1], [Support T.85 JBIG compression]) +SPANDSP_SUPPORT_T85="#undef SPANDSP_SUPPORT_T85" +#AC_DEFINE([SPANDSP_SUPPORT_V34], [1], [Support the V.34 FAX modem]) +SPANDSP_SUPPORT_V34="#undef SPANDSP_SUPPORT_V34" + AC_CHECK_LIB([m], [cos]) # Some platforms still seem to lack the basic single precision trig and power related function. AC_SEARCH_LIBS([sinf], [m], AC_DEFINE([HAVE_SINF], [1], [Define to 1 if you have the sinf() function.])) @@ -293,6 +294,7 @@ if test -n "$enable_tests" ; then AC_LANG([C]) AC_CHECK_LIB([sndfile], [sf_open], SIMLIBS="$SIMLIBS -lsndfile", AC_MSG_ERROR("Can't make tests without libsndfile (does your system require a libsndfile-devel package?)")) AC_CHECK_LIB([fftw3], [fftw_plan_dft_1d], SIMLIBS="$SIMLIBS -lfftw3", [AC_CHECK_LIB([fftw], [fftw_create_plan], SIMLIBS="$SIMLIBS -lfftw", AC_MSG_ERROR("Can't make tests without FFTW 2 or 3 (does your system require an fftw?-devel package?)"))]) + AC_CHECK_LIB([pcap], [pcap_open_offline], TESTLIBS="$TESTLIBS -lpcap", AC_MSG_ERROR("Can't make tests without libpcap (does your system require a libpcap-devel package?)")) AC_CHECK_LIB([pthread], [pthread_attr_init], TESTLIBS="$TESTLIBS -lpthread") AC_CHECK_LIB([dl], [dlopen], TESTLIBS="$TESTLIBS -ldl") AC_CHECK_LIB([Xft], [XftFontOpen], TESTLIBS="$TESTLIBS -lXft",, $TESTLIBS) @@ -366,6 +368,37 @@ sun) COMP_VENDOR_LDFLAGS= REMOVE_FROM_VAR(CFLAGS, -Xc) ;; +intel) + COMP_VENDOR_CFLAGS="-std=c99 -D_POSIX_C_SOURCE=2 -D_GNU_SOURCE=1 -Wall -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes $COMP_VENDOR_CFLAGS" + if test "$enable_sse5" = "yes" ; then + COMP_VENDOR_CFLAGS="-msse5 $COMP_VENDOR_CFLAGS" + fi + if test "$enable_sse4a" = "yes" ; then + COMP_VENDOR_CFLAGS="-msse4a $COMP_VENDOR_CFLAGS" + fi + if test "$enable_sse4_2" = "yes" ; then + COMP_VENDOR_CFLAGS="-msse42 $COMP_VENDOR_CFLAGS" + fi + if test "$enable_sse4_1" = "yes" ; then + COMP_VENDOR_CFLAGS="-msse41 $COMP_VENDOR_CFLAGS" + fi + if test "$enable_ssse3" = "yes" ; then + COMP_VENDOR_CFLAGS="-mssse3 $COMP_VENDOR_CFLAGS" + fi + if test "$enable_sse3" = "yes" ; then + COMP_VENDOR_CFLAGS="-msse3 $COMP_VENDOR_CFLAGS" + fi + if test "$enable_sse2" = "yes" ; then + COMP_VENDOR_CFLAGS="-msse2 $COMP_VENDOR_CFLAGS" + fi + if test "$enable_sse" = "yes" ; then + COMP_VENDOR_CFLAGS="-msse $COMP_VENDOR_CFLAGS" + fi + if test "$enable_mmx" = "yes" ; then + COMP_VENDOR_CFLAGS="-mmmx $COMP_VENDOR_CFLAGS" + fi + COMP_VENDOR_LDFLAGS= + ;; *) COMP_VENDOR_CFLAGS="-std=c99 -Wall -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes $COMP_VENDOR_CFLAGS" COMP_VENDOR_LDFLAGS= @@ -438,15 +471,13 @@ fi if test "$enable_builtin_tiff" = "yes" ; then abs_tiffdir="`cd $srcdir/../tiff-3.8.2/ && pwd`" - spandsp_builddir="`pwd`" - abs_tiffbuilddir="`cd $spandsp_builddir/../tiff-3.8.2/ && pwd`" save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -I$abs_tiffdir/libtiff" AC_CHECK_HEADERS([tiffio.h]) CFLAGS="$save_CFLAGS" COMP_VENDOR_CFLAGS="-I$abs_tiffdir/libtiff $COMP_VENDOR_CFLAGS" COMP_VENDOR_LDFLAGS="-L$abs_tiffdir/libtiff $COMP_VENDOR_LDFLAGS" - LIBS="$LIBS $abs_tiffbuilddir/libtiff/libtiff.la" + LIBS="$LIBS $abs_tiffdir/libtiff/libtiff.la" AC_DEFINE([HAVE_LIBTIFF], [1], [Define to 1 if you have the `tiff' library (-ltiff).]) else AC_CHECK_HEADERS([tiffio.h]) @@ -464,6 +495,8 @@ AC_SUBST(TESTLIBS) AC_SUBST(SPANDSP_USE_FIXED_POINT) AC_SUBST(SPANDSP_MISALIGNED_ACCESS_FAILS) AC_SUBST(SPANDSP_USE_EXPORT_CAPABILITY) +AC_SUBST(SPANDSP_SUPPORT_T85) +AC_SUBST(SPANDSP_SUPPORT_V34) AC_SUBST(INSERT_INTTYPES_HEADER) AC_SUBST(INSERT_STDINT_HEADER) AC_SUBST(INSERT_TGMATH_HEADER) diff --git a/libs/spandsp/doc/Makefile.am b/libs/spandsp/doc/Makefile.am index ba4386a156..b85883f4f7 100644 --- a/libs/spandsp/doc/Makefile.am +++ b/libs/spandsp/doc/Makefile.am @@ -15,8 +15,6 @@ ## You should have received a copy of the GNU Lesser General Public ## License along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -## -## $Id: Makefile.am,v 1.12 2008/09/20 15:44:40 steveu Exp $ MAINTAINERCLEANFILES = Makefile.in diff --git a/libs/spandsp/doc/t38_manual.xml b/libs/spandsp/doc/t38_manual.xml index 095d7d7d03..7edcd9583c 100644 --- a/libs/spandsp/doc/t38_manual.xml +++ b/libs/spandsp/doc/t38_manual.xml @@ -1,7 +1,6 @@ - 2007-11-14 diff --git a/libs/spandsp/spandsp-sim/Makefile.am b/libs/spandsp/spandsp-sim/Makefile.am index 63fb09473b..d33575a55c 100644 --- a/libs/spandsp/spandsp-sim/Makefile.am +++ b/libs/spandsp/spandsp-sim/Makefile.am @@ -15,8 +15,6 @@ ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -## -## $Id: Makefile.am,v 1.10 2009/06/02 16:03:55 steveu Exp $ AM_CFLAGS = $(COMP_VENDOR_CFLAGS) AM_LDFLAGS = $(COMP_VENDOR_LDFLAGS) diff --git a/libs/spandsp/spandsp-sim/g1050.c b/libs/spandsp/spandsp-sim/g1050.c index 10b7753226..afdcf82d63 100644 --- a/libs/spandsp/spandsp-sim/g1050.c +++ b/libs/spandsp/spandsp-sim/g1050.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: g1050.c,v 1.17 2009/06/02 14:55:36 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/spandsp-sim/line_model.c b/libs/spandsp/spandsp-sim/line_model.c index 88af203ab0..001af2c581 100644 --- a/libs/spandsp/spandsp-sim/line_model.c +++ b/libs/spandsp/spandsp-sim/line_model.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: line_model.c,v 1.14 2009/09/23 16:02:59 steveu Exp $ */ #if defined(HAVE_CONFIG_H) @@ -505,12 +503,15 @@ SPAN_DECLARE(int) one_way_line_model_release(one_way_line_model_state_t *s) SPAN_DECLARE(both_ways_line_model_state_t *) both_ways_line_model_init(int model1, float noise1, + float echo_level_cpe1, + float echo_level_co1, int model2, float noise2, + float echo_level_cpe2, + float echo_level_co2, int codec, int rbs_pattern) { - float echo_level; both_ways_line_model_state_t *s; if ((s = (both_ways_line_model_state_t *) malloc(sizeof(*s))) == NULL) @@ -549,11 +550,10 @@ SPAN_DECLARE(both_ways_line_model_state_t *) both_ways_line_model_init(int model s->line2.mains_interference = 0; /* Echos */ - echo_level = -15; /* in dB */ - s->line1.near_co_hybrid_echo = pow(10, echo_level/20.0f); - s->line2.near_co_hybrid_echo = pow(10, echo_level/20.0f); - s->line1.near_cpe_hybrid_echo = pow(10, echo_level/20.0f); - s->line2.near_cpe_hybrid_echo = pow(10, echo_level/20.0f); + s->line1.near_co_hybrid_echo = pow(10, echo_level_co1/20.0f); + s->line2.near_co_hybrid_echo = pow(10, echo_level_co2/20.0f); + s->line1.near_cpe_hybrid_echo = pow(10, echo_level_cpe1/20.0f); + s->line2.near_cpe_hybrid_echo = pow(10, echo_level_cpe2/20.0f); return s; } diff --git a/libs/spandsp/spandsp-sim/make_line_models.c b/libs/spandsp/spandsp-sim/make_line_models.c index 42fac11fa8..fd7b81f72f 100644 --- a/libs/spandsp/spandsp-sim/make_line_models.c +++ b/libs/spandsp/spandsp-sim/make_line_models.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: make_line_models.c,v 1.10 2009/09/23 16:02:59 steveu Exp $ */ /*! \page make_line_models_page Telephony line model construction diff --git a/libs/spandsp/spandsp-sim/rfc2198_sim.c b/libs/spandsp/spandsp-sim/rfc2198_sim.c index 16929bf158..b187ae6e15 100644 --- a/libs/spandsp/spandsp-sim/rfc2198_sim.c +++ b/libs/spandsp/spandsp-sim/rfc2198_sim.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: rfc2198_sim.c,v 1.10 2009/06/01 16:27:12 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/spandsp-sim/spandsp-sim.h b/libs/spandsp/spandsp-sim/spandsp-sim.h index 8dfa9b3374..ea15435665 100644 --- a/libs/spandsp/spandsp-sim/spandsp-sim.h +++ b/libs/spandsp/spandsp-sim/spandsp-sim.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: spandsp-sim.h,v 1.5 2008/04/26 13:39:16 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/spandsp-sim/spandsp/g1050.h b/libs/spandsp/spandsp-sim/spandsp/g1050.h index b7ffb80574..731947b39c 100644 --- a/libs/spandsp/spandsp-sim/spandsp/g1050.h +++ b/libs/spandsp/spandsp-sim/spandsp/g1050.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: g1050.h,v 1.12 2009/06/01 16:27:12 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/spandsp-sim/spandsp/line_model.h b/libs/spandsp/spandsp-sim/spandsp/line_model.h index ce8f7ddd09..550e8a80fe 100644 --- a/libs/spandsp/spandsp-sim/spandsp/line_model.h +++ b/libs/spandsp/spandsp-sim/spandsp/line_model.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: line_model.h,v 1.7.4.1 2009/12/19 10:16:44 steveu Exp $ */ /*! \file */ @@ -147,8 +145,12 @@ SPAN_DECLARE(void) both_ways_line_model_set_mains_pickup(both_ways_line_model_st SPAN_DECLARE(both_ways_line_model_state_t *) both_ways_line_model_init(int model1, float noise1, + float echo_level_cpe1, + float echo_level_co1, int model2, float noise2, + float echo_level_cpe2, + float echo_level_co2, int codec, int rbs_pattern); diff --git a/libs/spandsp/spandsp-sim/spandsp/line_models.h b/libs/spandsp/spandsp-sim/spandsp/line_models.h index bf68f936de..3acdd4492c 100644 --- a/libs/spandsp/spandsp-sim/spandsp/line_models.h +++ b/libs/spandsp/spandsp-sim/spandsp/line_models.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: line_models.h,v 1.3 2008/04/17 18:03:23 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/spandsp-sim/spandsp/rfc2198_sim.h b/libs/spandsp/spandsp-sim/spandsp/rfc2198_sim.h index 51618028dc..a0c3d64b62 100644 --- a/libs/spandsp/spandsp-sim/spandsp/rfc2198_sim.h +++ b/libs/spandsp/spandsp-sim/spandsp/rfc2198_sim.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: rfc2198_sim.h,v 1.6 2009/05/31 14:47:10 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/spandsp-sim/spandsp/test_utils.h b/libs/spandsp/spandsp-sim/spandsp/test_utils.h index f64c838374..22815a35c6 100644 --- a/libs/spandsp/spandsp-sim/spandsp/test_utils.h +++ b/libs/spandsp/spandsp-sim/spandsp/test_utils.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: test_utils.h,v 1.9 2009/05/31 14:47:10 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/spandsp-sim/test_utils.c b/libs/spandsp/spandsp-sim/test_utils.c index 992da5cba8..d2fc2fc7e5 100644 --- a/libs/spandsp/spandsp-sim/test_utils.c +++ b/libs/spandsp/spandsp-sim/test_utils.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: test_utils.c,v 1.14 2009/06/01 16:27:12 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/spandsp/global-tones.xml b/libs/spandsp/spandsp/global-tones.xml index a1012bab93..466dae5d2f 100644 --- a/libs/spandsp/spandsp/global-tones.xml +++ b/libs/spandsp/spandsp/global-tones.xml @@ -365,6 +365,7 @@ + @@ -444,6 +445,7 @@ + @@ -596,6 +598,7 @@ + @@ -1080,6 +1083,7 @@ + @@ -1201,6 +1205,7 @@ + @@ -1647,6 +1652,7 @@ + @@ -1700,6 +1706,7 @@ + @@ -1967,6 +1974,7 @@ + @@ -2181,6 +2189,7 @@ + @@ -2210,6 +2219,7 @@ + @@ -2419,6 +2429,7 @@ + @@ -2571,6 +2582,7 @@ + @@ -3136,6 +3148,7 @@ + @@ -3227,6 +3240,7 @@ + @@ -3247,6 +3261,7 @@ + @@ -3268,6 +3283,7 @@ + @@ -4181,6 +4197,7 @@ + @@ -4622,6 +4639,7 @@ + @@ -4858,6 +4876,7 @@ + @@ -5248,6 +5267,7 @@ + @@ -5412,6 +5432,7 @@ + @@ -5902,6 +5923,7 @@ + @@ -6144,6 +6166,7 @@ + @@ -6357,6 +6380,7 @@ + @@ -6417,6 +6441,7 @@ + @@ -6634,6 +6659,7 @@ + @@ -6701,6 +6727,7 @@ + @@ -6907,6 +6934,7 @@ + @@ -7246,6 +7274,7 @@ + diff --git a/libs/spandsp/spandsp/tsb85.xml b/libs/spandsp/spandsp/tsb85.xml index 01ebf29efa..cd0d5db807 100644 --- a/libs/spandsp/spandsp/tsb85.xml +++ b/libs/spandsp/spandsp/tsb85.xml @@ -1,7 +1,6 @@ - @@ -1270,7 +1269,7 @@ - + @@ -1292,7 +1291,7 @@ - + diff --git a/libs/spandsp/src/Makefile.am b/libs/spandsp/src/Makefile.am index 3ed16a618b..7e8af50f5f 100644 --- a/libs/spandsp/src/Makefile.am +++ b/libs/spandsp/src/Makefile.am @@ -15,8 +15,6 @@ ## You should have received a copy of the GNU Lesser General Public ## License along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -## -## $Id: Makefile.am,v 1.138.4.3 2009/12/19 10:30:10 steveu Exp $ AM_CFLAGS = $(COMP_VENDOR_CFLAGS) AM_LDFLAGS = $(COMP_VENDOR_LDFLAGS) @@ -56,8 +54,8 @@ EXTRA_DIST = floating_fudge.h \ libtiff.2005.vcproj \ libtiff.2008.vcproj \ filter_tools.c \ - make_at_dictionary.c \ - make_modem_filter.c \ + make_at_dictionary.c \ + make_modem_filter.c \ msvc/config.h \ msvc/Download_TIFF.2005.vcproj \ msvc/Download_TIFF.2008.vcproj \ @@ -118,6 +116,7 @@ libspandsp_la_SOURCES = adsi.c \ gsm0610_short_term.c \ hdlc.c \ ima_adpcm.c \ + image_translate.c \ logging.c \ lpc10_analyse.c \ lpc10_decode.c \ @@ -151,6 +150,7 @@ libspandsp_la_SOURCES = adsi.c \ t38_terminal.c \ testcpuid.c \ time_scale.c \ + timezone.c \ tone_detect.c \ tone_generate.c \ v17rx.c \ @@ -201,6 +201,7 @@ nobase_include_HEADERS = spandsp/adsi.h \ spandsp/gsm0610.h \ spandsp/hdlc.h \ spandsp/ima_adpcm.h \ + spandsp/image_translate.h \ spandsp/logging.h \ spandsp/lpc10.h \ spandsp/modem_echo.h \ @@ -218,8 +219,6 @@ nobase_include_HEADERS = spandsp/adsi.h \ spandsp/super_tone_rx.h \ spandsp/super_tone_tx.h \ spandsp/swept_tone.h \ - spandsp/t4_rx.h \ - spandsp/t4_tx.h \ spandsp/t30.h \ spandsp/t30_api.h \ spandsp/t30_fcf.h \ @@ -230,8 +229,13 @@ nobase_include_HEADERS = spandsp/adsi.h \ spandsp/t38_gateway.h \ spandsp/t38_non_ecm_buffer.h \ spandsp/t38_terminal.h \ + spandsp/t4_rx.h \ + spandsp/t4_tx.h \ + spandsp/t4_t6_decode.h \ + spandsp/t4_t6_encode.h \ spandsp/telephony.h \ spandsp/time_scale.h \ + spandsp/timezone.h \ spandsp/timing.h \ spandsp/tone_detect.h \ spandsp/tone_generate.h \ @@ -267,6 +271,7 @@ nobase_include_HEADERS = spandsp/adsi.h \ spandsp/private/gsm0610.h \ spandsp/private/hdlc.h \ spandsp/private/ima_adpcm.h \ + spandsp/private/image_translate.h \ spandsp/private/logging.h \ spandsp/private/lpc10.h \ spandsp/private/modem_connect_tones.h \ @@ -289,7 +294,10 @@ nobase_include_HEADERS = spandsp/adsi.h \ spandsp/private/t38_terminal.h \ spandsp/private/t4_rx.h \ spandsp/private/t4_tx.h \ + spandsp/private/t4_t6_decode.h \ + spandsp/private/t4_t6_encode.h \ spandsp/private/time_scale.h \ + spandsp/private/timezone.h \ spandsp/private/tone_detect.h \ spandsp/private/tone_generate.h \ spandsp/private/v17rx.h \ @@ -307,16 +315,16 @@ nobase_include_HEADERS = spandsp/adsi.h \ nodist_include_HEADERS = spandsp.h -noinst_HEADERS = faxfont.h \ - filter_tools.h \ - gsm0610_local.h \ - lpc10_encdecs.h \ - mmx_sse_decs.h \ - t30_local.h \ - t4_t6_decode_states.h \ - v17_v32bis_rx_constellation_maps.h \ - v17_v32bis_tx_constellation_maps.h \ - v29tx_constellation_maps.h +noinst_HEADERS = faxfont.h \ + filter_tools.h \ + gsm0610_local.h \ + lpc10_encdecs.h \ + mmx_sse_decs.h \ + t30_local.h \ + t4_t6_decode_states.h \ + v17_v32bis_rx_constellation_maps.h \ + v17_v32bis_tx_constellation_maps.h \ + v29tx_constellation_maps.h make_at_dictionary$(EXEEXT): $(top_srcdir)/src/make_at_dictionary.c $(CC_FOR_BUILD) -o make_at_dictionary$(EXEEXT) $(top_srcdir)/src/make_at_dictionary.c -DHAVE_CONFIG_H -I$(top_builddir)/src @@ -334,13 +342,16 @@ at_interpreter.lo: at_interpreter_dictionary.h at_interpreter_dictionary.h: make_at_dictionary$(EXEEXT) ./make_at_dictionary$(EXEEXT) >at_interpreter_dictionary.h -t4.$(OBJEXT): spandsp/version.h +t4_rx.$(OBJEXT): spandsp/version.h -t4.lo: spandsp/version.h +t4_rx.lo: spandsp/version.h -v17rx.$(OBJEXT): v17_v32bis_rx_fixed_rrc.h v17_v32bis_rx_floating_rrc.h +V17_V32BIS_RX_INCL = v17_v32bis_rx_fixed_rrc.h \ + v17_v32bis_rx_floating_rrc.h -v17rx.lo: v17_v32bis_rx_fixed_rrc.h v17_v32bis_rx_floating_rrc.h +v17rx.$(OBJEXT): ${V17_V32BIS_RX_INCL} + +v17rx.lo: ${V17_V32BIS_RX_INCL} v17_v32bis_rx_fixed_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.17 -i -r >v17_v32bis_rx_fixed_rrc.h @@ -348,9 +359,12 @@ v17_v32bis_rx_fixed_rrc.h: make_modem_filter$(EXEEXT) v17_v32bis_rx_floating_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.17 -r >v17_v32bis_rx_floating_rrc.h -v17tx.$(OBJEXT): v17_v32bis_tx_fixed_rrc.h v17_v32bis_tx_floating_rrc.h +V17_V32BIS_TX_INCL = v17_v32bis_tx_fixed_rrc.h \ + v17_v32bis_tx_floating_rrc.h -v17tx.lo: v17_v32bis_tx_fixed_rrc.h v17_v32bis_tx_floating_rrc.h +v17tx.$(OBJEXT): ${V17_V32BIS_TX_INCL} + +v17tx.lo: ${V17_V32BIS_TX_INCL} v17_v32bis_tx_fixed_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.17 -i -t >v17_v32bis_tx_fixed_rrc.h @@ -358,15 +372,14 @@ v17_v32bis_tx_fixed_rrc.h: make_modem_filter$(EXEEXT) v17_v32bis_tx_floating_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.17 -t >v17_v32bis_tx_floating_rrc.h -v22bis_rx.$(OBJEXT): v22bis_rx_1200_fixed_rrc.h \ - v22bis_rx_2400_fixed_rrc.h \ - v22bis_rx_1200_floating_rrc.h \ - v22bis_rx_2400_floating_rrc.h +V22BIS_RX_INCL = v22bis_rx_1200_fixed_rrc.h \ + v22bis_rx_2400_fixed_rrc.h \ + v22bis_rx_1200_floating_rrc.h \ + v22bis_rx_2400_floating_rrc.h -v22bis_rx.lo: v22bis_rx_1200_fixed_rrc.h \ - v22bis_rx_2400_fixed_rrc.h \ - v22bis_rx_1200_floating_rrc.h \ - v22bis_rx_2400_floating_rrc.h +v22bis_rx.$(OBJEXT): ${V22BIS_RX_INCL} + +v22bis_rx.lo: ${V22BIS_RX_INCL} v22bis_rx_1200_fixed_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.22bis1200 -i -r >v22bis_rx_1200_fixed_rrc.h @@ -380,9 +393,12 @@ v22bis_rx_1200_floating_rrc.h: make_modem_filter$(EXEEXT) v22bis_rx_2400_floating_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.22bis2400 -r >v22bis_rx_2400_floating_rrc.h -v22bis_tx.$(OBJEXT): v22bis_tx_fixed_rrc.h v22bis_tx_floating_rrc.h +V22BIS_TX_INCL = v22bis_tx_fixed_rrc.h \ + v22bis_tx_floating_rrc.h -v22bis_tx.lo: v22bis_tx_fixed_rrc.h v22bis_tx_floating_rrc.h +v22bis_tx.$(OBJEXT): ${V22BIS_TX_INCL} + +v22bis_tx.lo: ${V22BIS_TX_INCL} v22bis_tx_fixed_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.22bis -i -t >v22bis_tx_fixed_rrc.h @@ -390,16 +406,15 @@ v22bis_tx_fixed_rrc.h: make_modem_filter$(EXEEXT) v22bis_tx_floating_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.22bis -t >v22bis_tx_floating_rrc.h -v27ter_rx_.$(OBJEXT): v27ter_rx_2400_fixed_rrc.h \ - v27ter_rx_4800_fixed_rrc.h \ - v27ter_rx_2400_floating_rrc.h \ - v27ter_rx_4800_floating_rrc.h - -v27ter_rx.lo: v27ter_rx_2400_fixed_rrc.h \ +V27_RX_INCL = v27ter_rx_2400_fixed_rrc.h \ v27ter_rx_4800_fixed_rrc.h \ v27ter_rx_2400_floating_rrc.h \ v27ter_rx_4800_floating_rrc.h +v27ter_rx.$(OBJEXT): ${V27_RX_INCL} + +v27ter_rx.lo: ${V27_RX_INCL} + v27ter_rx_2400_fixed_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.27ter2400 -i -r >v27ter_rx_2400_fixed_rrc.h @@ -412,15 +427,14 @@ v27ter_rx_2400_floating_rrc.h: make_modem_filter$(EXEEXT) v27ter_rx_4800_floating_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.27ter4800 -r >v27ter_rx_4800_floating_rrc.h -v27ter_tx_.$(OBJEXT): v27ter_tx_2400_fixed_rrc.h \ - v27ter_tx_4800_fixed_rrc.h \ - v27ter_tx_2400_floating_rrc.h \ - v27ter_tx_4800_floating_rrc.h +V27TER_TX_INCL = v27ter_tx_2400_fixed_rrc.h \ + v27ter_tx_4800_fixed_rrc.h \ + v27ter_tx_2400_floating_rrc.h \ + v27ter_tx_4800_floating_rrc.h -v27ter_tx.lo: v27ter_tx_2400_fixed_rrc.h \ - v27ter_tx_4800_fixed_rrc.h \ - v27ter_tx_2400_floating_rrc.h \ - v27ter_tx_4800_floating_rrc.h +v27ter_tx_.$(OBJEXT): ${V27TER_TX_INCL} + +v27ter_tx.lo: ${V27TER_TX_INCL} v27ter_tx_2400_fixed_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.27ter2400 -i -t >v27ter_tx_2400_fixed_rrc.h @@ -434,9 +448,12 @@ v27ter_tx_2400_floating_rrc.h: make_modem_filter$(EXEEXT) v27ter_tx_4800_floating_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.27ter4800 -t >v27ter_tx_4800_floating_rrc.h -v29rx.$(OBJEXT): v29rx_fixed_rrc.h v29rx_floating_rrc.h +V29_RX_INCL = v29rx_fixed_rrc.h \ + v29rx_floating_rrc.h -v29rx.lo: v29rx_fixed_rrc.h v29rx_floating_rrc.h +v29rx.$(OBJEXT): ${V29_RX_INCL} + +v29rx.lo: ${V29_RX_INCL} v29rx_fixed_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.29 -i -r >v29rx_fixed_rrc.h @@ -444,9 +461,12 @@ v29rx_fixed_rrc.h: make_modem_filter$(EXEEXT) v29rx_floating_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.29 -r >v29rx_floating_rrc.h -v29tx.$(OBJEXT): v29tx_fixed_rrc.h v29tx_floating_rrc.h +V29_TX_INCL = v29tx_fixed_rrc.h \ + v29tx_floating_rrc.h -v29tx.lo: v29tx_fixed_rrc.h v29tx_floating_rrc.h +v29tx.$(OBJEXT): ${V29_TX_INCL} + +v29tx.lo: ${V29_TX_INCL} v29tx_fixed_rrc.h: make_modem_filter$(EXEEXT) ./make_modem_filter$(EXEEXT) -m V.29 -i -t >v29tx_fixed_rrc.h @@ -519,11 +539,11 @@ $(srcdir)/msvc/spandsp.h: spandsp.h.in -e "s/\@INSERT_INTTYPES_HEADER\@/#include /" \ -e "s/\@INSERT_MATH_HEADER\@/#include /" $(srcdir)/spandsp.h.in > $(srcdir)/msvc/spandsp.h +dist-hook: spandsp/version.h + spandsp/version.h: mkdir -p $(@D) NOWDATE=`date --utc +"%Y%m%d"` ; \ NOWTIME=`date --utc +"%H%M%S"` ; \ sed 's/$$SPANDSP_RELEASE_DATE/'$$NOWDATE'/;s/$$SPANDSP_RELEASE_TIME/'$$NOWTIME'/' \ <$(srcdir)/spandsp/version.h.in >$@ - -dist-hook: spandsp/version.h diff --git a/libs/spandsp/src/adsi.c b/libs/spandsp/src/adsi.c index 2e4de25ad1..207c893e09 100644 --- a/libs/spandsp/src/adsi.c +++ b/libs/spandsp/src/adsi.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: adsi.c,v 1.77 2009/11/02 13:25:20 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/async.c b/libs/spandsp/src/async.c index 29974df2de..e24d84343b 100644 --- a/libs/spandsp/src/async.c +++ b/libs/spandsp/src/async.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: async.c,v 1.19 2009/04/23 14:12:34 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/at_interpreter.c b/libs/spandsp/src/at_interpreter.c index f34d875981..9bf0d4aa1a 100644 --- a/libs/spandsp/src/at_interpreter.c +++ b/libs/spandsp/src/at_interpreter.c @@ -24,8 +24,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: at_interpreter.c,v 1.42.4.1 2009/12/23 14:18:32 steveu Exp $ */ /*! \file */ @@ -245,13 +243,21 @@ SPAN_DECLARE(void) at_call_event(at_state_t *s, int event) } else { - /* FAX modem connection */ - at_set_at_rx_mode(s, AT_MODE_DELIVERY); - if (s->silent_dial) - at_modem_control(s, AT_MODEM_CONTROL_RESTART, (void *) FAX_MODEM_NOCNG_TONE); + if (s->command_dial) + { + at_put_response_code(s, AT_RESPONSE_CODE_OK); + at_set_at_rx_mode(s, AT_MODE_OFFHOOK_COMMAND); + } else - at_modem_control(s, AT_MODEM_CONTROL_RESTART, (void *) FAX_MODEM_CNG_TONE); - s->dte_is_waiting = TRUE; + { + /* FAX modem connection */ + at_set_at_rx_mode(s, AT_MODE_DELIVERY); + if (s->silent_dial) + at_modem_control(s, AT_MODEM_CONTROL_RESTART, (void *) FAX_MODEM_NOCNG_TONE); + else + at_modem_control(s, AT_MODEM_CONTROL_RESTART, (void *) FAX_MODEM_CNG_TONE); + s->dte_is_waiting = TRUE; + } } break; case AT_CALL_EVENT_BUSY: @@ -369,7 +375,7 @@ static int parse_num(const char **s, int max_value) /* The spec. says no digits is valid, and should be treated as zero. */ i = 0; - while (isdigit(**s)) + while (isdigit((int) **s)) { i = i*10 + ((**s) - '0'); (*s)++; @@ -387,7 +393,7 @@ static int parse_hex_num(const char **s, int max_value) /* The spec. says a hex value is always 2 digits, and the alpha digits are upper case. */ i = 0; - if (isdigit(**s)) + if (isdigit((int) **s)) i = **s - '0'; else if (**s >= 'A' && **s <= 'F') i = **s - 'A'; @@ -395,7 +401,7 @@ static int parse_hex_num(const char **s, int max_value) return -1; (*s)++; - if (isdigit(**s)) + if (isdigit((int) **s)) i = (i << 4) | (**s - '0'); else if (**s >= 'A' && **s <= 'F') i = (i << 4) | (**s - 'A'); @@ -847,6 +853,7 @@ static const char *at_cmd_D(at_state_t *s, const char *t) at_reset_call_info(s); s->do_hangup = FALSE; s->silent_dial = FALSE; + s->command_dial = FALSE; t += 1; ok = FALSE; /* There are a numbers of options in a dial command string. @@ -855,7 +862,7 @@ static const char *at_cmd_D(at_state_t *s, const char *t) u = num; for ( ; (ch = *t); t++) { - if (isdigit(ch)) + if (isdigit((int) ch)) { /* V.250 6.3.1.1 Basic digit set */ *u++ = ch; @@ -926,7 +933,7 @@ static const char *at_cmd_D(at_state_t *s, const char *t) break; case ';': /* V.250 6.3.1 - Dial string terminator - make voice call and remain in command mode */ - /* TODO: */ + s->command_dial = TRUE; break; case '>': /* GSM07.07 6.2 - Direct dialling from phone book supplementary service subscription @@ -5319,7 +5326,7 @@ static int command_search(const char *u, int len, int *matched) { /* The character in u we are processing... */ /* V.250 5.4.1 says upper and lower case are equivalent in commands */ - index = (unsigned char) toupper(u[i]); + index = toupper((int) u[i]); /* Is there a child node for this character? */ /* Note: First and last could have been packed into one uint16_t, but space is not that critical, so the other packing is good diff --git a/libs/spandsp/src/awgn.c b/libs/spandsp/src/awgn.c index f0e246a1fb..e97dd6be0b 100644 --- a/libs/spandsp/src/awgn.c +++ b/libs/spandsp/src/awgn.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: awgn.c,v 1.22 2009/02/10 13:06:46 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/bell_r2_mf.c b/libs/spandsp/src/bell_r2_mf.c index ae12475921..e61b782dc5 100644 --- a/libs/spandsp/src/bell_r2_mf.c +++ b/libs/spandsp/src/bell_r2_mf.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bell_r2_mf.c,v 1.39.4.1 2009/12/23 14:23:48 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/bert.c b/libs/spandsp/src/bert.c index 69defc1dc2..c697b39a7a 100644 --- a/libs/spandsp/src/bert.c +++ b/libs/spandsp/src/bert.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bert.c,v 1.33 2009/04/14 16:04:53 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/src/bit_operations.c b/libs/spandsp/src/bit_operations.c index 547536b68c..a301c03ec2 100644 --- a/libs/spandsp/src/bit_operations.c +++ b/libs/spandsp/src/bit_operations.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bit_operations.c,v 1.16 2009/02/03 16:28:39 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/bitstream.c b/libs/spandsp/src/bitstream.c index 25468d7391..9a8c0bc9dd 100644 --- a/libs/spandsp/src/bitstream.c +++ b/libs/spandsp/src/bitstream.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bitstream.c,v 1.18.4.1 2009/12/28 12:20:46 steveu Exp $ */ /*! \file */ @@ -74,15 +72,27 @@ SPAN_DECLARE(void) bitstream_put(bitstream_state_t *s, uint8_t **c, uint32_t val } /*- End of function --------------------------------------------------------*/ +SPAN_DECLARE(void) bitstream_emit(bitstream_state_t *s, uint8_t **c) +{ + uint32_t bitstream; + + if (s->residue > 0) + { + bitstream = s->bitstream & ((1 << s->residue) - 1); + if (s->lsb_first) + *(*c) = (uint8_t) bitstream; + else + *(*c) = (uint8_t) (bitstream << (8 - s->residue)); + } +} +/*- End of function --------------------------------------------------------*/ + SPAN_DECLARE(void) bitstream_flush(bitstream_state_t *s, uint8_t **c) { if (s->residue > 0) { - s->bitstream &= ((1 << s->residue) - 1); - if (s->lsb_first) - *(*c)++ = (uint8_t) s->bitstream; - else - *(*c)++ = (uint8_t) (s->bitstream << (8 - s->residue)); + bitstream_emit(s, c); + (*c)++; s->residue = 0; } s->bitstream = 0; diff --git a/libs/spandsp/src/complex_filters.c b/libs/spandsp/src/complex_filters.c index 7ae4a1323e..36af84b36a 100644 --- a/libs/spandsp/src/complex_filters.c +++ b/libs/spandsp/src/complex_filters.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: complex_filters.c,v 1.16 2009/02/03 16:28:39 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/src/complex_vector_float.c b/libs/spandsp/src/complex_vector_float.c index 3dffbb08ca..ebb6accba4 100644 --- a/libs/spandsp/src/complex_vector_float.c +++ b/libs/spandsp/src/complex_vector_float.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: complex_vector_float.c,v 1.16 2009/07/12 09:23:09 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/complex_vector_int.c b/libs/spandsp/src/complex_vector_int.c index d55009d491..0bf7eb8a98 100644 --- a/libs/spandsp/src/complex_vector_int.c +++ b/libs/spandsp/src/complex_vector_int.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: complex_vector_int.c,v 1.9 2009/07/12 09:23:09 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/crc.c b/libs/spandsp/src/crc.c index c82c58e3ab..f970fe8a2c 100644 --- a/libs/spandsp/src/crc.c +++ b/libs/spandsp/src/crc.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: crc.c,v 1.6 2009/02/03 16:28:39 steveu Exp $ */ /*! \file */ @@ -41,70 +39,38 @@ static const uint32_t crc_itu32_table[] = { - 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, - 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, - 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, - 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, - 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, - 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, - 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, - 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, - 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, - 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, - 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, - 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, - 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, - 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, - 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, - 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, - 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, - 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, - 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, - 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, - 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, - 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, - 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, - 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, - 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, - 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, - 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, - 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, - 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, - 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, - 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, - 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, - 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, - 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, - 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, - 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, - 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, - 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, - 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, - 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, - 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, - 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, - 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, - 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, - 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, - 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, - 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, - 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, - 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, - 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, - 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, - 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, - 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, - 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, - 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, - 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, - 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, - 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, - 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, - 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, - 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, - 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, - 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, - 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, + 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, + 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, + 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, + 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, + 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, + 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, + 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, + 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D }; SPAN_DECLARE(uint32_t) crc_itu32_calc(const uint8_t *buf, int len, uint32_t crc) @@ -194,6 +160,22 @@ SPAN_DECLARE(uint16_t) crc_itu16_calc(const uint8_t *buf, int len, uint16_t crc) } /*- End of function --------------------------------------------------------*/ +SPAN_DECLARE(uint16_t) crc_itu16_bits(uint8_t buf, int len, uint16_t crc) +{ + int i; + + for (i = 0; i < len; i++) + { + if (((buf ^ crc) & 1)) + crc = (crc >> 1) ^ 0x8408; + else + crc = crc >> 1; + buf >>= 1; + } + return crc; +} +/*- End of function --------------------------------------------------------*/ + SPAN_DECLARE(int) crc_itu16_append(uint8_t *buf, int len) { uint16_t crc; diff --git a/libs/spandsp/src/dds_float.c b/libs/spandsp/src/dds_float.c index 8acf7c0c3b..4acaa1eaf9 100644 --- a/libs/spandsp/src/dds_float.c +++ b/libs/spandsp/src/dds_float.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: dds_float.c,v 1.11 2009/02/03 16:28:39 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/dds_int.c b/libs/spandsp/src/dds_int.c index 9f30d83c80..cf75ecc9c3 100644 --- a/libs/spandsp/src/dds_int.c +++ b/libs/spandsp/src/dds_int.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: dds_int.c,v 1.16 2009/02/21 04:27:46 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/dtmf.c b/libs/spandsp/src/dtmf.c index fca60dd4d1..b07f8ec120 100644 --- a/libs/spandsp/src/dtmf.c +++ b/libs/spandsp/src/dtmf.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: dtmf.c,v 1.53 2009/04/12 09:12:10 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/echo.c b/libs/spandsp/src/echo.c index 23bb868bbd..13a685d316 100644 --- a/libs/spandsp/src/echo.c +++ b/libs/spandsp/src/echo.c @@ -26,8 +26,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: echo.c,v 1.33 2009/09/22 13:11:04 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/fax.c b/libs/spandsp/src/fax.c index 99808d86ef..ae10069e82 100644 --- a/libs/spandsp/src/fax.c +++ b/libs/spandsp/src/fax.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fax.c,v 1.96.4.1 2009/12/19 10:44:10 steveu Exp $ */ /*! \file */ @@ -55,6 +53,7 @@ #include "spandsp/logging.h" #include "spandsp/queue.h" #include "spandsp/dc_restore.h" +#include "spandsp/vector_int.h" #include "spandsp/power_meter.h" #include "spandsp/complex.h" #include "spandsp/tone_detect.h" @@ -62,17 +61,24 @@ #include "spandsp/async.h" #include "spandsp/hdlc.h" #include "spandsp/silence_gen.h" +#include "spandsp/super_tone_rx.h" #include "spandsp/fsk.h" +#include "spandsp/modem_connect_tones.h" +#include "spandsp/v8.h" #include "spandsp/v29tx.h" #include "spandsp/v29rx.h" #include "spandsp/v27ter_tx.h" #include "spandsp/v27ter_rx.h" #include "spandsp/v17tx.h" #include "spandsp/v17rx.h" -#include "spandsp/super_tone_rx.h" -#include "spandsp/modem_connect_tones.h" #include "spandsp/t4_rx.h" #include "spandsp/t4_tx.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/t81_t82_arith_coding.h" +#include "spandsp/t85.h" +#endif +#include "spandsp/t4_t6_decode.h" +#include "spandsp/t4_t6_encode.h" #include "spandsp/t30_fcf.h" #include "spandsp/t35.h" @@ -86,15 +92,22 @@ #include "spandsp/private/logging.h" #include "spandsp/private/silence_gen.h" #include "spandsp/private/fsk.h" +#include "spandsp/private/modem_connect_tones.h" +#include "spandsp/private/v8.h" #include "spandsp/private/v17tx.h" #include "spandsp/private/v17rx.h" #include "spandsp/private/v27ter_tx.h" #include "spandsp/private/v27ter_rx.h" #include "spandsp/private/v29tx.h" #include "spandsp/private/v29rx.h" -#include "spandsp/private/modem_connect_tones.h" #include "spandsp/private/hdlc.h" #include "spandsp/private/fax_modems.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/private/t81_t82_arith_coding.h" +#include "spandsp/private/t85.h" +#endif +#include "spandsp/private/t4_t6_decode.h" +#include "spandsp/private/t4_t6_encode.h" #include "spandsp/private/t4_rx.h" #include "spandsp/private/t4_tx.h" #include "spandsp/private/t30.h" @@ -121,6 +134,17 @@ static void tone_detected(void *user_data, int tone, int level, int delay) } /*- End of function --------------------------------------------------------*/ +#if 0 +static void v8_handler(void *user_data, v8_parms_t *result) +{ + fax_state_t *s; + + s = (fax_state_t *) user_data; + span_log(&s->logging, SPAN_LOG_FLOW, "V.8 report received\n"); +} +/*- End of function --------------------------------------------------------*/ +#endif + static void hdlc_underflow_handler(void *user_data) { t30_state_t *s; @@ -284,7 +308,7 @@ static int v29_v21_rx_fillin(void *user_data, int len) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) fax_rx(fax_state_t *s, int16_t *amp, int len) +SPAN_DECLARE_NONSTD(int) fax_rx(fax_state_t *s, int16_t *amp, int len) { int i; @@ -300,7 +324,7 @@ SPAN_DECLARE(int) fax_rx(fax_state_t *s, int16_t *amp, int len) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) fax_rx_fillin(fax_state_t *s, int len) +SPAN_DECLARE_NONSTD(int) fax_rx_fillin(fax_state_t *s, int len) { /* To mitigate the effect of lost packets on a packet network we should try to sustain the status quo. If there is no receive modem running, keep @@ -348,7 +372,7 @@ static int set_next_tx_type(fax_state_t *s) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) fax_tx(fax_state_t *s, int16_t *amp, int max_len) +SPAN_DECLARE_NONSTD(int) fax_tx(fax_state_t *s, int16_t *amp, int max_len) { int len; #if defined(LOG_FAX_AUDIO) @@ -577,33 +601,32 @@ SPAN_DECLARE(logging_state_t *) fax_get_logging_state(fax_state_t *s) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(fax_state_t *) fax_init(fax_state_t *s, int calling_party) +SPAN_DECLARE(int) fax_restart(fax_state_t *s, int calling_party) { - if (s == NULL) - { - if ((s = (fax_state_t *) malloc(sizeof(*s))) == NULL) - return NULL; - } - memset(s, 0, sizeof(*s)); - span_log_init(&s->logging, SPAN_LOG_NONE, NULL); - span_log_set_protocol(&s->logging, "FAX"); - fax_modems_init(&s->modems, - FALSE, - t30_hdlc_accept, - hdlc_underflow_handler, - t30_non_ecm_put_bit, - t30_non_ecm_get_bit, - tone_detected, - &s->t30); - t30_init(&s->t30, - calling_party, - fax_set_rx_type, - (void *) s, - fax_set_tx_type, - (void *) s, - fax_send_hdlc, - (void *) s); - t30_set_supported_modems(&s->t30, T30_SUPPORT_V27TER | T30_SUPPORT_V29 | T30_SUPPORT_V17); +#if 0 + v8_parms_t v8_parms; +#endif + + fax_modems_restart(&s->modems); +#if 0 + v8_parms.modem_connect_tone = MODEM_CONNECT_TONES_ANSAM_PR; + v8_parms.call_function = V8_CALL_T30_RX; + v8_parms.modulations = V8_MOD_V21; + if (s->t30.supported_modems & T30_SUPPORT_V27TER) + v8_parms.modulations |= V8_MOD_V27TER; + if (s->t30.supported_modems & T30_SUPPORT_V29) + v8_parms.modulations |= V8_MOD_V29; + if (s->t30.supported_modems & T30_SUPPORT_V17) + v8_parms.modulations |= V8_MOD_V17; + if (s->t30.supported_modems & T30_SUPPORT_V34HDX) + v8_parms.modulations |= V8_MOD_V34HDX; + v8_parms.protocol = V8_PROTOCOL_NONE; + v8_parms.pcm_modem_availability = 0; + v8_parms.pstn_access = 0; + v8_parms.nsf = -1; + v8_parms.t66 = -1; + v8_restart(&s->v8, calling_party, &v8_parms); +#endif t30_restart(&s->t30); #if defined(LOG_FAX_AUDIO) { @@ -635,6 +658,61 @@ SPAN_DECLARE(fax_state_t *) fax_init(fax_state_t *s, int calling_party) s->modems.audio_tx_log = open(buf, O_CREAT | O_TRUNC | O_WRONLY, 0666); } #endif + return 0; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(fax_state_t *) fax_init(fax_state_t *s, int calling_party) +{ +#if 0 + v8_parms_t v8_parms; +#endif + + if (s == NULL) + { + if ((s = (fax_state_t *) malloc(sizeof(*s))) == NULL) + return NULL; + } + memset(s, 0, sizeof(*s)); + span_log_init(&s->logging, SPAN_LOG_NONE, NULL); + span_log_set_protocol(&s->logging, "FAX"); + fax_modems_init(&s->modems, + FALSE, + t30_hdlc_accept, + hdlc_underflow_handler, + t30_non_ecm_put_bit, + t30_non_ecm_get_bit, + tone_detected, + &s->t30); + t30_init(&s->t30, + calling_party, + fax_set_rx_type, + (void *) s, + fax_set_tx_type, + (void *) s, + fax_send_hdlc, + (void *) s); + t30_set_supported_modems(&s->t30, T30_SUPPORT_V27TER | T30_SUPPORT_V29 | T30_SUPPORT_V17); +#if 0 + v8_parms.modem_connect_tone = MODEM_CONNECT_TONES_ANSAM_PR; + v8_parms.call_function = V8_CALL_T30_RX; + v8_parms.modulations = V8_MOD_V21; + if (s->t30.supported_modems & T30_SUPPORT_V27TER) + v8_parms.modulations |= V8_MOD_V27TER; + if (s->t30.supported_modems & T30_SUPPORT_V29) + v8_parms.modulations |= V8_MOD_V29; + if (s->t30.supported_modems & T30_SUPPORT_V17) + v8_parms.modulations |= V8_MOD_V17; + if (s->t30.supported_modems & T30_SUPPORT_V34HDX) + v8_parms.modulations |= V8_MOD_V34HDX; + v8_parms.protocol = V8_PROTOCOL_NONE; + v8_parms.pcm_modem_availability = 0; + v8_parms.pstn_access = 0; + v8_parms.nsf = -1; + v8_parms.t66 = -1; + v8_init(&s->v8, calling_party, &v8_parms, v8_handler, s); +#endif + fax_restart(s, calling_party); return s; } /*- End of function --------------------------------------------------------*/ diff --git a/libs/spandsp/src/fax_modems.c b/libs/spandsp/src/fax_modems.c index bc8404036c..29392be1a4 100644 --- a/libs/spandsp/src/fax_modems.c +++ b/libs/spandsp/src/fax_modems.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fax_modems.c,v 1.8 2009/11/02 13:25:20 steveu Exp $ */ /*! \file */ @@ -88,7 +86,7 @@ #define HDLC_FRAMING_OK_THRESHOLD 5 -SPAN_DECLARE(int) fax_modems_v17_v21_rx(void *user_data, const int16_t amp[], int len) +SPAN_DECLARE_NONSTD(int) fax_modems_v17_v21_rx(void *user_data, const int16_t amp[], int len) { fax_modems_state_t *s; @@ -108,7 +106,7 @@ SPAN_DECLARE(int) fax_modems_v17_v21_rx(void *user_data, const int16_t amp[], in } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) fax_modems_v17_v21_rx_fillin(void *user_data, int len) +SPAN_DECLARE_NONSTD(int) fax_modems_v17_v21_rx_fillin(void *user_data, int len) { fax_modems_state_t *s; @@ -119,7 +117,7 @@ SPAN_DECLARE(int) fax_modems_v17_v21_rx_fillin(void *user_data, int len) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) fax_modems_v27ter_v21_rx(void *user_data, const int16_t amp[], int len) +SPAN_DECLARE_NONSTD(int) fax_modems_v27ter_v21_rx(void *user_data, const int16_t amp[], int len) { fax_modems_state_t *s; @@ -139,7 +137,7 @@ SPAN_DECLARE(int) fax_modems_v27ter_v21_rx(void *user_data, const int16_t amp[], } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) fax_modems_v27ter_v21_rx_fillin(void *user_data, int len) +SPAN_DECLARE_NONSTD(int) fax_modems_v27ter_v21_rx_fillin(void *user_data, int len) { fax_modems_state_t *s; @@ -150,7 +148,7 @@ SPAN_DECLARE(int) fax_modems_v27ter_v21_rx_fillin(void *user_data, int len) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) fax_modems_v29_v21_rx(void *user_data, const int16_t amp[], int len) +SPAN_DECLARE_NONSTD(int) fax_modems_v29_v21_rx(void *user_data, const int16_t amp[], int len) { fax_modems_state_t *s; @@ -170,7 +168,7 @@ SPAN_DECLARE(int) fax_modems_v29_v21_rx(void *user_data, const int16_t amp[], in } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) fax_modems_v29_v21_rx_fillin(void *user_data, int len) +SPAN_DECLARE_NONSTD(int) fax_modems_v29_v21_rx_fillin(void *user_data, int len) { fax_modems_state_t *s; @@ -264,6 +262,12 @@ SPAN_DECLARE(void) fax_modems_set_tep_mode(fax_modems_state_t *s, int use_tep) } /*- End of function --------------------------------------------------------*/ +SPAN_DECLARE(int) fax_modems_restart(fax_modems_state_t *s) +{ + return 0; +} +/*- End of function --------------------------------------------------------*/ + SPAN_DECLARE(fax_modems_state_t *) fax_modems_init(fax_modems_state_t *s, int use_tep, hdlc_frame_handler_t hdlc_accept, diff --git a/libs/spandsp/src/faxfont.h b/libs/spandsp/src/faxfont.h index 38ce2f6fff..08ed46ad9d 100644 --- a/libs/spandsp/src/faxfont.h +++ b/libs/spandsp/src/faxfont.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: faxfont.h,v 1.6 2008/04/17 14:26:56 steveu Exp $ */ #if !defined(_FAXFONT_H_) diff --git a/libs/spandsp/src/filter_tools.c b/libs/spandsp/src/filter_tools.c index bef04e89e9..1743747166 100644 --- a/libs/spandsp/src/filter_tools.c +++ b/libs/spandsp/src/filter_tools.c @@ -24,8 +24,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: filter_tools.c,v 1.11 2009/10/05 16:33:25 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/src/filter_tools.h b/libs/spandsp/src/filter_tools.h index da0c99dfff..4df89adab4 100644 --- a/libs/spandsp/src/filter_tools.h +++ b/libs/spandsp/src/filter_tools.h @@ -25,8 +25,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: filter_tools.h,v 1.3 2008/04/17 14:26:56 steveu Exp $ */ #if !defined(_FILTER_TOOLS_H_) diff --git a/libs/spandsp/src/floating_fudge.h b/libs/spandsp/src/floating_fudge.h index a959e20f85..2ef0423399 100644 --- a/libs/spandsp/src/floating_fudge.h +++ b/libs/spandsp/src/floating_fudge.h @@ -24,8 +24,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: floating_fudge.h,v 1.7 2009/02/03 16:28:39 steveu Exp $ */ #if !defined(_FLOATING_FUDGE_H_) diff --git a/libs/spandsp/src/fsk.c b/libs/spandsp/src/fsk.c index 8e07ada884..088c54bb88 100644 --- a/libs/spandsp/src/fsk.c +++ b/libs/spandsp/src/fsk.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fsk.c,v 1.60 2009/11/02 13:25:20 steveu Exp $ */ /*! \file */ @@ -566,7 +564,7 @@ SPAN_DECLARE_NONSTD(int) fsk_rx(fsk_rx_state_t *s, const int16_t *amp, int len) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) fsk_rx_fillin(fsk_rx_state_t *s, int len) +SPAN_DECLARE_NONSTD(int) fsk_rx_fillin(fsk_rx_state_t *s, int len) { /* The valid choice here is probably to do nothing. We don't change state (i.e carrier on<->carrier off), and we'll just output less bits than we diff --git a/libs/spandsp/src/g711.c b/libs/spandsp/src/g711.c index fad1882011..17403d8f92 100644 --- a/libs/spandsp/src/g711.c +++ b/libs/spandsp/src/g711.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: g711.c,v 1.16 2009/02/10 13:06:46 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/g722.c b/libs/spandsp/src/g722.c index 1bc84be738..f2cca6b179 100644 --- a/libs/spandsp/src/g722.c +++ b/libs/spandsp/src/g722.c @@ -27,8 +27,6 @@ * Copyright (c) CMU 1993 * Computer Science, Speech Group * Chengxiang Lu and Alex Hauptmann - * - * $Id: g722.c,v 1.10 2009/04/22 12:57:40 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/g726.c b/libs/spandsp/src/g726.c index 3d666f0be2..2bf1236d80 100644 --- a/libs/spandsp/src/g726.c +++ b/libs/spandsp/src/g726.c @@ -47,8 +47,6 @@ * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 - * - * $Id: g726.c,v 1.28.4.1 2009/12/28 12:20:46 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/gsm0610_decode.c b/libs/spandsp/src/gsm0610_decode.c index 1ab1e8e6bb..783acda4b3 100644 --- a/libs/spandsp/src/gsm0610_decode.c +++ b/libs/spandsp/src/gsm0610_decode.c @@ -24,8 +24,6 @@ * * This code is based on the widely used GSM 06.10 code available from * http://kbs.cs.tu-berlin.de/~jutta/toast.html - * - * $Id: gsm0610_decode.c,v 1.25 2009/02/03 16:28:39 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/gsm0610_encode.c b/libs/spandsp/src/gsm0610_encode.c index 091e4fb458..10a27540df 100644 --- a/libs/spandsp/src/gsm0610_encode.c +++ b/libs/spandsp/src/gsm0610_encode.c @@ -24,8 +24,6 @@ * * This code is based on the widely used GSM 06.10 code available from * http://kbs.cs.tu-berlin.de/~jutta/toast.html - * - * $Id: gsm0610_encode.c,v 1.30 2009/02/10 13:06:46 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/gsm0610_local.h b/libs/spandsp/src/gsm0610_local.h index 42a38c54d4..e3150f62de 100644 --- a/libs/spandsp/src/gsm0610_local.h +++ b/libs/spandsp/src/gsm0610_local.h @@ -24,8 +24,6 @@ * * This code is based on the widely used GSM 06.10 code available from * http://kbs.cs.tu-berlin.de/~jutta/toast.html - * - * $Id: gsm0610_local.h,v 1.15 2009/03/13 15:57:29 steveu Exp $ */ #if !defined(_GSM0610_LOCAL_H_) diff --git a/libs/spandsp/src/gsm0610_long_term.c b/libs/spandsp/src/gsm0610_long_term.c index a9255fc3a2..d257832526 100644 --- a/libs/spandsp/src/gsm0610_long_term.c +++ b/libs/spandsp/src/gsm0610_long_term.c @@ -24,8 +24,6 @@ * * This code is based on the widely used GSM 06.10 code available from * http://kbs.cs.tu-berlin.de/~jutta/toast.html - * - * $Id: gsm0610_long_term.c,v 1.24 2009/04/20 16:36:36 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/gsm0610_lpc.c b/libs/spandsp/src/gsm0610_lpc.c index b8ec8d4aa2..4b2c553d87 100644 --- a/libs/spandsp/src/gsm0610_lpc.c +++ b/libs/spandsp/src/gsm0610_lpc.c @@ -24,8 +24,6 @@ * * This code is based on the widely used GSM 06.10 code available from * http://kbs.cs.tu-berlin.de/~jutta/toast.html - * - * $Id: gsm0610_lpc.c,v 1.29 2009/02/05 15:57:27 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/gsm0610_preprocess.c b/libs/spandsp/src/gsm0610_preprocess.c index 3e94fa043d..ea0edfd64e 100644 --- a/libs/spandsp/src/gsm0610_preprocess.c +++ b/libs/spandsp/src/gsm0610_preprocess.c @@ -24,8 +24,6 @@ * * This code is based on the widely used GSM 06.10 code available from * http://kbs.cs.tu-berlin.de/~jutta/toast.html - * - * $Id: gsm0610_preprocess.c,v 1.17 2009/02/03 16:28:39 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/gsm0610_rpe.c b/libs/spandsp/src/gsm0610_rpe.c index 8d61ef272a..28b1a72e79 100644 --- a/libs/spandsp/src/gsm0610_rpe.c +++ b/libs/spandsp/src/gsm0610_rpe.c @@ -24,8 +24,6 @@ * * This code is based on the widely used GSM 06.10 code available from * http://kbs.cs.tu-berlin.de/~jutta/toast.html - * - * $Id: gsm0610_rpe.c,v 1.25.4.2 2009/12/28 11:54:58 steveu Exp $ */ /*! \file */ @@ -172,7 +170,7 @@ static void weighting_filter(int16_t x[40], : "eax", "edx", "esi", "memory" ); #else - int32_t L_result; + int32_t result; int k; /* The coefficients of the weighting filter are stored in a table @@ -194,12 +192,12 @@ static void weighting_filter(int16_t x[40], /* Compute the signal x[0..39] */ for (k = 0; k < 40; k++) { - L_result = 8192 >> 1; + result = 8192 >> 1; /* for (i = 0; i <= 10; i++) * { - * L_temp = saturated_mul_16_32(wt[k + i], gsm_H[i]); - * L_result = saturated_add32(L_result, L_temp); + * temp = saturated_mul16_32(wt[k + i], gsm_H[i]); + * result = saturated_add32(result, temp); * } */ @@ -210,22 +208,22 @@ static void weighting_filter(int16_t x[40], but I don't see an elegant way to optimize this. Do you? */ - L_result += STEP( 0, -134); - L_result += STEP( 1, -374); - /* += STEP( 2, 0 ); */ - L_result += STEP( 3, 2054); - L_result += STEP( 4, 5741); - L_result += STEP( 5, 8192); - L_result += STEP( 6, 5741); - L_result += STEP( 7, 2054); - /* += STEP( 8, 0 ); */ - L_result += STEP( 9, -374); - L_result += STEP(10, -134); + result += STEP( 0, -134); + result += STEP( 1, -374); + /* += STEP( 2, 0 ); */ + result += STEP( 3, 2054); + result += STEP( 4, 5741); + result += STEP( 5, 8192); + result += STEP( 6, 5741); + result += STEP( 7, 2054); + /* += STEP( 8, 0 ); */ + result += STEP( 9, -374); + result += STEP(10, -134); /* 2 adds vs. >> 16 => 14, minus one shift to compensate for those we lost when replacing L_MULT by '*'. */ - L_result >>= 13; - x[k] = saturate(L_result); + result >>= 13; + x[k] = saturate(result); } /*endfor*/ #endif diff --git a/libs/spandsp/src/gsm0610_short_term.c b/libs/spandsp/src/gsm0610_short_term.c index 7b1dfe082a..226ac1f6eb 100644 --- a/libs/spandsp/src/gsm0610_short_term.c +++ b/libs/spandsp/src/gsm0610_short_term.c @@ -24,8 +24,6 @@ * * This code is based on the widely used GSM 06.10 code available from * http://kbs.cs.tu-berlin.de/~jutta/toast.html - * - * $Id: gsm0610_short_term.c,v 1.19 2009/02/03 16:28:39 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/hdlc.c b/libs/spandsp/src/hdlc.c index 4d84af3df5..a07eb3e9fc 100644 --- a/libs/spandsp/src/hdlc.c +++ b/libs/spandsp/src/hdlc.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: hdlc.c,v 1.72 2009/06/02 16:03:56 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/ima_adpcm.c b/libs/spandsp/src/ima_adpcm.c index dc6fe29b44..299d0d1137 100644 --- a/libs/spandsp/src/ima_adpcm.c +++ b/libs/spandsp/src/ima_adpcm.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: ima_adpcm.c,v 1.36 2009/04/11 18:11:19 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/logging.c b/libs/spandsp/src/logging.c index 2ca54a1d26..726e7bd322 100644 --- a/libs/spandsp/src/logging.c +++ b/libs/spandsp/src/logging.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: logging.c,v 1.32 2009/02/10 17:44:18 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/lpc10_analyse.c b/libs/spandsp/src/lpc10_analyse.c index de294de284..7c852c4e12 100644 --- a/libs/spandsp/src/lpc10_analyse.c +++ b/libs/spandsp/src/lpc10_analyse.c @@ -25,8 +25,6 @@ * This code is based on the U.S. Department of Defense reference * implementation of the LPC-10 2400 bps Voice Coder. They do not * exert copyright claims on their code, and it may be freely used. - * - * $Id: lpc10_analyse.c,v 1.22 2009/01/28 03:41:27 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/src/lpc10_decode.c b/libs/spandsp/src/lpc10_decode.c index d71272c763..bfb169edaa 100644 --- a/libs/spandsp/src/lpc10_decode.c +++ b/libs/spandsp/src/lpc10_decode.c @@ -25,8 +25,6 @@ * This code is based on the U.S. Department of Defense reference * implementation of the LPC-10 2400 bps Voice Coder. They do not * exert copyright claims on their code, and it may be freely used. - * - * $Id: lpc10_decode.c,v 1.27.4.1 2009/12/24 17:00:19 steveu Exp $ */ #if defined(HAVE_CONFIG_H) @@ -251,6 +249,7 @@ static int pitsyn(lpc10_decode_state_t *s, float slope; float uvpit; float xxy; + float msix; rci_dim1 = LPC10_ORDER; rci_offset = rci_dim1 + 1; @@ -446,7 +445,10 @@ static int pitsyn(lpc10_decode_state_t *s, xxy = expf(xxy); rci[j + *nout*rci_dim1 + 1] = (xxy - 1.0f)/(xxy + 1.0f); } - rmsi[*nout - 1] = expf(logf(s->rmso) + prop*(logf(*rms) - logf(s->rmso))); + msix = logf(*rms) - logf(s->rmso); + msix = prop*msix; + msix = logf(s->rmso) + msix; + rmsi[*nout - 1] = expf(msix); } } if (vflag != 1) diff --git a/libs/spandsp/src/lpc10_encdecs.h b/libs/spandsp/src/lpc10_encdecs.h index e0c78a65c0..1e276e374b 100644 --- a/libs/spandsp/src/lpc10_encdecs.h +++ b/libs/spandsp/src/lpc10_encdecs.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: lpc10_encdecs.h,v 1.11 2008/04/17 14:26:56 steveu Exp $ */ #define LPC10_ORDER 10 diff --git a/libs/spandsp/src/lpc10_encode.c b/libs/spandsp/src/lpc10_encode.c index 2f36080197..1a080b65c0 100644 --- a/libs/spandsp/src/lpc10_encode.c +++ b/libs/spandsp/src/lpc10_encode.c @@ -25,8 +25,6 @@ * This code is based on the U.S. Department of Defense reference * implementation of the LPC-10 2400 bps Voice Coder. They do not * exert copyright claims on their code, and it may be freely used. - * - * $Id: lpc10_encode.c,v 1.28 2009/02/10 13:06:46 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/src/lpc10_placev.c b/libs/spandsp/src/lpc10_placev.c index 6c77cb1414..78723dd6cf 100644 --- a/libs/spandsp/src/lpc10_placev.c +++ b/libs/spandsp/src/lpc10_placev.c @@ -25,8 +25,6 @@ * This code is based on the U.S. Department of Defense reference * implementation of the LPC-10 2400 bps Voice Coder. They do not * exert copyright claims on their code, and it may be freely used. - * - * $Id: lpc10_placev.c,v 1.19 2009/01/28 03:41:27 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/src/lpc10_voicing.c b/libs/spandsp/src/lpc10_voicing.c index d11572d21b..c4754b46b1 100644 --- a/libs/spandsp/src/lpc10_voicing.c +++ b/libs/spandsp/src/lpc10_voicing.c @@ -25,8 +25,6 @@ * This code is based on the U.S. Department of Defense reference * implementation of the LPC-10 2400 bps Voice Coder. They do not * exert copyright claims on their code, and it may be freely used. - * - * $Id: lpc10_voicing.c,v 1.18 2009/02/03 16:28:39 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/src/make_at_dictionary.c b/libs/spandsp/src/make_at_dictionary.c index 874bd5469c..b5fee707a5 100644 --- a/libs/spandsp/src/make_at_dictionary.c +++ b/libs/spandsp/src/make_at_dictionary.c @@ -11,19 +11,17 @@ * All rights reserved. * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1, - * as published by the Free Software Foundation. + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. + * GNU General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: make_at_dictionary.c,v 1.6 2009/10/09 14:53:57 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/src/make_modem_filter.c b/libs/spandsp/src/make_modem_filter.c index 94feb885e2..aa58ac301b 100644 --- a/libs/spandsp/src/make_modem_filter.c +++ b/libs/spandsp/src/make_modem_filter.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: make_modem_filter.c,v 1.17.4.1 2009/12/28 12:20:46 steveu Exp $ */ #if defined(HAVE_CONFIG_H) @@ -328,7 +326,8 @@ int main(int argc, char **argv) double baud_rate; double rx_excess_bandwidth; double tx_excess_bandwidth; - const char *tag; + const char *rx_tag; + const char *tx_tag; const char *modem; fixed_point = FALSE; @@ -367,58 +366,50 @@ int main(int argc, char **argv) tx_excess_bandwidth = 0.25; carrier = 1800.0; baud_rate = 2400.0; - tag = ""; + rx_tag = ""; + tx_tag = ""; } else if (strcmp(modem, "V.22bis") == 0) { /* This is only intended to apply to transmit. */ rx_coeff_sets = 12; - rx_coeffs_per_filter = 37; + rx_coeffs_per_filter = 27; rx_excess_bandwidth = 0.75; tx_coeff_sets = 40; tx_coeffs_per_filter = 9; tx_excess_bandwidth = 0.75; carrier = 1200.0; baud_rate = 600.0; - tag = ""; + rx_tag = ""; + tx_tag = ""; } else if (strcmp(modem, "V.22bis1200") == 0) { /* This is only intended to apply to receive. */ rx_coeff_sets = 12; - rx_coeffs_per_filter = 37; + rx_coeffs_per_filter = 27; rx_excess_bandwidth = 0.75; tx_coeff_sets = 40; tx_coeffs_per_filter = 9; tx_excess_bandwidth = 0.75; carrier = 1200.0; baud_rate = 600.0; - tag = "_1200"; + rx_tag = "_1200"; + tx_tag = "_1200"; } else if (strcmp(modem, "V.22bis2400") == 0) { /* This is only intended to apply to receive. */ rx_coeff_sets = 12; - rx_coeffs_per_filter = 37; + rx_coeffs_per_filter = 27; rx_excess_bandwidth = 0.75; tx_coeff_sets = 40; tx_coeffs_per_filter = 9; tx_excess_bandwidth = 0.75; carrier = 2400.0; baud_rate = 600.0; - tag = "_2400"; - } - else if (strcmp(modem, "V.27ter4800") == 0) - { - rx_coeff_sets = 8; - rx_coeffs_per_filter = 27; - rx_excess_bandwidth = 0.5; - tx_coeff_sets = 5; - tx_coeffs_per_filter = 9; - tx_excess_bandwidth = 0.5; - carrier = 1800.0; - baud_rate = 1600.0; - tag = "_4800"; + rx_tag = "_2400"; + tx_tag = "_2400"; } else if (strcmp(modem, "V.27ter2400") == 0) { @@ -430,7 +421,21 @@ int main(int argc, char **argv) tx_excess_bandwidth = 0.5; carrier = 1800.0; baud_rate = 1200.0; - tag = "_2400"; + rx_tag = "_2400"; + tx_tag = "_2400"; + } + else if (strcmp(modem, "V.27ter4800") == 0) + { + rx_coeff_sets = 8; + rx_coeffs_per_filter = 27; + rx_excess_bandwidth = 0.5; + tx_coeff_sets = 5; + tx_coeffs_per_filter = 9; + tx_excess_bandwidth = 0.5; + carrier = 1800.0; + baud_rate = 1600.0; + rx_tag = "_4800"; + tx_tag = "_4800"; } else if (strcmp(modem, "V.29") == 0) { @@ -442,7 +447,8 @@ int main(int argc, char **argv) tx_excess_bandwidth = 0.25; carrier = 1700.0; baud_rate = 2400.0; - tag = ""; + rx_tag = ""; + tx_tag = ""; } else { @@ -457,7 +463,7 @@ int main(int argc, char **argv) baud_rate, tx_excess_bandwidth, fixed_point, - tag); + tx_tag); } else { @@ -467,7 +473,7 @@ int main(int argc, char **argv) baud_rate, rx_excess_bandwidth, fixed_point, - tag); + rx_tag); } return 0; } diff --git a/libs/spandsp/src/mmx_sse_decs.h b/libs/spandsp/src/mmx_sse_decs.h index 40dca542b5..4dff6fe26a 100644 --- a/libs/spandsp/src/mmx_sse_decs.h +++ b/libs/spandsp/src/mmx_sse_decs.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: mmx_sse_decs.h,v 1.1 2009/07/12 09:23:09 steveu Exp $ */ #if !defined(_MMX_SSE_DECS_H_) diff --git a/libs/spandsp/src/modem_connect_tones.c b/libs/spandsp/src/modem_connect_tones.c index 93e0b31485..25e96b04d2 100644 --- a/libs/spandsp/src/modem_connect_tones.c +++ b/libs/spandsp/src/modem_connect_tones.c @@ -2,7 +2,7 @@ * SpanDSP - a series of DSP components for telephony * * modem_connect_tones.c - Generation and detection of tones - * associated with modems calling and answering calls. + * associated with modems calling and answering calls. * * Written by Steve Underwood * @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: modem_connect_tones.c,v 1.41 2009/11/06 19:21:33 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/modem_echo.c b/libs/spandsp/src/modem_echo.c index c31d4cba31..e4203e15e5 100644 --- a/libs/spandsp/src/modem_echo.c +++ b/libs/spandsp/src/modem_echo.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: modem_echo.c,v 1.26 2009/09/22 13:11:04 steveu Exp $ */ /*! \file */ @@ -55,7 +53,16 @@ #include "spandsp/private/modem_echo.h" -SPAN_DECLARE(modem_echo_can_state_t *) modem_echo_can_create(int len) +SPAN_DECLARE(void) modem_echo_can_free(modem_echo_can_state_t *ec) +{ + fir16_free(&ec->fir_state); + free(ec->fir_taps32); + free(ec->fir_taps16); + free(ec); +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(modem_echo_can_state_t *) modem_echo_can_init(int len) { modem_echo_can_state_t *ec; @@ -88,15 +95,6 @@ SPAN_DECLARE(modem_echo_can_state_t *) modem_echo_can_create(int len) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(void) modem_echo_can_free(modem_echo_can_state_t *ec) -{ - fir16_free(&ec->fir_state); - free(ec->fir_taps32); - free(ec->fir_taps16); - free(ec); -} -/*- End of function --------------------------------------------------------*/ - SPAN_DECLARE(void) modem_echo_can_flush(modem_echo_can_state_t *ec) { ec->tx_power = 0; diff --git a/libs/spandsp/src/msvc/config.h b/libs/spandsp/src/msvc/config.h index f1bdab324f..a1eaae16a6 100644 --- a/libs/spandsp/src/msvc/config.h +++ b/libs/spandsp/src/msvc/config.h @@ -9,8 +9,6 @@ * * * This file is released in the public domain. - * - * $Id: config.h,v 1.4 2009/02/25 15:30:21 steveu Exp $ */ #if !defined(_MSVC_CONFIG_H_) diff --git a/libs/spandsp/src/noise.c b/libs/spandsp/src/noise.c index 4eaccae911..5d7fe23aad 100644 --- a/libs/spandsp/src/noise.c +++ b/libs/spandsp/src/noise.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: noise.c,v 1.31 2009/02/10 13:06:46 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/playout.c b/libs/spandsp/src/playout.c index 0f3eabc715..073c4bf96b 100644 --- a/libs/spandsp/src/playout.c +++ b/libs/spandsp/src/playout.c @@ -28,8 +28,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: playout.c,v 1.17 2009/02/10 13:06:46 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/src/plc.c b/libs/spandsp/src/plc.c index 56f3a72fa0..fb1cea78be 100644 --- a/libs/spandsp/src/plc.c +++ b/libs/spandsp/src/plc.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: plc.c,v 1.27.4.1 2009/12/23 14:23:49 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/power_meter.c b/libs/spandsp/src/power_meter.c index ed13bd2f03..fc752c3846 100644 --- a/libs/spandsp/src/power_meter.c +++ b/libs/spandsp/src/power_meter.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: power_meter.c,v 1.31 2009/05/30 17:29:23 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/queue.c b/libs/spandsp/src/queue.c index c671b1e148..51774a1810 100644 --- a/libs/spandsp/src/queue.c +++ b/libs/spandsp/src/queue.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: queue.c,v 1.31 2009/04/11 18:11:19 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/schedule.c b/libs/spandsp/src/schedule.c index 010806a129..60ba12bc1f 100644 --- a/libs/spandsp/src/schedule.c +++ b/libs/spandsp/src/schedule.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: schedule.c,v 1.22 2009/02/10 13:06:46 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/src/sig_tone.c b/libs/spandsp/src/sig_tone.c index f25119c97d..99b0444023 100644 --- a/libs/spandsp/src/sig_tone.c +++ b/libs/spandsp/src/sig_tone.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: sig_tone.c,v 1.40 2010/05/12 15:32:41 steveu Exp $ */ /*! \file */ @@ -634,8 +632,8 @@ SPAN_DECLARE(void) sig_tone_rx_set_mode(sig_tone_rx_state_t *s, int mode, int du SPAN_DECLARE(sig_tone_rx_state_t *) sig_tone_rx_init(sig_tone_rx_state_t *s, int tone_type, tone_report_func_t sig_update, void *user_data) { -#if !defined(SPANDSP_USE_FIXED_POINT) int i; +#if !defined(SPANDSP_USE_FIXED_POINT) int j; #endif diff --git a/libs/spandsp/src/silence_gen.c b/libs/spandsp/src/silence_gen.c index 4998f8bc0e..96559d5d14 100644 --- a/libs/spandsp/src/silence_gen.c +++ b/libs/spandsp/src/silence_gen.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: silence_gen.c,v 1.23 2009/09/04 14:38:46 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp.h.in b/libs/spandsp/src/spandsp.h.in index 3293bb5027..9167c1c2cc 100644 --- a/libs/spandsp/src/spandsp.h.in +++ b/libs/spandsp/src/spandsp.h.in @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: spandsp.h.in,v 1.19.4.1 2009/12/19 09:47:56 steveu Exp $ */ /*! \file */ @@ -85,19 +83,26 @@ #include #include #include +#include +#include +#include #include #include #include #include +/*#include */ #include #include #include -#include +/*#include */ #include -#include -#include #include #include +#include +#include +#include +/*#include */ +/*#include */ #include #include #include @@ -120,6 +125,7 @@ #include #include #include +#include #endif diff --git a/libs/spandsp/src/spandsp/adsi.h b/libs/spandsp/src/spandsp/adsi.h index d8c8294355..72275de9af 100644 --- a/libs/spandsp/src/spandsp/adsi.h +++ b/libs/spandsp/src/spandsp/adsi.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: adsi.h,v 1.40 2009/05/22 16:39:01 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/arctan2.h b/libs/spandsp/src/spandsp/arctan2.h index e732601eed..628a559987 100644 --- a/libs/spandsp/src/spandsp/arctan2.h +++ b/libs/spandsp/src/spandsp/arctan2.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: arctan2.h,v 1.13 2008/05/29 13:04:19 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/async.h b/libs/spandsp/src/spandsp/async.h index 50eb6e4455..9c6c66cf8a 100644 --- a/libs/spandsp/src/spandsp/async.h +++ b/libs/spandsp/src/spandsp/async.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: async.h,v 1.25 2009/04/23 14:12:34 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/at_interpreter.h b/libs/spandsp/src/spandsp/at_interpreter.h index 90cf061699..6f844599f0 100644 --- a/libs/spandsp/src/spandsp/at_interpreter.h +++ b/libs/spandsp/src/spandsp/at_interpreter.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: at_interpreter.h,v 1.23 2009/02/10 13:06:47 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/awgn.h b/libs/spandsp/src/spandsp/awgn.h index ef4ff09d14..7f8b780273 100644 --- a/libs/spandsp/src/spandsp/awgn.h +++ b/libs/spandsp/src/spandsp/awgn.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: awgn.h,v 1.18 2009/02/10 13:06:47 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/bell_r2_mf.h b/libs/spandsp/src/spandsp/bell_r2_mf.h index 398a9c583b..6421a36a41 100644 --- a/libs/spandsp/src/spandsp/bell_r2_mf.h +++ b/libs/spandsp/src/spandsp/bell_r2_mf.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bell_r2_mf.h,v 1.24 2009/02/10 13:06:47 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/bert.h b/libs/spandsp/src/spandsp/bert.h index 3871255bad..93d8d08c13 100644 --- a/libs/spandsp/src/spandsp/bert.h +++ b/libs/spandsp/src/spandsp/bert.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bert.h,v 1.23 2009/02/10 13:06:47 steveu Exp $ */ #if !defined(_SPANDSP_BERT_H_) diff --git a/libs/spandsp/src/spandsp/biquad.h b/libs/spandsp/src/spandsp/biquad.h index 1373dfef79..f17ca95fab 100644 --- a/libs/spandsp/src/spandsp/biquad.h +++ b/libs/spandsp/src/spandsp/biquad.h @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: biquad.h,v 1.14 2008/04/17 14:26:59 steveu Exp $ */ /*! \page biquad_page Bi-quadratic filter sections diff --git a/libs/spandsp/src/spandsp/bit_operations.h b/libs/spandsp/src/spandsp/bit_operations.h index 56850ffd35..df308d9ec2 100644 --- a/libs/spandsp/src/spandsp/bit_operations.h +++ b/libs/spandsp/src/spandsp/bit_operations.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bit_operations.h,v 1.27 2009/07/10 13:15:56 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/bitstream.h b/libs/spandsp/src/spandsp/bitstream.h index a934a77edb..b55e4afd16 100644 --- a/libs/spandsp/src/spandsp/bitstream.h +++ b/libs/spandsp/src/spandsp/bitstream.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bitstream.h,v 1.14.4.1 2009/12/28 12:20:47 steveu Exp $ */ /*! \file */ @@ -58,7 +56,15 @@ SPAN_DECLARE(void) bitstream_put(bitstream_state_t *s, uint8_t **c, uint32_t val \return The value retrieved from the input buffer. */ SPAN_DECLARE(uint32_t) bitstream_get(bitstream_state_t *s, const uint8_t **c, int bits); -/*! \brief Flush any residual bit to the output buffer. +/*! \brief Emit any residual bits to the output buffer, without actually flushing them. + This is useful for getting the buffer fully up to date, ready for things + like CRC calculations, while allowing bitstream_put() to be used to continue + the message later. + \param s A pointer to the bitstream context. + \param c A pointer to the bitstream output buffer. */ +SPAN_DECLARE(void) bitstream_emit(bitstream_state_t *s, uint8_t **c); + +/*! \brief Flush any residual bits to the output buffer. \param s A pointer to the bitstream context. \param c A pointer to the bitstream output buffer. */ SPAN_DECLARE(void) bitstream_flush(bitstream_state_t *s, uint8_t **c); diff --git a/libs/spandsp/src/spandsp/complex.h b/libs/spandsp/src/spandsp/complex.h index 4575f68b6f..3bc8c5407d 100644 --- a/libs/spandsp/src/spandsp/complex.h +++ b/libs/spandsp/src/spandsp/complex.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: complex.h,v 1.20 2009/02/21 05:39:08 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/complex_filters.h b/libs/spandsp/src/spandsp/complex_filters.h index efc99ab85c..51d3c61c00 100644 --- a/libs/spandsp/src/spandsp/complex_filters.h +++ b/libs/spandsp/src/spandsp/complex_filters.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: complex_filters.h,v 1.14 2009/02/03 16:28:41 steveu Exp $ */ #if !defined(_SPANDSP_COMPLEX_FILTERS_H_) diff --git a/libs/spandsp/src/spandsp/complex_vector_float.h b/libs/spandsp/src/spandsp/complex_vector_float.h index abfb8bd0ef..4dc3569f7a 100644 --- a/libs/spandsp/src/spandsp/complex_vector_float.h +++ b/libs/spandsp/src/spandsp/complex_vector_float.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: complex_vector_float.h,v 1.13 2009/02/04 13:18:53 steveu Exp $ */ #if !defined(_SPANDSP_COMPLEX_VECTOR_FLOAT_H_) diff --git a/libs/spandsp/src/spandsp/complex_vector_int.h b/libs/spandsp/src/spandsp/complex_vector_int.h index 114d00e438..320457d57f 100644 --- a/libs/spandsp/src/spandsp/complex_vector_int.h +++ b/libs/spandsp/src/spandsp/complex_vector_int.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: complex_vector_int.h,v 1.4 2009/01/31 08:48:11 steveu Exp $ */ #if !defined(_SPANDSP_COMPLEX_VECTOR_INT_H_) diff --git a/libs/spandsp/src/spandsp/crc.h b/libs/spandsp/src/spandsp/crc.h index d2dab65398..a4d9b8040a 100644 --- a/libs/spandsp/src/spandsp/crc.h +++ b/libs/spandsp/src/spandsp/crc.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: crc.h,v 1.5 2009/01/31 08:48:11 steveu Exp $ */ /*! \file */ @@ -66,7 +64,7 @@ SPAN_DECLARE(int) crc_itu32_append(uint8_t *buf, int len); */ SPAN_DECLARE(int) crc_itu32_check(const uint8_t *buf, int len); -/*! \brief Calculate the ITU/CCITT CRC-16 value in buffer. +/*! \brief Calculate the ITU/CCITT CRC-16 value in buffer by whole bytes. \param buf The buffer containing the data. \param len The length of the frame. \param crc The initial CRC value. This is usually 0xFFFF, or 0 for a new block (it depends on @@ -75,6 +73,15 @@ SPAN_DECLARE(int) crc_itu32_check(const uint8_t *buf, int len); */ SPAN_DECLARE(uint16_t) crc_itu16_calc(const uint8_t *buf, int len, uint16_t crc); +/*! \brief Calculate the ITU/CCITT CRC-16 value of some bits from a byte. + \param buf The buffer containing the byte of data. + \param len The number of bits, starting from the LSB. + \param crc The initial CRC value. This is usually 0xFFFF, or 0 for a new block (it depends on + the application). It is previous returned CRC value for the continuation of a block. + \return The CRC value. +*/ +SPAN_DECLARE(uint16_t) crc_itu16_bits(uint8_t buf, int len, uint16_t crc); + /*! \brief Append an ITU/CCITT CRC-16 value to a frame. \param buf The buffer containing the frame. This must be at least 2 bytes longer than the frame it contains, to allow room for the CRC value. diff --git a/libs/spandsp/src/spandsp/dc_restore.h b/libs/spandsp/src/spandsp/dc_restore.h index 4061f41137..94ff6c7e70 100644 --- a/libs/spandsp/src/spandsp/dc_restore.h +++ b/libs/spandsp/src/spandsp/dc_restore.h @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: dc_restore.h,v 1.24 2008/09/19 14:02:05 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/dds.h b/libs/spandsp/src/spandsp/dds.h index a2228a47a5..10bf99fdf7 100644 --- a/libs/spandsp/src/spandsp/dds.h +++ b/libs/spandsp/src/spandsp/dds.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: dds.h,v 1.23 2009/01/31 08:48:11 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/dtmf.h b/libs/spandsp/src/spandsp/dtmf.h index d3f81eaa19..60b2f65183 100644 --- a/libs/spandsp/src/spandsp/dtmf.h +++ b/libs/spandsp/src/spandsp/dtmf.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: dtmf.h,v 1.32 2009/02/10 13:06:47 steveu Exp $ */ #if !defined(_SPANDSP_DTMF_H_) diff --git a/libs/spandsp/src/spandsp/echo.h b/libs/spandsp/src/spandsp/echo.h index b476909181..ec8c53b023 100644 --- a/libs/spandsp/src/spandsp/echo.h +++ b/libs/spandsp/src/spandsp/echo.h @@ -23,8 +23,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: echo.h,v 1.20 2009/09/22 13:11:04 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/expose.h b/libs/spandsp/src/spandsp/expose.h index da14722aae..6cef9bf7c9 100644 --- a/libs/spandsp/src/spandsp/expose.h +++ b/libs/spandsp/src/spandsp/expose.h @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: expose.h,v 1.14.4.1 2009/12/19 09:47:56 steveu Exp $ */ /*! \file */ @@ -61,16 +59,24 @@ #include #include #include -#include -#include +#include +#include #include #include #include #include #include -#include +#include +#include +/*#include */ +/*#include */ #include #include +#include +#include +#include +/*#include */ +/*#include */ #include #include #include @@ -80,7 +86,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/libs/spandsp/src/spandsp/fast_convert.h b/libs/spandsp/src/spandsp/fast_convert.h index ccf275aaf3..10679eab4d 100644 --- a/libs/spandsp/src/spandsp/fast_convert.h +++ b/libs/spandsp/src/spandsp/fast_convert.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fast_convert.h,v 1.9 2009/10/03 04:37:25 steveu Exp $ */ #if !defined(_SPANDSP_FAST_CONVERT_H_) @@ -82,12 +80,12 @@ extern "C" */ #if defined(__CYGWIN__) -#if !defined(__cplusplus) +#if !defined(__cplusplus) && (__GNUC__ < 4) /* - * CYGWIN has lrint and lrintf functions, but they are slow and buggy: + * CYGWIN versions prior to 1.7.1 have lrint and lrintf functions, but + * they are slow and buggy: * http://sourceware.org/ml/cygwin/2005-06/msg00153.html * http://sourceware.org/ml/cygwin/2005-09/msg00047.html - * The latest version of cygwin seems to have made no effort to fix this. * These replacement functions (pulled from the Public Domain MinGW * math.h header) replace the native versions. */ diff --git a/libs/spandsp/src/spandsp/fax.h b/libs/spandsp/src/spandsp/fax.h index fe0598b1a7..9d268770bc 100644 --- a/libs/spandsp/src/spandsp/fax.h +++ b/libs/spandsp/src/spandsp/fax.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fax.h,v 1.39 2009/03/13 12:59:26 steveu Exp $ */ /*! \file */ @@ -52,7 +50,7 @@ extern "C" \return The number of samples unprocessed. This should only be non-zero if the software has reached the end of the FAX call. */ -SPAN_DECLARE(int) fax_rx(fax_state_t *s, int16_t *amp, int len); +SPAN_DECLARE_NONSTD(int) fax_rx(fax_state_t *s, int16_t *amp, int len); /*! Apply fake T.30 receive processing when a block of audio samples is missing (e.g due to packet loss). @@ -62,7 +60,7 @@ SPAN_DECLARE(int) fax_rx(fax_state_t *s, int16_t *amp, int len); \return The number of samples unprocessed. This should only be non-zero if the software has reached the end of the FAX call. */ -SPAN_DECLARE(int) fax_rx_fillin(fax_state_t *s, int len); +SPAN_DECLARE_NONSTD(int) fax_rx_fillin(fax_state_t *s, int len); /*! Apply T.30 transmit processing to generate a block of audio samples. \brief Apply T.30 transmit processing to generate a block of audio samples. @@ -72,7 +70,7 @@ SPAN_DECLARE(int) fax_rx_fillin(fax_state_t *s, int len); \return The number of samples actually generated. This will be zero when there is nothing to send. */ -SPAN_DECLARE(int) fax_tx(fax_state_t *s, int16_t *amp, int max_len); +SPAN_DECLARE_NONSTD(int) fax_tx(fax_state_t *s, int16_t *amp, int max_len); /*! Select whether silent audio will be sent when FAX transmit is idle. \brief Select whether silent audio will be sent when FAX transmit is idle. @@ -104,6 +102,14 @@ SPAN_DECLARE(t30_state_t *) fax_get_t30_state(fax_state_t *s); */ SPAN_DECLARE(logging_state_t *) fax_get_logging_state(fax_state_t *s); +/*! Restart a FAX context. + \brief Restart a FAX context. + \param s The FAX context. + \param calling_party TRUE if the context is for a calling party. FALSE if the + context is for an answering party. + \return 0 for OK, else -1. */ +SPAN_DECLARE(int) fax_restart(fax_state_t *s, int calling_party); + /*! Initialise a FAX context. \brief Initialise a FAX context. \param s The FAX context. diff --git a/libs/spandsp/src/spandsp/fax_modems.h b/libs/spandsp/src/spandsp/fax_modems.h index ad48b8f240..a3b5ef6f68 100644 --- a/libs/spandsp/src/spandsp/fax_modems.h +++ b/libs/spandsp/src/spandsp/fax_modems.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fax_modems.h,v 1.11 2009/04/26 12:55:23 steveu Exp $ */ /*! \file */ @@ -60,16 +58,18 @@ extern "C" #endif /* N.B. the following are currently a work in progress */ -SPAN_DECLARE(int) fax_modems_v17_v21_rx(void *user_data, const int16_t amp[], int len); -SPAN_DECLARE(int) fax_modems_v27ter_v21_rx(void *user_data, const int16_t amp[], int len); -SPAN_DECLARE(int) fax_modems_v29_v21_rx(void *user_data, const int16_t amp[], int len); -SPAN_DECLARE(int) fax_modems_v17_v21_rx_fillin(void *user_data, int len); -SPAN_DECLARE(int) fax_modems_v27ter_v21_rx_fillin(void *user_data, int len); -SPAN_DECLARE(int) fax_modems_v29_v21_rx_fillin(void *user_data, int len); +SPAN_DECLARE_NONSTD(int) fax_modems_v17_v21_rx(void *user_data, const int16_t amp[], int len); +SPAN_DECLARE_NONSTD(int) fax_modems_v27ter_v21_rx(void *user_data, const int16_t amp[], int len); +SPAN_DECLARE_NONSTD(int) fax_modems_v29_v21_rx(void *user_data, const int16_t amp[], int len); +SPAN_DECLARE_NONSTD(int) fax_modems_v17_v21_rx_fillin(void *user_data, int len); +SPAN_DECLARE_NONSTD(int) fax_modems_v27ter_v21_rx_fillin(void *user_data, int len); +SPAN_DECLARE_NONSTD(int) fax_modems_v29_v21_rx_fillin(void *user_data, int len); SPAN_DECLARE(void) fax_modems_start_rx_modem(fax_modems_state_t *s, int which); SPAN_DECLARE(void) fax_modems_set_tep_mode(fax_modems_state_t *s, int use_tep); +SPAN_DECLARE(int) fax_modems_restart(fax_modems_state_t *s); + SPAN_DECLARE(fax_modems_state_t *) fax_modems_init(fax_modems_state_t *s, int use_tep, hdlc_frame_handler_t hdlc_accept, diff --git a/libs/spandsp/src/spandsp/fir.h b/libs/spandsp/src/spandsp/fir.h index c3944c1761..52aab24db0 100644 --- a/libs/spandsp/src/spandsp/fir.h +++ b/libs/spandsp/src/spandsp/fir.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fir.h,v 1.13 2008/04/17 14:27:00 steveu Exp $ */ /*! \page fir_page FIR filtering diff --git a/libs/spandsp/src/spandsp/fsk.h b/libs/spandsp/src/spandsp/fsk.h index 854d9e6a22..df6829514e 100644 --- a/libs/spandsp/src/spandsp/fsk.h +++ b/libs/spandsp/src/spandsp/fsk.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fsk.h,v 1.41 2009/11/02 13:25:20 steveu Exp $ */ /*! \file */ @@ -236,7 +234,7 @@ SPAN_DECLARE_NONSTD(int) fsk_rx(fsk_rx_state_t *s, const int16_t *amp, int len); \param len The number of samples to fake. \return The number of samples unprocessed. */ -SPAN_DECLARE(int) fsk_rx_fillin(fsk_rx_state_t *s, int len); +SPAN_DECLARE_NONSTD(int) fsk_rx_fillin(fsk_rx_state_t *s, int len); SPAN_DECLARE(void) fsk_rx_set_put_bit(fsk_rx_state_t *s, put_bit_func_t put_bit, void *user_data); diff --git a/libs/spandsp/src/spandsp/g168models.h b/libs/spandsp/src/spandsp/g168models.h index 887dffdc65..ff57491f0b 100644 --- a/libs/spandsp/src/spandsp/g168models.h +++ b/libs/spandsp/src/spandsp/g168models.h @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: g168models.h,v 1.9 2008/08/29 09:28:13 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/g711.h b/libs/spandsp/src/spandsp/g711.h index 274c61d62e..a2e094843e 100644 --- a/libs/spandsp/src/spandsp/g711.h +++ b/libs/spandsp/src/spandsp/g711.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: g711.h,v 1.19 2009/04/12 09:12:10 steveu Exp $ */ /*! \file */ @@ -112,9 +110,9 @@ extern "C" */ /* Enable the trap as per the MIL-STD */ -//#define ULAW_ZEROTRAP +//#define G711_ULAW_ZEROTRAP /*! Bias for u-law encoding from linear. */ -#define ULAW_BIAS 0x84 +#define G711_ULAW_BIAS 0x84 /*! \brief Encode a linear sample to u-law \param linear The sample to encode. @@ -129,12 +127,12 @@ static __inline__ uint8_t linear_to_ulaw(int linear) /* Get the sign and the magnitude of the value. */ if (linear >= 0) { - linear = ULAW_BIAS + linear; + linear = G711_ULAW_BIAS + linear; mask = 0xFF; } else { - linear = ULAW_BIAS - linear; + linear = G711_ULAW_BIAS - linear; mask = 0x7F; } @@ -148,7 +146,7 @@ static __inline__ uint8_t linear_to_ulaw(int linear) u_val = (uint8_t) (0x7F ^ mask); else u_val = (uint8_t) (((seg << 4) | ((linear >> (seg + 3)) & 0xF)) ^ mask); -#ifdef ULAW_ZEROTRAP +#if defined(G711_ULAW_ZEROTRAP) /* Optional ITU trap */ if (u_val == 0) u_val = 0x02; @@ -171,8 +169,8 @@ static __inline__ int16_t ulaw_to_linear(uint8_t ulaw) * Extract and bias the quantization bits. Then * shift up by the segment number and subtract out the bias. */ - t = (((ulaw & 0x0F) << 3) + ULAW_BIAS) << (((int) ulaw & 0x70) >> 4); - return (int16_t) ((ulaw & 0x80) ? (ULAW_BIAS - t) : (t - ULAW_BIAS)); + t = (((ulaw & 0x0F) << 3) + G711_ULAW_BIAS) << (((int) ulaw & 0x70) >> 4); + return (int16_t) ((ulaw & 0x80) ? (G711_ULAW_BIAS - t) : (t - G711_ULAW_BIAS)); } /*- End of function --------------------------------------------------------*/ @@ -195,7 +193,7 @@ static __inline__ int16_t ulaw_to_linear(uint8_t ulaw) */ /*! The A-law alternate mark inversion mask */ -#define ALAW_AMI_MASK 0x55 +#define G711_ALAW_AMI_MASK 0x55 /*! \brief Encode a linear sample to A-law \param linear The sample to encode. @@ -209,12 +207,12 @@ static __inline__ uint8_t linear_to_alaw(int linear) if (linear >= 0) { /* Sign (bit 7) bit = 1 */ - mask = ALAW_AMI_MASK | 0x80; + mask = G711_ALAW_AMI_MASK | 0x80; } else { /* Sign (bit 7) bit = 0 */ - mask = ALAW_AMI_MASK; + mask = G711_ALAW_AMI_MASK; linear = -linear - 1; } @@ -244,7 +242,7 @@ static __inline__ int16_t alaw_to_linear(uint8_t alaw) int i; int seg; - alaw ^= ALAW_AMI_MASK; + alaw ^= G711_ALAW_AMI_MASK; i = ((alaw & 0x0F) << 4); seg = (((int) alaw & 0x70) >> 4); if (seg) diff --git a/libs/spandsp/src/spandsp/g722.h b/libs/spandsp/src/spandsp/g722.h index 66e5d79b78..1716e0a0db 100644 --- a/libs/spandsp/src/spandsp/g722.h +++ b/libs/spandsp/src/spandsp/g722.h @@ -27,8 +27,6 @@ ***** Copyright (c) CMU 1993 ***** * Computer Science, Speech Group * Chengxiang Lu and Alex Hauptmann - * - * $Id: g722.h,v 1.26 2009/04/12 09:12:10 steveu Exp $ */ diff --git a/libs/spandsp/src/spandsp/g726.h b/libs/spandsp/src/spandsp/g726.h index f585b0e864..f7c6fd60bf 100644 --- a/libs/spandsp/src/spandsp/g726.h +++ b/libs/spandsp/src/spandsp/g726.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: g726.h,v 1.26 2009/04/12 09:12:10 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/gsm0610.h b/libs/spandsp/src/spandsp/gsm0610.h index b31b7db3e4..e65c7efe26 100644 --- a/libs/spandsp/src/spandsp/gsm0610.h +++ b/libs/spandsp/src/spandsp/gsm0610.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: gsm0610.h,v 1.21 2009/02/10 13:06:47 steveu Exp $ */ #if !defined(_SPANDSP_GSM0610_H_) diff --git a/libs/spandsp/src/spandsp/hdlc.h b/libs/spandsp/src/spandsp/hdlc.h index 9ff9fb1073..a6259a4544 100644 --- a/libs/spandsp/src/spandsp/hdlc.h +++ b/libs/spandsp/src/spandsp/hdlc.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: hdlc.h,v 1.45 2009/06/02 16:03:56 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/ima_adpcm.h b/libs/spandsp/src/spandsp/ima_adpcm.h index 7ef7154905..27be7ec736 100644 --- a/libs/spandsp/src/spandsp/ima_adpcm.h +++ b/libs/spandsp/src/spandsp/ima_adpcm.h @@ -25,8 +25,6 @@ * * Based on a bit from here, a bit from there, eye of toad, * ear of bat, etc - plus, of course, my own 2 cents. - * - * $Id: ima_adpcm.h,v 1.25 2009/04/11 18:11:19 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/logging.h b/libs/spandsp/src/spandsp/logging.h index 9a93f82394..0133b80926 100644 --- a/libs/spandsp/src/spandsp/logging.h +++ b/libs/spandsp/src/spandsp/logging.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: logging.h,v 1.20 2009/02/10 17:44:18 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/lpc10.h b/libs/spandsp/src/spandsp/lpc10.h index d43955065d..b3202cc1cb 100644 --- a/libs/spandsp/src/spandsp/lpc10.h +++ b/libs/spandsp/src/spandsp/lpc10.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: lpc10.h,v 1.22 2009/04/11 18:11:19 steveu Exp $ */ #if !defined(_SPANDSP_LPC10_H_) diff --git a/libs/spandsp/src/spandsp/modem_connect_tones.h b/libs/spandsp/src/spandsp/modem_connect_tones.h index c104e2352f..db3831bf28 100644 --- a/libs/spandsp/src/spandsp/modem_connect_tones.h +++ b/libs/spandsp/src/spandsp/modem_connect_tones.h @@ -23,8 +23,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: modem_connect_tones.h,v 1.24 2009/06/02 16:03:56 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/modem_echo.h b/libs/spandsp/src/spandsp/modem_echo.h index 77ffe6b535..acfe7506a2 100644 --- a/libs/spandsp/src/spandsp/modem_echo.h +++ b/libs/spandsp/src/spandsp/modem_echo.h @@ -24,8 +24,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: modem_echo.h,v 1.14 2009/09/22 13:11:04 steveu Exp $ */ /*! \file */ @@ -95,7 +93,7 @@ extern "C" \param len The length of the canceller, in samples. eturn The new canceller context, or NULL if the canceller could not be created. */ -SPAN_DECLARE(modem_echo_can_state_t *) modem_echo_can_create(int len); +SPAN_DECLARE(modem_echo_can_state_t *) modem_echo_can_init(int len); /*! Free a modem echo canceller context. \param ec The echo canceller context. diff --git a/libs/spandsp/src/spandsp/noise.h b/libs/spandsp/src/spandsp/noise.h index eca1136864..9014e482ef 100644 --- a/libs/spandsp/src/spandsp/noise.h +++ b/libs/spandsp/src/spandsp/noise.h @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: noise.h,v 1.17 2009/02/10 13:06:47 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/oki_adpcm.h b/libs/spandsp/src/spandsp/oki_adpcm.h index c9bfef7ef3..c3707f07f8 100644 --- a/libs/spandsp/src/spandsp/oki_adpcm.h +++ b/libs/spandsp/src/spandsp/oki_adpcm.h @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: oki_adpcm.h,v 1.24 2009/02/10 13:06:47 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/playout.h b/libs/spandsp/src/spandsp/playout.h index abe3584a06..41d4a0cb46 100644 --- a/libs/spandsp/src/spandsp/playout.h +++ b/libs/spandsp/src/spandsp/playout.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: playout.h,v 1.14 2009/02/10 13:06:47 steveu Exp $ */ #if !defined(_SPANDSP_PLAYOUT_H_) diff --git a/libs/spandsp/src/spandsp/plc.h b/libs/spandsp/src/spandsp/plc.h index f4cbade794..801c6ac65f 100644 --- a/libs/spandsp/src/spandsp/plc.h +++ b/libs/spandsp/src/spandsp/plc.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: plc.h,v 1.21 2009/02/10 13:06:47 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/power_meter.h b/libs/spandsp/src/spandsp/power_meter.h index 6e03b60bea..5eff21fccd 100644 --- a/libs/spandsp/src/spandsp/power_meter.h +++ b/libs/spandsp/src/spandsp/power_meter.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: power_meter.h,v 1.19 2009/05/19 14:15:09 steveu Exp $ */ #if !defined(_POWER_METER_H_) diff --git a/libs/spandsp/src/spandsp/private/adsi.h b/libs/spandsp/src/spandsp/private/adsi.h index 251cb0ec82..676e05ab40 100644 --- a/libs/spandsp/src/spandsp/private/adsi.h +++ b/libs/spandsp/src/spandsp/private/adsi.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: adsi.h,v 1.4 2009/04/12 04:20:01 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/private/async.h b/libs/spandsp/src/spandsp/private/async.h index dd75f5d560..c3837641df 100644 --- a/libs/spandsp/src/spandsp/private/async.h +++ b/libs/spandsp/src/spandsp/private/async.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: async.h,v 1.1 2008/11/30 10:17:31 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_ASYNC_H_) diff --git a/libs/spandsp/src/spandsp/private/at_interpreter.h b/libs/spandsp/src/spandsp/private/at_interpreter.h index efe4f7901e..da13b5a2bb 100644 --- a/libs/spandsp/src/spandsp/private/at_interpreter.h +++ b/libs/spandsp/src/spandsp/private/at_interpreter.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: at_interpreter.h,v 1.1 2008/11/30 05:43:37 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/private/awgn.h b/libs/spandsp/src/spandsp/private/awgn.h index 9ee57951c5..908a465f9f 100644 --- a/libs/spandsp/src/spandsp/private/awgn.h +++ b/libs/spandsp/src/spandsp/private/awgn.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: awgn.h,v 1.1 2008/11/30 12:38:27 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_AWGN_H_) diff --git a/libs/spandsp/src/spandsp/private/bell_r2_mf.h b/libs/spandsp/src/spandsp/private/bell_r2_mf.h index 91be0fe947..234e4c9ba0 100644 --- a/libs/spandsp/src/spandsp/private/bell_r2_mf.h +++ b/libs/spandsp/src/spandsp/private/bell_r2_mf.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bell_r2_mf.h,v 1.2 2008/10/13 14:19:18 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_BELL_R2_MF_H_) diff --git a/libs/spandsp/src/spandsp/private/bert.h b/libs/spandsp/src/spandsp/private/bert.h index a1b0c3a178..f58bc70943 100644 --- a/libs/spandsp/src/spandsp/private/bert.h +++ b/libs/spandsp/src/spandsp/private/bert.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bert.h,v 1.2 2009/04/14 16:04:54 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_BERT_H_) diff --git a/libs/spandsp/src/spandsp/private/bitstream.h b/libs/spandsp/src/spandsp/private/bitstream.h index fe80c0bdbd..aec8d5e124 100644 --- a/libs/spandsp/src/spandsp/private/bitstream.h +++ b/libs/spandsp/src/spandsp/private/bitstream.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bitstream.h,v 1.1.4.1 2009/12/28 12:20:47 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_BITSTREAM_H_) diff --git a/libs/spandsp/src/spandsp/private/dtmf.h b/libs/spandsp/src/spandsp/private/dtmf.h index 017cc26800..eeacff16d3 100644 --- a/libs/spandsp/src/spandsp/private/dtmf.h +++ b/libs/spandsp/src/spandsp/private/dtmf.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: dtmf.h,v 1.1 2008/10/13 13:14:01 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_DTMF_H_) diff --git a/libs/spandsp/src/spandsp/private/echo.h b/libs/spandsp/src/spandsp/private/echo.h index 4a91798315..98153ef0f8 100644 --- a/libs/spandsp/src/spandsp/private/echo.h +++ b/libs/spandsp/src/spandsp/private/echo.h @@ -23,8 +23,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: echo.h,v 1.1 2009/09/22 13:11:04 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/private/fax.h b/libs/spandsp/src/spandsp/private/fax.h index 8db77dc2ff..c75f4fa01e 100644 --- a/libs/spandsp/src/spandsp/private/fax.h +++ b/libs/spandsp/src/spandsp/private/fax.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fax.h,v 1.1 2008/10/13 13:14:01 steveu Exp $ */ /*! \file */ @@ -38,9 +36,11 @@ struct fax_state_s { /*! \brief The T.30 back-end */ t30_state_t t30; - + /*! \brief The analogue modem front-end */ fax_modems_state_t modems; + /*! \brief V.8 */ + //v8_state_t v8; /*! \brief Error and flow logging control */ logging_state_t logging; diff --git a/libs/spandsp/src/spandsp/private/fax_modems.h b/libs/spandsp/src/spandsp/private/fax_modems.h index a46749c0cf..67422bbe40 100644 --- a/libs/spandsp/src/spandsp/private/fax_modems.h +++ b/libs/spandsp/src/spandsp/private/fax_modems.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fax_modems.h,v 1.4 2009/09/04 14:38:47 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/private/fsk.h b/libs/spandsp/src/spandsp/private/fsk.h index 0fbbf03049..b08a9294fd 100644 --- a/libs/spandsp/src/spandsp/private/fsk.h +++ b/libs/spandsp/src/spandsp/private/fsk.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fsk.h,v 1.5 2009/04/01 13:22:40 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_FSK_H_) diff --git a/libs/spandsp/src/spandsp/private/g711.h b/libs/spandsp/src/spandsp/private/g711.h index 4e9021e008..5ebc17100d 100644 --- a/libs/spandsp/src/spandsp/private/g711.h +++ b/libs/spandsp/src/spandsp/private/g711.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: g711.h,v 1.2 2009/04/12 09:12:11 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_G711_H_) diff --git a/libs/spandsp/src/spandsp/private/g722.h b/libs/spandsp/src/spandsp/private/g722.h index 7d3b5d16f1..5cb2e0b77f 100644 --- a/libs/spandsp/src/spandsp/private/g722.h +++ b/libs/spandsp/src/spandsp/private/g722.h @@ -27,8 +27,6 @@ ***** Copyright (c) CMU 1993 ***** * Computer Science, Speech Group * Chengxiang Lu and Alex Hauptmann - * - * $Id: g722.h,v 1.2 2009/04/12 09:12:11 steveu Exp $ */ diff --git a/libs/spandsp/src/spandsp/private/g726.h b/libs/spandsp/src/spandsp/private/g726.h index 18d8f29f8a..9d69d00ec2 100644 --- a/libs/spandsp/src/spandsp/private/g726.h +++ b/libs/spandsp/src/spandsp/private/g726.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: g726.h,v 1.4 2009/04/12 09:12:11 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_G726_H_) diff --git a/libs/spandsp/src/spandsp/private/gsm0610.h b/libs/spandsp/src/spandsp/private/gsm0610.h index 2414fd81f2..103a6ebd2c 100644 --- a/libs/spandsp/src/spandsp/private/gsm0610.h +++ b/libs/spandsp/src/spandsp/private/gsm0610.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: gsm0610.h,v 1.2 2008/11/15 14:27:29 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_GSM0610_H_) diff --git a/libs/spandsp/src/spandsp/private/hdlc.h b/libs/spandsp/src/spandsp/private/hdlc.h index f3ffb6c290..e58ef8720c 100644 --- a/libs/spandsp/src/spandsp/private/hdlc.h +++ b/libs/spandsp/src/spandsp/private/hdlc.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: hdlc.h,v 1.3 2009/02/12 12:38:39 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_HDLC_H_) diff --git a/libs/spandsp/src/spandsp/private/ima_adpcm.h b/libs/spandsp/src/spandsp/private/ima_adpcm.h index 5ca9f5bd8c..1685906c28 100644 --- a/libs/spandsp/src/spandsp/private/ima_adpcm.h +++ b/libs/spandsp/src/spandsp/private/ima_adpcm.h @@ -25,8 +25,6 @@ * * Based on a bit from here, a bit from there, eye of toad, * ear of bat, etc - plus, of course, my own 2 cents. - * - * $Id: ima_adpcm.h,v 1.1 2008/11/30 10:17:31 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_IMA_ADPCM_H_) diff --git a/libs/spandsp/src/spandsp/private/logging.h b/libs/spandsp/src/spandsp/private/logging.h index ad3ec915eb..0e59d267b3 100644 --- a/libs/spandsp/src/spandsp/private/logging.h +++ b/libs/spandsp/src/spandsp/private/logging.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: logging.h,v 1.1 2008/11/30 13:44:35 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_LOGGING_H_) diff --git a/libs/spandsp/src/spandsp/private/lpc10.h b/libs/spandsp/src/spandsp/private/lpc10.h index d983d95002..ae9b9528bb 100644 --- a/libs/spandsp/src/spandsp/private/lpc10.h +++ b/libs/spandsp/src/spandsp/private/lpc10.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: lpc10.h,v 1.3 2009/04/12 09:12:11 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_LPC10_H_) diff --git a/libs/spandsp/src/spandsp/private/modem_connect_tones.h b/libs/spandsp/src/spandsp/private/modem_connect_tones.h index 331402c1e4..feb602bdef 100644 --- a/libs/spandsp/src/spandsp/private/modem_connect_tones.h +++ b/libs/spandsp/src/spandsp/private/modem_connect_tones.h @@ -23,8 +23,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: modem_connect_tones.h,v 1.3 2009/11/02 13:25:20 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/private/modem_echo.h b/libs/spandsp/src/spandsp/private/modem_echo.h index 082cb8d569..24bc7577b0 100644 --- a/libs/spandsp/src/spandsp/private/modem_echo.h +++ b/libs/spandsp/src/spandsp/private/modem_echo.h @@ -24,8 +24,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: modem_echo.h,v 1.1 2009/09/22 13:11:04 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/private/noise.h b/libs/spandsp/src/spandsp/private/noise.h index 4f6ecc99e5..73b908497f 100644 --- a/libs/spandsp/src/spandsp/private/noise.h +++ b/libs/spandsp/src/spandsp/private/noise.h @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: noise.h,v 1.1 2008/11/30 12:45:09 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/private/oki_adpcm.h b/libs/spandsp/src/spandsp/private/oki_adpcm.h index 4894775a4d..f039213c43 100644 --- a/libs/spandsp/src/spandsp/private/oki_adpcm.h +++ b/libs/spandsp/src/spandsp/private/oki_adpcm.h @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: oki_adpcm.h,v 1.1 2008/11/30 10:17:31 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/private/queue.h b/libs/spandsp/src/spandsp/private/queue.h index 006ac68109..b621ee9fc5 100644 --- a/libs/spandsp/src/spandsp/private/queue.h +++ b/libs/spandsp/src/spandsp/private/queue.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: queue.h,v 1.2 2009/01/31 08:48:11 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_QUEUE_H_) diff --git a/libs/spandsp/src/spandsp/private/schedule.h b/libs/spandsp/src/spandsp/private/schedule.h index 8e059dad86..1e37b99005 100644 --- a/libs/spandsp/src/spandsp/private/schedule.h +++ b/libs/spandsp/src/spandsp/private/schedule.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: schedule.h,v 1.1 2008/11/30 05:43:37 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_SCHEDULE_H_) diff --git a/libs/spandsp/src/spandsp/private/sig_tone.h b/libs/spandsp/src/spandsp/private/sig_tone.h index 514be52334..1bbeef0466 100644 --- a/libs/spandsp/src/spandsp/private/sig_tone.h +++ b/libs/spandsp/src/spandsp/private/sig_tone.h @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: sig_tone.h,v 1.9 2010/03/11 14:22:30 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_SIG_TONE_H_) diff --git a/libs/spandsp/src/spandsp/private/silence_gen.h b/libs/spandsp/src/spandsp/private/silence_gen.h index bae49defaf..6068c41171 100644 --- a/libs/spandsp/src/spandsp/private/silence_gen.h +++ b/libs/spandsp/src/spandsp/private/silence_gen.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: silence_gen.h,v 1.1 2009/04/12 03:29:58 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_SILENCE_GEN_H_) diff --git a/libs/spandsp/src/spandsp/private/super_tone_rx.h b/libs/spandsp/src/spandsp/private/super_tone_rx.h index 09fbc694e8..1f0fd98564 100644 --- a/libs/spandsp/src/spandsp/private/super_tone_rx.h +++ b/libs/spandsp/src/spandsp/private/super_tone_rx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: super_tone_rx.h,v 1.1 2008/11/30 10:17:31 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_SUPER_TONE_RX_H_) diff --git a/libs/spandsp/src/spandsp/private/super_tone_tx.h b/libs/spandsp/src/spandsp/private/super_tone_tx.h index 0078544835..b6efced965 100644 --- a/libs/spandsp/src/spandsp/private/super_tone_tx.h +++ b/libs/spandsp/src/spandsp/private/super_tone_tx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: super_tone_tx.h,v 1.1 2008/11/30 10:22:19 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_SUPER_TONE_TX_H_) diff --git a/libs/spandsp/src/spandsp/private/swept_tone.h b/libs/spandsp/src/spandsp/private/swept_tone.h index ce8e5a634e..52a9a03f90 100644 --- a/libs/spandsp/src/spandsp/private/swept_tone.h +++ b/libs/spandsp/src/spandsp/private/swept_tone.h @@ -10,19 +10,17 @@ * All rights reserved. * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2, as - * published by the Free Software Foundation. + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: swept_tone.h,v 1.1 2009/09/22 12:54:33 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_SWEPT_TONE_H_) diff --git a/libs/spandsp/src/spandsp/private/t30.h b/libs/spandsp/src/spandsp/private/t30.h index 64ae2c5fd5..6e4ee0a704 100644 --- a/libs/spandsp/src/spandsp/private/t30.h +++ b/libs/spandsp/src/spandsp/private/t30.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t30.h,v 1.5.4.1 2009/12/19 09:47:56 steveu Exp $ */ /*! \file */ @@ -36,23 +34,50 @@ */ struct t30_state_s { - /* This must be kept the first thing in the structure, so it can be pointed - to reliably as the structures change over time. */ /*! \brief T.4 context for reading or writing image data. */ - t4_state_t t4; - + union + { + t4_state_t rx; + t4_state_t tx; + } t4; /*! \brief The type of FAX operation currently in progress */ int operation_in_progress; /*! \brief TRUE if behaving as the calling party */ int calling_party; + /*! \brief Internet aware FAX mode bit mask. */ + int iaf; + /*! \brief A bit mask of the currently supported modem types. */ + int supported_modems; + /*! \brief A bit mask of the currently supported image compression modes. */ + int supported_compressions; + /*! \brief A bit mask of the currently supported image resolutions. */ + int supported_resolutions; + /*! \brief A bit mask of the currently supported image sizes. */ + int supported_image_sizes; + /*! \brief A bit mask of the currently supported T.30 special features. */ + int supported_t30_features; + /*! \brief TRUE is ECM mode handling is enabled. */ + int ecm_allowed; +#if 0 + /*! \brief TRUE if we are capable of retransmitting pages */ + int retransmit_capable; +#endif + /*! \brief The received DCS, formatted as an ASCII string, for inclusion in the TIFF file. */ char rx_dcs_string[T30_MAX_DIS_DTC_DCS_LEN*3 + 1]; /*! \brief The text which will be used in FAX page header. No text results in no header line. */ char header_info[T30_MAX_PAGE_HEADER_INFO + 1]; +#if 0 + /*! \brief TRUE for FAX page headers to overlay (i.e. replace) the beginning of the + page image. FALSE for FAX page headers to add to the overall length of + the page. */ + int header_overlays_image; +#endif + /*! \brief The information fields received. */ t30_exchanged_info_t rx_info; /*! \brief The information fields to be transmitted. */ @@ -134,9 +159,6 @@ struct t30_state_s /*! \brief TRUE if a valid DIS has been received from the far end. */ int dis_received; - /*! \brief A flag to indicate a message is in progress. */ - int in_message; - /*! \brief TRUE if the short training sequence should be used. */ int short_train; @@ -253,27 +275,18 @@ struct t30_state_s int tx_stop_page; /*! \brief The current completion status. */ int current_status; - /*! \brief Internet aware FAX mode bit mask. */ - int iaf; - /*! \brief A bit mask of the currently supported modem types. */ - int supported_modems; - /*! \brief A bit mask of the currently supported image compression modes. */ - int supported_compressions; - /*! \brief A bit mask of the currently supported image resolutions. */ - int supported_resolutions; - /*! \brief A bit mask of the currently supported image sizes. */ - int supported_image_sizes; - /*! \brief A bit mask of the currently supported T.30 special features. */ - int supported_t30_features; - /*! \brief TRUE is ECM mode handling is enabled. */ - int ecm_allowed; - + +#if 0 + /*! \brief The number of RTP events */ + int rtp_events; + /*! \brief The number of RTN events */ + int rtn_events; +#endif + /*! \brief the FCF2 field of the last PPS message we received. */ uint8_t last_pps_fcf2; - /*! \brief The number of the first ECM frame which we do not currently received correctly. For - a partial page received correctly, this will be one greater than the number of frames it - contains. */ - int ecm_first_bad_frame; + /*! \brief TRUE if all frames of the current received ECM block are now OK */ + int rx_ecm_block_ok; /*! \brief A count of successfully received ECM frames, to assess progress as a basis for deciding whether to continue error correction when PPRs keep repeating. */ int ecm_progress; diff --git a/libs/spandsp/src/spandsp/private/t30_dis_dtc_dcs_bits.h b/libs/spandsp/src/spandsp/private/t30_dis_dtc_dcs_bits.h index 7db4df98e9..1c8735c996 100644 --- a/libs/spandsp/src/spandsp/private/t30_dis_dtc_dcs_bits.h +++ b/libs/spandsp/src/spandsp/private/t30_dis_dtc_dcs_bits.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t30_dis_dtc_dcs_bits.h,v 1.1.4.1 2009/12/19 09:47:57 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/private/t31.h b/libs/spandsp/src/spandsp/private/t31.h index c061e0121a..a2d8f97199 100644 --- a/libs/spandsp/src/spandsp/private/t31.h +++ b/libs/spandsp/src/spandsp/private/t31.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t31.h,v 1.7 2009/02/12 12:38:39 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_T31_H_) @@ -35,6 +33,7 @@ typedef struct { fax_modems_state_t modems; + //v8_state_t v8; /*! The transmit signal handler to be used when the current one has finished sending. */ span_tx_handler_t *next_tx_handler; diff --git a/libs/spandsp/src/spandsp/private/t38_core.h b/libs/spandsp/src/spandsp/private/t38_core.h index 2de5e8aa08..8f71321dda 100644 --- a/libs/spandsp/src/spandsp/private/t38_core.h +++ b/libs/spandsp/src/spandsp/private/t38_core.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_core.h,v 1.4 2009/07/14 13:54:22 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_T38_CORE_H_) diff --git a/libs/spandsp/src/spandsp/private/t38_non_ecm_buffer.h b/libs/spandsp/src/spandsp/private/t38_non_ecm_buffer.h index 247233f58e..78604420a9 100644 --- a/libs/spandsp/src/spandsp/private/t38_non_ecm_buffer.h +++ b/libs/spandsp/src/spandsp/private/t38_non_ecm_buffer.h @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_non_ecm_buffer.h,v 1.2.4.1 2009/12/19 06:43:28 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_T38_NON_ECM_BUFFER_H_) diff --git a/libs/spandsp/src/spandsp/private/t38_terminal.h b/libs/spandsp/src/spandsp/private/t38_terminal.h index af5cbff80d..6681f9321c 100644 --- a/libs/spandsp/src/spandsp/private/t38_terminal.h +++ b/libs/spandsp/src/spandsp/private/t38_terminal.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_terminal.h,v 1.2 2008/12/31 13:57:13 steveu Exp $ */ /*! \file */ @@ -97,6 +95,8 @@ typedef struct int32_t samples; /*! \brief The value for samples at the next transmission point. */ int32_t next_tx_samples; + /*! \brief The current transmit timeout. */ + //int32_t timeout_tx_samples; /*! \brief The current receive timeout. */ int32_t timeout_rx_samples; } t38_terminal_front_end_state_t; diff --git a/libs/spandsp/src/spandsp/private/t4_rx.h b/libs/spandsp/src/spandsp/private/t4_rx.h index 6511ace1f8..ba0d4ca74f 100644 --- a/libs/spandsp/src/spandsp/private/t4_rx.h +++ b/libs/spandsp/src/spandsp/private/t4_rx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t4_rx.h,v 1.6.2.8 2009/12/21 17:18:40 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_T4_RX_H_) @@ -38,9 +36,6 @@ typedef struct /*! \brief The libtiff context for the current TIFF file */ TIFF *tiff_file; - /*! \brief The number of pages in the current image file. */ - int pages_in_file; - /*! \brief The compression type for output to the TIFF file. */ int32_t output_compression; /*! \brief The TIFF photometric setting for the current page. */ @@ -50,6 +45,9 @@ typedef struct /*! \brief The TIFF G3 FAX options. */ int32_t output_t4_options; + /*! \brief The number of pages in the current image file. */ + int pages_in_file; + /* "Background" information about the FAX, which can be stored in the image file. */ /*! \brief The vendor of the machine which produced the file. */ const char *vendor; @@ -70,62 +68,5 @@ typedef struct int stop_page; } t4_tiff_state_t; -typedef struct t4_t6_decode_state_s t4_t6_decode_state_t; - -/*! - T.4 1D, T4 2D and T6 decompressor state. -*/ -struct t4_t6_decode_state_s -{ - /*! \brief Callback function to write a row of pixels to the image destination. */ - t4_row_write_handler_t row_write_handler; - /*! \brief Opaque pointer passed to row_write_handler. */ - void *row_write_user_data; - - /*! \brief Incoming bit buffer for decompression. */ - uint32_t rx_bitstream; - /*! \brief The number of bits currently in rx_bitstream. */ - int rx_bits; - /*! \brief The number of bits to be skipped before trying to match the next code word. */ - int rx_skip_bits; - - /*! \brief This variable is used to count the consecutive EOLS we have seen. If it - reaches six, this is the end of the image. It is initially set to -1 for - 1D and 2D decoding, as an indicator that we must wait for the first EOL, - before decoding any image data. */ - int consecutive_eols; - - /*! \brief The reference or starting changing element on the coding line. At the - start of the coding line, a0 is set on an imaginary white changing element - situated just before the first element on the line. During the coding of - the coding line, the position of a0 is defined by the previous coding mode. - (See T.4/4.2.1.3.2.). */ - int a0; - /*! \brief The first changing element on the reference line to the right of a0 and of - opposite colour to a0. */ - int b1; - /*! \brief The length of the in-progress run of black or white. */ - int run_length; - /*! \brief 2D horizontal mode control. */ - int black_white; - /*! \brief TRUE if the current run is black */ - int its_black; - - /*! \brief The current step into the current row run-lengths buffer. */ - int a_cursor; - /*! \brief The current step into the reference row run-lengths buffer. */ - int b_cursor; - - /*! \brief A pointer into the image buffer indicating where the last row begins */ - int last_row_starts_at; - - /*! \brief The current number of consecutive bad rows. */ - int curr_bad_row_run; - /*! \brief The longest run of consecutive bad rows seen in the current page. */ - int longest_bad_row_run; - /*! \brief The total number of bad rows in the current page. */ - int bad_rows; -}; - #endif /*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/spandsp/private/t4_tx.h b/libs/spandsp/src/spandsp/private/t4_tx.h index a65d0b4155..236523a590 100644 --- a/libs/spandsp/src/spandsp/private/t4_tx.h +++ b/libs/spandsp/src/spandsp/private/t4_tx.h @@ -21,48 +21,11 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t4_tx.h,v 1.7.2.4 2009/12/21 17:18:40 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_T4_TX_H_) #define _SPANDSP_PRIVATE_T4_TX_H_ -typedef struct t4_t6_encode_state_s t4_t6_encode_state_t; - -/*! - T.4 1D, T4 2D and T6 compressor state. -*/ -struct t4_t6_encode_state_s -{ - /*! \brief The minimum number of encoded bits per row. This is a timing thing - for hardware FAX machines. */ - int min_bits_per_row; - /*! \brief The current maximum contiguous rows that may be 2D encoded. */ - int max_rows_to_next_1d_row; - - /*! \brief The text which will be used in FAX page header. No text results - in no header line. */ - const char *header_info; - - /*! \brief Number of rows left that can be 2D encoded, before a 1D encoded row - must be used. */ - int rows_to_next_1d_row; - - /*! \brief The number of runs currently in the reference row. */ - int ref_steps; - - /*! \brief Pointer to the byte containing the next image bit to transmit. */ - int bit_pos; - /*! \brief Pointer to the bit within the byte containing the next image bit to transmit. */ - int bit_ptr; - - /*! \brief Callback function to read a row of pixels from the image source. */ - t4_row_read_handler_t row_read_handler; - /*! \brief Opaque pointer passed to row_read_handler. */ - void *row_read_user_data; -}; - /*! T.4 FAX compression/decompression descriptor. This defines the working state for a single instance of a T.4 FAX compression or decompression channel. @@ -79,6 +42,12 @@ struct t4_state_s /*! \brief The time at which handling of the current page began. */ time_t page_start_time; + /*! \brief The text which will be used in FAX page header. No text results + in no header line. */ + const char *header_info; + /*! \brief Optional per instance time zone for the FAX pager header timestamp. */ + struct tz_s *tz; + /*! \brief The size of the compressed image on the line side, in bits. */ int line_image_size; diff --git a/libs/spandsp/src/spandsp/private/time_scale.h b/libs/spandsp/src/spandsp/private/time_scale.h index 85d3975ad6..775046161d 100644 --- a/libs/spandsp/src/spandsp/private/time_scale.h +++ b/libs/spandsp/src/spandsp/private/time_scale.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: time_scale.h,v 1.1 2008/11/15 14:27:29 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_TIME_SCALE_H_) diff --git a/libs/spandsp/src/spandsp/private/tone_detect.h b/libs/spandsp/src/spandsp/private/tone_detect.h index 3d67e52397..2b4a1d276b 100644 --- a/libs/spandsp/src/spandsp/private/tone_detect.h +++ b/libs/spandsp/src/spandsp/private/tone_detect.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: tone_detect.h,v 1.1 2008/11/30 10:17:31 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_TONE_DETECT_H_) diff --git a/libs/spandsp/src/spandsp/private/tone_generate.h b/libs/spandsp/src/spandsp/private/tone_generate.h index a1443be87e..12dfaeb5d4 100644 --- a/libs/spandsp/src/spandsp/private/tone_generate.h +++ b/libs/spandsp/src/spandsp/private/tone_generate.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: tone_generate.h,v 1.1 2008/11/30 10:17:31 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_TONE_GENERATE_H_) diff --git a/libs/spandsp/src/spandsp/private/v17rx.h b/libs/spandsp/src/spandsp/private/v17rx.h index bc8ad1b63c..03b320c11b 100644 --- a/libs/spandsp/src/spandsp/private/v17rx.h +++ b/libs/spandsp/src/spandsp/private/v17rx.h @@ -29,10 +29,11 @@ /* Target length for the equalizer is about 63 taps, to deal with the worst stuff in V.56bis. */ /*! The length of the equalizer buffer */ -#define V17_EQUALIZER_LEN 33 - +//#define V17_EQUALIZER_LEN 33 +#define V17_EQUALIZER_LEN 17 /*! Samples before the target position in the equalizer buffer */ -#define V17_EQUALIZER_PRE_LEN 16 +//#define V17_EQUALIZER_PRE_LEN 16 +#define V17_EQUALIZER_PRE_LEN 8 /*! The number of taps in the pulse shaping/bandpass filter */ #define V17_RX_FILTER_STEPS 27 diff --git a/libs/spandsp/src/spandsp/private/v17tx.h b/libs/spandsp/src/spandsp/private/v17tx.h index c93ba08c35..4d4582f69d 100644 --- a/libs/spandsp/src/spandsp/private/v17tx.h +++ b/libs/spandsp/src/spandsp/private/v17tx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v17tx.h,v 1.2.4.1 2009/12/24 16:52:30 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/private/v18.h b/libs/spandsp/src/spandsp/private/v18.h index 79471fd68f..6f7d987bea 100644 --- a/libs/spandsp/src/spandsp/private/v18.h +++ b/libs/spandsp/src/spandsp/private/v18.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v18.h,v 1.5 2009/11/04 15:52:06 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_V18_H_) diff --git a/libs/spandsp/src/spandsp/private/v22bis.h b/libs/spandsp/src/spandsp/private/v22bis.h index a2e07d5392..92317f6d72 100644 --- a/libs/spandsp/src/spandsp/private/v22bis.h +++ b/libs/spandsp/src/spandsp/private/v22bis.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v22bis.h,v 1.12 2009/11/04 15:52:06 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_V22BIS_H_) @@ -37,7 +35,7 @@ #define V22BIS_TX_FILTER_STEPS 9 /*! The number of taps in the receive pulse shaping/bandpass filter */ -#define V22BIS_RX_FILTER_STEPS 37 +#define V22BIS_RX_FILTER_STEPS 27 /*! Segments of the training sequence on the receive side */ enum @@ -96,12 +94,16 @@ struct v22bis_state_s struct { /*! \brief The route raised cosine (RRC) pulse shaping filter buffer. */ - float rrc_filter[2*V22BIS_RX_FILTER_STEPS]; +#if defined(SPANDSP_USE_FIXED_POINTx) + int16_t rrc_filter[V22BIS_RX_FILTER_STEPS]; +#else + float rrc_filter[V22BIS_RX_FILTER_STEPS]; +#endif /*! \brief Current offset into the RRC pulse shaping filter buffer. */ int rrc_filter_step; /*! \brief The register for the data scrambler. */ - unsigned int scramble_reg; + uint32_t scramble_reg; /*! \brief A counter for the number of consecutive bits of repeating pattern through the scrambler. */ int scrambler_pattern_count; diff --git a/libs/spandsp/src/spandsp/private/v27ter_rx.h b/libs/spandsp/src/spandsp/private/v27ter_rx.h index 63566de622..bc26c2d106 100644 --- a/libs/spandsp/src/spandsp/private/v27ter_rx.h +++ b/libs/spandsp/src/spandsp/private/v27ter_rx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v27ter_rx.h,v 1.2 2009/07/09 13:52:09 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_V27TER_RX_H_) @@ -30,10 +28,10 @@ /* Target length for the equalizer is about 43 taps for 4800bps and 32 taps for 2400bps to deal with the worst stuff in V.56bis. */ -/*! Samples before the target position in the equalizer buffer */ -#define V27TER_EQUALIZER_PRE_LEN 16 /* This much before the real event */ -/*! Samples after the target position in the equalizer buffer */ -#define V27TER_EQUALIZER_POST_LEN 14 /* This much after the real event (must be even) */ +/*! The length of the equalizer buffer. Must be a power of 2 */ +#define V27TER_EQUALIZER_LEN 32 +/*! Samples before the target central position in the equalizer buffer */ +#define V27TER_EQUALIZER_PRE_LEN 16 /*! The number of taps in the 4800bps pulse shaping/bandpass filter */ #define V27TER_RX_4800_FILTER_STEPS 27 @@ -155,11 +153,11 @@ struct v27ter_rx_state_s /*! \brief The current delta factor for updating the equalizer coefficients. */ float eq_delta; /*! \brief The adaptive equalizer coefficients. */ - /*complexi16_t*/ complexf_t eq_coeff[V27TER_EQUALIZER_PRE_LEN + 1 + V27TER_EQUALIZER_POST_LEN]; + /*complexi16_t*/ complexf_t eq_coeff[V27TER_EQUALIZER_LEN]; /*! \brief A saved set of adaptive equalizer coefficients for use after restarts. */ - /*complexi16_t*/ complexf_t eq_coeff_save[V27TER_EQUALIZER_PRE_LEN + 1 + V27TER_EQUALIZER_POST_LEN]; + /*complexi16_t*/ complexf_t eq_coeff_save[V27TER_EQUALIZER_LEN]; /*! \brief The equalizer signal buffer. */ - /*complexi16_t*/ complexf_t eq_buf[V27TER_EQUALIZER_PRE_LEN + 1 + V27TER_EQUALIZER_POST_LEN]; + /*complexi16_t*/ complexf_t eq_buf[V27TER_EQUALIZER_LEN]; #else /*! \brief The scaling factor accessed by the AGC algorithm. */ float agc_scaling; @@ -169,11 +167,11 @@ struct v27ter_rx_state_s /*! \brief The current delta factor for updating the equalizer coefficients. */ float eq_delta; /*! \brief The adaptive equalizer coefficients. */ - complexf_t eq_coeff[V27TER_EQUALIZER_PRE_LEN + 1 + V27TER_EQUALIZER_POST_LEN]; + complexf_t eq_coeff[V27TER_EQUALIZER_LEN]; /*! \brief A saved set of adaptive equalizer coefficients for use after restarts. */ - complexf_t eq_coeff_save[V27TER_EQUALIZER_PRE_LEN + 1 + V27TER_EQUALIZER_POST_LEN]; + complexf_t eq_coeff_save[V27TER_EQUALIZER_LEN]; /*! \brief The equalizer signal buffer. */ - complexf_t eq_buf[V27TER_EQUALIZER_PRE_LEN + 1 + V27TER_EQUALIZER_POST_LEN]; + complexf_t eq_buf[V27TER_EQUALIZER_LEN]; #endif /*! \brief Integration variable for damping the Gardner algorithm tests. */ diff --git a/libs/spandsp/src/spandsp/private/v27ter_tx.h b/libs/spandsp/src/spandsp/private/v27ter_tx.h index 28e455cd85..12d77510d4 100644 --- a/libs/spandsp/src/spandsp/private/v27ter_tx.h +++ b/libs/spandsp/src/spandsp/private/v27ter_tx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v27ter_tx.h,v 1.3 2009/07/09 13:52:09 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_V27TER_TX_H_) diff --git a/libs/spandsp/src/spandsp/private/v29rx.h b/libs/spandsp/src/spandsp/private/v29rx.h index 6dbb3a727d..3f6433bad9 100644 --- a/libs/spandsp/src/spandsp/private/v29rx.h +++ b/libs/spandsp/src/spandsp/private/v29rx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v29rx.h,v 1.2 2009/07/09 13:52:09 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_V29RX_H_) @@ -30,10 +28,10 @@ /* Target length for the equalizer is about 63 taps, to deal with the worst stuff in V.56bis. */ +/*! The length of the equalizer buffer */ +#define V29_EQUALIZER_LEN 33 /*! Samples before the target position in the equalizer buffer */ #define V29_EQUALIZER_PRE_LEN 16 -/*! Samples after the target position in the equalizer buffer */ -#define V29_EQUALIZER_POST_LEN 14 /*! The number of taps in the pulse shaping/bandpass filter */ #define V29_RX_FILTER_STEPS 27 @@ -73,7 +71,7 @@ struct v29_rx_state_s int rrc_filter_step; /*! \brief The register for the data scrambler. */ - unsigned int scramble_reg; + uint32_t scramble_reg; /*! \brief The register for the training scrambler. */ uint8_t training_scramble_reg; /*! \brief The current step in the table of CD constellation positions. */ @@ -146,11 +144,11 @@ struct v29_rx_state_s /*! \brief The current delta factor for updating the equalizer coefficients. */ int16_t eq_delta; /*! \brief The adaptive equalizer coefficients. */ - complexi16_t eq_coeff[V29_EQUALIZER_PRE_LEN + 1 + V29_EQUALIZER_POST_LEN]; + complexi16_t eq_coeff[V29_EQUALIZER_LEN]; /*! \brief A saved set of adaptive equalizer coefficients for use after restarts. */ - complexi16_t eq_coeff_save[V29_EQUALIZER_PRE_LEN + 1 + V29_EQUALIZER_POST_LEN]; + complexi16_t eq_coeff_save[V29_EQUALIZER_LEN]; /*! \brief The equalizer signal buffer. */ - complexi16_t eq_buf[V29_EQUALIZER_PRE_LEN + 1 + V29_EQUALIZER_POST_LEN]; + complexi16_t eq_buf[V29_EQUALIZER_LEN]; /*! Low band edge filter for symbol sync. */ int32_t symbol_sync_low[2]; @@ -169,11 +167,11 @@ struct v29_rx_state_s /*! \brief The current delta factor for updating the equalizer coefficients. */ float eq_delta; /*! \brief The adaptive equalizer coefficients. */ - complexf_t eq_coeff[V29_EQUALIZER_PRE_LEN + 1 + V29_EQUALIZER_POST_LEN]; + complexf_t eq_coeff[V29_EQUALIZER_LEN]; /*! \brief A saved set of adaptive equalizer coefficients for use after restarts. */ - complexf_t eq_coeff_save[V29_EQUALIZER_PRE_LEN + 1 + V29_EQUALIZER_POST_LEN]; + complexf_t eq_coeff_save[V29_EQUALIZER_LEN]; /*! \brief The equalizer signal buffer. */ - complexf_t eq_buf[V29_EQUALIZER_PRE_LEN + 1 + V29_EQUALIZER_POST_LEN]; + complexf_t eq_buf[V29_EQUALIZER_LEN]; /*! Low band edge filter for symbol sync. */ float symbol_sync_low[2]; diff --git a/libs/spandsp/src/spandsp/private/v29tx.h b/libs/spandsp/src/spandsp/private/v29tx.h index 129f68c09a..bb95dba527 100644 --- a/libs/spandsp/src/spandsp/private/v29tx.h +++ b/libs/spandsp/src/spandsp/private/v29tx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v29tx.h,v 1.2 2009/07/09 13:52:09 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_V29TX_H_) diff --git a/libs/spandsp/src/spandsp/private/v42.h b/libs/spandsp/src/spandsp/private/v42.h index 1a1347c746..0689c1d01a 100644 --- a/libs/spandsp/src/spandsp/private/v42.h +++ b/libs/spandsp/src/spandsp/private/v42.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v42.h,v 1.2 2009/11/04 15:52:06 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_V42_H_) diff --git a/libs/spandsp/src/spandsp/private/v42bis.h b/libs/spandsp/src/spandsp/private/v42bis.h index 96538f2e08..287c26bd2c 100644 --- a/libs/spandsp/src/spandsp/private/v42bis.h +++ b/libs/spandsp/src/spandsp/private/v42bis.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v42bis.h,v 1.1 2008/11/15 14:43:08 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_V42BIS_H_) diff --git a/libs/spandsp/src/spandsp/private/v8.h b/libs/spandsp/src/spandsp/private/v8.h index 45d56aab9f..2fb481d0b2 100644 --- a/libs/spandsp/src/spandsp/private/v8.h +++ b/libs/spandsp/src/spandsp/private/v8.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v8.h,v 1.3.4.1 2009/12/28 12:20:47 steveu Exp $ */ #if !defined(_SPANDSP_PRIVATE_V8_H_) @@ -30,10 +28,12 @@ struct v8_state_s { - /*! \brief TRUE if we are the calling modem */ + /*! \brief TRUE if we are the calling party */ int calling_party; + /*! \brief A handler to process the V.8 signals */ v8_result_handler_t *result_handler; + /*! \brief An opaque pointer passed to result_handler */ void *result_handler_user_data; /*! \brief The current state of the V.8 protocol */ @@ -49,12 +49,12 @@ struct v8_state_s modem_connect_tones_tx_state_t ansam_tx; modem_connect_tones_rx_state_t ansam_rx; - /*! \brief Modulation schemes available at this end. */ - unsigned int far_end_modulations; - v8_parms_t parms; v8_parms_t result; + /*! \brief The number of modulation bytes to use when sending. */ + int modulation_bytes; + /* V.8 data parsing */ uint32_t bit_stream; int bit_cnt; diff --git a/libs/spandsp/src/spandsp/queue.h b/libs/spandsp/src/spandsp/queue.h index d5e58d4496..cbb4357916 100644 --- a/libs/spandsp/src/spandsp/queue.h +++ b/libs/spandsp/src/spandsp/queue.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: queue.h,v 1.21 2009/02/10 13:06:47 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/saturated.h b/libs/spandsp/src/spandsp/saturated.h index 2038b25216..958167b4ec 100644 --- a/libs/spandsp/src/spandsp/saturated.h +++ b/libs/spandsp/src/spandsp/saturated.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: saturated.h,v 1.4 2009/02/05 12:21:36 steveu Exp $ */ /*! \file */ @@ -44,6 +42,7 @@ extern "C" { #endif +/* This is the same as saturate16(), but is here for historic reasons */ static __inline__ int16_t saturate(int32_t amp) { int16_t amp16; @@ -58,6 +57,20 @@ static __inline__ int16_t saturate(int32_t amp) } /*- End of function --------------------------------------------------------*/ +static __inline__ int16_t saturate16(int32_t amp) +{ + int16_t amp16; + + /* Hopefully this is optimised for the common case - not clipping */ + amp16 = (int16_t) amp; + if (amp == amp16) + return amp16; + if (amp > INT16_MAX) + return INT16_MAX; + return INT16_MIN; +} +/*- End of function --------------------------------------------------------*/ + /*! Saturate to 15 bits, rather than the usual 16 bits. This is often a useful function. */ static __inline__ int16_t saturate15(int32_t amp) { @@ -69,6 +82,34 @@ static __inline__ int16_t saturate15(int32_t amp) } /*- End of function --------------------------------------------------------*/ +static __inline__ uint16_t saturateu16(int32_t amp) +{ + uint16_t amp16; + + /* Hopefully this is optimised for the common case - not clipping */ + amp16 = (uint16_t) amp; + if (amp == amp16) + return amp16; + if (amp > UINT16_MAX) + return UINT16_MAX; + return 0; +} +/*- End of function --------------------------------------------------------*/ + +static __inline__ uint8_t saturateu8(int32_t amp) +{ + uint8_t amp8; + + /* Hopefully this is optimised for the common case - not clipping */ + amp8 = (uint8_t) amp; + if (amp == amp8) + return amp8; + if (amp > UINT8_MAX) + return UINT8_MAX; + return 0; +} +/*- End of function --------------------------------------------------------*/ + static __inline__ int16_t fsaturatef(float famp) { if (famp > (float) INT16_MAX) @@ -135,7 +176,7 @@ static __inline__ double ffsaturate(double famp) static __inline__ int16_t saturated_add16(int16_t a, int16_t b) { -#if defined(__GNUC__) && defined(__i386__) +#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) __asm__ __volatile__( " addw %2,%0;\n" " jno 0f;\n" @@ -147,6 +188,15 @@ static __inline__ int16_t saturated_add16(int16_t a, int16_t b) : "cc" ); return a; +#elif defined(__GNUC__) && defined(__arm5__) + int16_t result; + + __asm__ __volatile__( + " sadd16 %0,%1,%2;\n" + : "=r" (result) + : "0" (a), "ir" (b) + ); + return result; #else return saturate((int32_t) a + (int32_t) b); #endif @@ -155,7 +205,7 @@ static __inline__ int16_t saturated_add16(int16_t a, int16_t b) static __inline__ int32_t saturated_add32(int32_t a, int32_t b) { -#if defined(__GNUC__) && defined(__i386__) +#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) __asm__ __volatile__( " addl %2,%0;\n" " jno 0f;\n" @@ -167,30 +217,92 @@ static __inline__ int32_t saturated_add32(int32_t a, int32_t b) : "cc" ); return a; -#else - uint32_t A; +#elif defined(__GNUC__) && defined(__arm5__) + int32_t result; - if (a < 0) + __asm__ __volatile__( + " qadd %0,%1,%2;\n" + : "=r" (result) + : "0" (a), "ir" (b) + ); + return result; +#else + int32_t sum; + + sum = a + b; + if ((a ^ b) >= 0) { - if (b >= 0) - return a + b; - /*endif*/ - A = (uint32_t) -(a + 1) + (uint32_t) -(b + 1); - return (A >= INT32_MAX) ? INT32_MIN : -(int32_t) A - 2; + if ((sum ^ a) < 0) + sum = (a < 0) ? INT32_MIN : INT32_MAX; } - /*endif*/ - if (b <= 0) - return a + b; - /*endif*/ - A = (uint32_t) a + (uint32_t) b; - return (A > INT32_MAX) ? INT32_MAX : A; + return sum; #endif } /*- End of function --------------------------------------------------------*/ static __inline__ int16_t saturated_sub16(int16_t a, int16_t b) { +#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) + __asm__ __volatile__( + " subw %2,%0;\n" + " jno 0f;\n" + " movw $0x8000,%0;\n" + " sbbw $0,%0;\n" + "0:" + : "=r" (a) + : "0" (a), "ir" (b) + : "cc" + ); + return a; +#elif defined(__GNUC__) && defined(__arm5__) + int16_t result; + + __asm__ __volatile__( + " ssub16 %0,%1,%2;\n" + : "=r" (result) + : "0" (a), "ir" (b) + ); + return result; +#else return saturate((int32_t) a - (int32_t) b); +#endif +} +/*- End of function --------------------------------------------------------*/ + +static __inline__ int32_t saturated_sub32(int32_t a, int32_t b) +{ +#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) + __asm__ __volatile__( + " subl %2,%0;\n" + " jno 0f;\n" + " movl $0x80000000,%0;\n" + " sbbl $0,%0;\n" + "0:" + : "=r" (a) + : "0" (a), "ir" (b) + : "cc" + ); + return a; +#elif defined(__GNUC__) && defined(__arm5__) + int32_t result; + + __asm__ __volatile__( + " qsub %0,%1,%2;\n" + : "=r" (result) + : "0" (a), "ir" (b) + ); + return result; +#else + int32_t diff; + + diff = a - b; + if ((a ^ b) < 0) + { + if ((diff ^ a) & INT32_MIN) + diff = (a < 0L) ? INT32_MIN : INT32_MAX; + } + return diff; +#endif } /*- End of function --------------------------------------------------------*/ @@ -203,7 +315,7 @@ static __inline__ int16_t saturated_mul16(int16_t a, int16_t b) } /*- End of function --------------------------------------------------------*/ -static __inline__ int32_t saturated_mul_16_32(int16_t a, int16_t b) +static __inline__ int32_t saturated_mul16_32(int16_t a, int16_t b) { return ((int32_t) a*(int32_t) b) << 1; } diff --git a/libs/spandsp/src/spandsp/schedule.h b/libs/spandsp/src/spandsp/schedule.h index 20c99f1577..95509e016a 100644 --- a/libs/spandsp/src/spandsp/schedule.h +++ b/libs/spandsp/src/spandsp/schedule.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: schedule.h,v 1.20 2009/02/10 13:06:47 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/sig_tone.h b/libs/spandsp/src/spandsp/sig_tone.h index 649f1e10a6..8213e1ca73 100644 --- a/libs/spandsp/src/spandsp/sig_tone.h +++ b/libs/spandsp/src/spandsp/sig_tone.h @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: sig_tone.h,v 1.23 2010/03/09 13:43:04 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/silence_gen.h b/libs/spandsp/src/spandsp/silence_gen.h index 467408d75b..c2300c845c 100644 --- a/libs/spandsp/src/spandsp/silence_gen.h +++ b/libs/spandsp/src/spandsp/silence_gen.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: silence_gen.h,v 1.19 2009/09/04 14:38:47 steveu Exp $ */ #if !defined(_SPANDSP_SILENCE_GEN_H_) diff --git a/libs/spandsp/src/spandsp/super_tone_rx.h b/libs/spandsp/src/spandsp/super_tone_rx.h index 790c694e69..702069856c 100644 --- a/libs/spandsp/src/spandsp/super_tone_rx.h +++ b/libs/spandsp/src/spandsp/super_tone_rx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: super_tone_rx.h,v 1.21 2009/02/10 13:06:47 steveu Exp $ */ #if !defined(_SPANDSP_SUPER_TONE_RX_H_) diff --git a/libs/spandsp/src/spandsp/super_tone_tx.h b/libs/spandsp/src/spandsp/super_tone_tx.h index b2de99fbb7..9f7ed6d6a1 100644 --- a/libs/spandsp/src/spandsp/super_tone_tx.h +++ b/libs/spandsp/src/spandsp/super_tone_tx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: super_tone_tx.h,v 1.17 2009/02/10 13:06:47 steveu Exp $ */ #if !defined(_SPANDSP_SUPER_TONE_TX_H_) diff --git a/libs/spandsp/src/spandsp/swept_tone.h b/libs/spandsp/src/spandsp/swept_tone.h index 414f951fb3..917b507fff 100644 --- a/libs/spandsp/src/spandsp/swept_tone.h +++ b/libs/spandsp/src/spandsp/swept_tone.h @@ -10,19 +10,17 @@ * All rights reserved. * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2, as - * published by the Free Software Foundation. + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: swept_tone.h,v 1.1 2009/09/22 12:54:33 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/t30.h b/libs/spandsp/src/spandsp/t30.h index 3c1b441030..9b01d3b62b 100644 --- a/libs/spandsp/src/spandsp/t30.h +++ b/libs/spandsp/src/spandsp/t30.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t30.h,v 1.126.4.1 2009/12/19 09:47:56 steveu Exp $ */ /*! \file */ @@ -321,6 +319,7 @@ enum T30_MODEM_V27TER, T30_MODEM_V29, T30_MODEM_V17, + T30_MODEM_V34HDX, T30_MODEM_DONE }; @@ -346,7 +345,7 @@ enum /*! Support the V.17 modem (14400, 12000, 9600 and 7200bps) for image transfer. */ T30_SUPPORT_V17 = 0x04, /*! Support the V.34 modem (up to 33,600bps) for image transfer. */ - T30_SUPPORT_V34 = 0x08, + T30_SUPPORT_V34HDX = 0x08, /*! Support the Internet aware FAX mode (no bit rate limit) for image transfer. */ T30_SUPPORT_IAF = 0x10 }; @@ -361,18 +360,20 @@ enum T30_SUPPORT_T4_2D_COMPRESSION = 0x04, /*! T.6 2D compression */ T30_SUPPORT_T6_COMPRESSION = 0x08, - /*! T.85 monochrome JBIG compression */ + /*! T.85 monochrome JBIG compression, with fixed L0 */ T30_SUPPORT_T85_COMPRESSION = 0x10, + /*! T.85 monochrome JBIG compression, with variable L0 */ + T30_SUPPORT_T85_L0_COMPRESSION = 0x20, /*! T.43 colour JBIG compression */ - T30_SUPPORT_T43_COMPRESSION = 0x20, + T30_SUPPORT_T43_COMPRESSION = 0x40, /*! T.45 run length colour compression */ - T30_SUPPORT_T45_COMPRESSION = 0x40, + T30_SUPPORT_T45_COMPRESSION = 0x80, /*! T.81 + T.30 Annex E colour JPEG compression */ - T30_SUPPORT_T81_COMPRESSION = 0x80, + T30_SUPPORT_T81_COMPRESSION = 0x100, /*! T.81 + T.30 Annex K colour sYCC-JPEG compression */ - T30_SUPPORT_SYCC_T81_COMPRESSION = 0x100, + T30_SUPPORT_SYCC_T81_COMPRESSION = 0x200, /*! T.88 monochrome JBIG2 compression */ - T30_SUPPORT_T88_COMPRESSION = 0x200 + T30_SUPPORT_T88_COMPRESSION = 0x400 }; enum @@ -544,8 +545,14 @@ typedef struct int longest_bad_row_run; /*! \brief The number of HDLC frame retries, if error correcting mode is used. */ int error_correcting_mode_retries; - /*! \brief Current status */ + /*! \brief Current status. */ int current_status; +#if 0 + /*! \brief The number of RTP events in this call. */ + int rtp_events; + /*! \brief The number of RTN events in this call. */ + int rtn_events; +#endif } t30_stats_t; #if defined(__cplusplus) diff --git a/libs/spandsp/src/spandsp/t30_api.h b/libs/spandsp/src/spandsp/t30_api.h index 9151e9b55d..d758c8e871 100644 --- a/libs/spandsp/src/spandsp/t30_api.h +++ b/libs/spandsp/src/spandsp/t30_api.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t30_api.h,v 1.10 2009/04/12 09:12:10 steveu Exp $ */ /*! \file */ @@ -227,9 +225,9 @@ SPAN_DECLARE(const char *) t30_get_tx_password(t30_state_t *s); \return A pointer to the password. */ SPAN_DECLARE(const char *) t30_get_rx_password(t30_state_t *s); -/*! Set the transmitted ??? (i.e. the one we will send to the far +/*! Set the transmitted TSA (i.e. the one we will send to the far end) associated with a T.30 context. - \brief Set the transmitted ??? associated with a T.30 context. + \brief Set the transmitted TSA associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. @@ -237,27 +235,26 @@ SPAN_DECLARE(const char *) t30_get_rx_password(t30_state_t *s); \return 0 for OK, else -1. */ SPAN_DECLARE(int) t30_set_tx_tsa(t30_state_t *s, int type, const char *address, int len); -/*! Get the received ??? (i.e. the one we will send to the far +/*! Get the transmitted TSA (i.e. the one we will send to the far end) associated with a T.30 context. - \brief Get the received ??? associated with a T.30 context. + \brief Get the received TSA associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. \return The length of the address. */ SPAN_DECLARE(size_t) t30_get_tx_tsa(t30_state_t *s, int *type, const char *address[]); -/*! Get the received ??? (i.e. the one we will send to the far - end) associated with a T.30 context. - \brief Get the received ??? associated with a T.30 context. +/*! Get the received TSA associated with a T.30 context. + \brief Get the received TSA associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. \return The length of the address. */ SPAN_DECLARE(size_t) t30_get_rx_tsa(t30_state_t *s, int *type, const char *address[]); -/*! Set the transmitted ??? (i.e. the one we will send to the far +/*! Set the transmitted IRA (i.e. the one we will send to the far end) associated with a T.30 context. - \brief Set the transmitted ??? associated with a T.30 context. + \brief Set the transmitted IRA associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. @@ -265,27 +262,26 @@ SPAN_DECLARE(size_t) t30_get_rx_tsa(t30_state_t *s, int *type, const char *addre \return 0 for OK, else -1. */ SPAN_DECLARE(int) t30_set_tx_ira(t30_state_t *s, int type, const char *address, int len); -/*! Get the received ??? (i.e. the one we will send to the far +/*! Get the transmitted IRA (i.e. the one we will send to the far end) associated with a T.30 context. - \brief Get the received ??? associated with a T.30 context. + \brief Get the received IRA associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. \return The length of the address. */ SPAN_DECLARE(size_t) t30_get_tx_ira(t30_state_t *s, int *type, const char *address[]); -/*! Get the received ??? (i.e. the one we will send to the far - end) associated with a T.30 context. - \brief Get the received ??? associated with a T.30 context. +/*! Get the received IRA associated with a T.30 context. + \brief Get the received IRA associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. \return The length of the address. */ SPAN_DECLARE(size_t) t30_get_rx_ira(t30_state_t *s, int *type, const char *address[]); -/*! Set the transmitted ??? (i.e. the one we will send to the far +/*! Set the transmitted CIA (i.e. the one we will send to the far end) associated with a T.30 context. - \brief Set the transmitted ??? associated with a T.30 context. + \brief Set the transmitted CIA associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. @@ -293,27 +289,26 @@ SPAN_DECLARE(size_t) t30_get_rx_ira(t30_state_t *s, int *type, const char *addre \return 0 for OK, else -1. */ SPAN_DECLARE(int) t30_set_tx_cia(t30_state_t *s, int type, const char *address, int len); -/*! Get the received ??? (i.e. the one we will send to the far +/*! Get the transmitted CIA (i.e. the one we will send to the far end) associated with a T.30 context. - \brief Get the received ??? associated with a T.30 context. + \brief Get the received CIA associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. \return The length of the address. */ SPAN_DECLARE(size_t) t30_get_tx_cia(t30_state_t *s, int *type, const char *address[]); -/*! Get the received ??? (i.e. the one we will send to the far - end) associated with a T.30 context. - \brief Get the received ??? associated with a T.30 context. +/*! Get the received CIA associated with a T.30 context. + \brief Get the received CIA associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. \return 0 for OK, else -1. */ SPAN_DECLARE(size_t) t30_get_rx_cia(t30_state_t *s, int *type, const char *address[]); -/*! Set the transmitted ??? (i.e. the one we will send to the far +/*! Set the transmitted ISP (i.e. the one we will send to the far end) associated with a T.30 context. - \brief Set the transmitted ??? associated with a T.30 context. + \brief Set the transmitted ISP associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. @@ -321,27 +316,26 @@ SPAN_DECLARE(size_t) t30_get_rx_cia(t30_state_t *s, int *type, const char *addre \return 0 for OK, else -1. */ SPAN_DECLARE(int) t30_set_tx_isp(t30_state_t *s, int type, const char *address, int len); -/*! Get the received ??? (i.e. the one we will send to the far +/*! Get the transmitted ISP (i.e. the one we will send to the far end) associated with a T.30 context. - \brief Get the received ??? associated with a T.30 context. + \brief Get the received ISP associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. \return 0 for OK, else -1. */ SPAN_DECLARE(size_t) t30_get_tx_isp(t30_state_t *s, int *type, const char *address[]); -/*! Get the received ??? (i.e. the one we will send to the far - end) associated with a T.30 context. - \brief Get the received ??? associated with a T.30 context. +/*! Get the received ISP associated with a T.30 context. + \brief Get the received ISP associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. \return 0 for OK, else -1. */ SPAN_DECLARE(size_t) t30_get_rx_isp(t30_state_t *s, int *type, const char *address[]); -/*! Set the transmitted ??? (i.e. the one we will send to the far +/*! Set the transmitted CSA (i.e. the one we will send to the far end) associated with a T.30 context. - \brief Set the transmitted ??? associated with a T.30 context. + \brief Set the transmitted CSA associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. @@ -349,24 +343,29 @@ SPAN_DECLARE(size_t) t30_get_rx_isp(t30_state_t *s, int *type, const char *addre \return 0 for OK, else -1. */ SPAN_DECLARE(int) t30_set_tx_csa(t30_state_t *s, int type, const char *address, int len); -/*! Get the received ??? (i.e. the one we will send to the far +/*! Get the transmitted CSA (i.e. the one we will send to the far end) associated with a T.30 context. - \brief Get the received ??? associated with a T.30 context. + \brief Get the received CSA associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. \return The length of the address. */ SPAN_DECLARE(size_t) t30_get_tx_csa(t30_state_t *s, int *type, const char *address[]); -/*! Get the received ??? (i.e. the one we will send to the far - end) associated with a T.30 context. - \brief Get the received ??? associated with a T.30 context. +/*! Get the received CSA associated with a T.30 context. + \brief Get the received CSA associated with a T.30 context. \param s The T.30 context. \param type The type of address. \param address A pointer to the address. \return 0 for OK, else -1. */ SPAN_DECLARE(size_t) t30_get_rx_csa(t30_state_t *s, int *type, const char *address[]); +/*! Set page header extends or overlays the image mode. + \brief Set page header overlay mode. + \param s The T.30 context. + \param header_overlays_image TRUE for overlay, or FALSE for extend the page. */ +SPAN_DECLARE(int) t30_set_tx_page_header_overlays_image(t30_state_t *s, int header_overlays_image); + /*! Set the transmitted header information associated with a T.30 context. \brief Set the transmitted header information associated with a T.30 context. \param s The T.30 context. @@ -374,6 +373,13 @@ SPAN_DECLARE(size_t) t30_get_rx_csa(t30_state_t *s, int *type, const char *addre \return 0 for OK, else -1. */ SPAN_DECLARE(int) t30_set_tx_page_header_info(t30_state_t *s, const char *info); +/*! Set the transmitted header timestamp timezone associated with a T.30 context. + \brief Set the transmitted header timestamp timezone associated with a T.30 context. + \param s The T.30 context. + \param info A pointer to the POSIZ timezone string. + \return 0 for OK, else -1. */ +SPAN_DECLARE(int) t30_set_tx_page_header_tz(t30_state_t *s, const char *tzstring); + /*! Get the header information associated with a T.30 context. \brief Get the header information associated with a T.30 context. \param s The T.30 context. diff --git a/libs/spandsp/src/spandsp/t30_fcf.h b/libs/spandsp/src/spandsp/t30_fcf.h index a303fb4f93..7414497247 100644 --- a/libs/spandsp/src/spandsp/t30_fcf.h +++ b/libs/spandsp/src/spandsp/t30_fcf.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t30_fcf.h,v 1.18 2009/10/08 15:14:31 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/t30_logging.h b/libs/spandsp/src/spandsp/t30_logging.h index cd68fdca97..2dc9bb321c 100644 --- a/libs/spandsp/src/spandsp/t30_logging.h +++ b/libs/spandsp/src/spandsp/t30_logging.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t30_logging.h,v 1.4 2009/02/03 16:28:41 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/t31.h b/libs/spandsp/src/spandsp/t31.h index ffb47a98df..25f826d42c 100644 --- a/libs/spandsp/src/spandsp/t31.h +++ b/libs/spandsp/src/spandsp/t31.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t31.h,v 1.59 2009/03/13 12:59:26 steveu Exp $ */ /*! \file */ @@ -67,7 +65,7 @@ SPAN_DECLARE(int) t31_at_rx(t31_state_t *s, const char *t, int len); \param amp The audio sample buffer. \param len The number of samples in the buffer. \return The number of samples unprocessed. */ -SPAN_DECLARE(int) t31_rx(t31_state_t *s, int16_t amp[], int len); +SPAN_DECLARE_NONSTD(int) t31_rx(t31_state_t *s, int16_t amp[], int len); /*! Fake processing of a missing block of received T.31 modem audio samples (e.g due to packet loss). @@ -75,7 +73,7 @@ SPAN_DECLARE(int) t31_rx(t31_state_t *s, int16_t amp[], int len); \param s The T.31 modem context. \param len The number of samples to fake. \return The number of samples unprocessed. */ -SPAN_DECLARE(int) t31_rx_fillin(t31_state_t *s, int len); +SPAN_DECLARE_NONSTD(int) t31_rx_fillin(t31_state_t *s, int len); /*! Generate a block of T.31 modem audio samples. \brief Generate a block of T.31 modem audio samples. @@ -84,7 +82,7 @@ SPAN_DECLARE(int) t31_rx_fillin(t31_state_t *s, int len); \param max_len The number of samples to be generated. \return The number of samples actually generated. */ -SPAN_DECLARE(int) t31_tx(t31_state_t *s, int16_t amp[], int max_len); +SPAN_DECLARE_NONSTD(int) t31_tx(t31_state_t *s, int16_t amp[], int max_len); SPAN_DECLARE(int) t31_t38_send_timeout(t31_state_t *s, int samples); diff --git a/libs/spandsp/src/spandsp/t35.h b/libs/spandsp/src/spandsp/t35.h index bdfbe0bc6a..553b6212e0 100644 --- a/libs/spandsp/src/spandsp/t35.h +++ b/libs/spandsp/src/spandsp/t35.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t35.h,v 1.15 2009/01/31 08:48:11 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/t38_core.h b/libs/spandsp/src/spandsp/t38_core.h index f6b0b12ea0..1476969eeb 100644 --- a/libs/spandsp/src/spandsp/t38_core.h +++ b/libs/spandsp/src/spandsp/t38_core.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_core.h,v 1.39 2009/07/14 13:54:22 steveu Exp $ */ /*! \file */ @@ -253,10 +251,16 @@ SPAN_DECLARE(int) t38_core_send_indicator(t38_core_state_t *s, int indicator); /*! \brief Find the delay to allow for HDLC flags after sending an indicator \param s The T.38 context. - \param indicator The indicator to send. + \param indicator The indicator to check. \return The delay to allow for initial HDLC flags after this indicator is sent. */ SPAN_DECLARE(int) t38_core_send_flags_delay(t38_core_state_t *s, int indicator); +/*! \brief Find the delay to allow for modem training after sending an indicator + \param s The T.38 context. + \param indicator The indicator to check. + \return The delay to allow for modem training after this indicator is sent. */ +SPAN_DECLARE(int) t38_core_send_training_delay(t38_core_state_t *s, int indicator); + /*! \brief Send a data packet \param s The T.38 context. \param data_type The packet's data type. @@ -282,7 +286,7 @@ SPAN_DECLARE(int) t38_core_send_data_multi_field(t38_core_state_t *s, int data_t \param len The length of the packet contents. \param seq_no The packet sequence number. \return 0 for OK, else -1. */ -SPAN_DECLARE_NONSTD(int) t38_core_rx_ifp_packet(t38_core_state_t *s, const uint8_t *buf, int len, uint16_t seq_no); +SPAN_DECLARE(int) t38_core_rx_ifp_packet(t38_core_state_t *s, const uint8_t *buf, int len, uint16_t seq_no); /*! Set the method to be used for data rate management, as per the T.38 spec. \param s The T.38 context. @@ -365,6 +369,12 @@ SPAN_DECLARE(void) t38_set_tep_handling(t38_core_state_t *s, int allow_for_tep); */ SPAN_DECLARE(logging_state_t *) t38_core_get_logging_state(t38_core_state_t *s); +/*! Restart a T.38 core context. + \brief Restart a T.38 core context. + \param s The T.38 context. + \return 0 for OK, else -1. */ +SPAN_DECLARE(int) t38_core_restart(t38_core_state_t *s); + /*! Initialise a T.38 core context. \brief Initialise a T.38 core context. \param s The T.38 context. diff --git a/libs/spandsp/src/spandsp/t38_gateway.h b/libs/spandsp/src/spandsp/t38_gateway.h index b2a1c1f6e9..fa6db4bec5 100644 --- a/libs/spandsp/src/spandsp/t38_gateway.h +++ b/libs/spandsp/src/spandsp/t38_gateway.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_gateway.h,v 1.63 2009/04/12 09:12:10 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/t38_non_ecm_buffer.h b/libs/spandsp/src/spandsp/t38_non_ecm_buffer.h index 8ffffde18b..744643aa40 100644 --- a/libs/spandsp/src/spandsp/t38_non_ecm_buffer.h +++ b/libs/spandsp/src/spandsp/t38_non_ecm_buffer.h @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_non_ecm_buffer.h,v 1.7.4.1 2009/12/19 06:43:28 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/t38_terminal.h b/libs/spandsp/src/spandsp/t38_terminal.h index 4bcb1e0d28..c751b477da 100644 --- a/libs/spandsp/src/spandsp/t38_terminal.h +++ b/libs/spandsp/src/spandsp/t38_terminal.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_terminal.h,v 1.41 2009/02/03 16:28:41 steveu Exp $ */ /*! \file */ @@ -39,6 +37,19 @@ /* Make sure the HDLC frame buffers are big enough for ECM frames. */ #define T38_MAX_HDLC_LEN 260 +enum +{ + /*! This option enables the continuous streaming of FAX data, with no allowance for + FAX machine speeds. This is usually used with TCP/TPKT transmission of T.38 FAXes */ + T38_TERMINAL_OPTION_NO_PACING = 0x01, + /*! This option enables the regular repeat transmission of indicator signals, + during periods when no FAX signal transmission occurs. */ + T38_TERMINAL_OPTION_REGULAR_INDICATORS = 0x02, + /*! This option enables the regular repeat transmission of indicator signals for the + first 2s, during periods when no FAX signal transmission occurs. */ + T38_TERMINAL_OPTION_2S_REPEATING_INDICATORS = 0x04 +}; + typedef struct t38_terminal_state_s t38_terminal_state_t; #if defined(__cplusplus) @@ -48,7 +59,12 @@ extern "C" SPAN_DECLARE(int) t38_terminal_send_timeout(t38_terminal_state_t *s, int samples); -SPAN_DECLARE(void) t38_terminal_set_config(t38_terminal_state_t *s, int without_pacing); +/*! Set configuration options. + \brief Set configuration options. + \param s The T.38 context. + \param config A combinations of T38_TERMINAL_OPTION_* bits. +*/ +SPAN_DECLARE(void) t38_terminal_set_config(t38_terminal_state_t *s, int config); /*! Select whether the time for talker echo protection tone will be allowed for when sending. \brief Select whether TEP time will be allowed for. @@ -87,6 +103,14 @@ SPAN_DECLARE(t38_core_state_t *) t38_terminal_get_t38_core_state(t38_terminal_st */ SPAN_DECLARE(logging_state_t *) t38_terminal_get_logging_state(t38_terminal_state_t *s); +/*! \brief Reinitialise a termination mode T.38 context. + \param s The T.38 context. + \param calling_party TRUE if the context is for a calling party. FALSE if the + context is for an answering party. + \return 0 for OK, else -1. */ +SPAN_DECLARE(int) t38_terminal_restart(t38_terminal_state_t *s, + int calling_party); + /*! \brief Initialise a termination mode T.38 context. \param s The T.38 context. \param calling_party TRUE if the context is for a calling party. FALSE if the diff --git a/libs/spandsp/src/spandsp/t4_rx.h b/libs/spandsp/src/spandsp/t4_rx.h index 1cc8873251..b1b0a96e18 100644 --- a/libs/spandsp/src/spandsp/t4_rx.h +++ b/libs/spandsp/src/spandsp/t4_rx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t4_rx.h,v 1.3.2.3 2009/12/21 17:18:40 steveu Exp $ */ /*! \file */ @@ -54,16 +52,18 @@ typedef enum T4_COMPRESSION_ITU_T4_2D = 2, /*! T.6 2D compression */ T4_COMPRESSION_ITU_T6 = 3, - /*! T.85 monochrome JBIG coding */ + /*! T.85 monochrome JBIG coding with L0 fixed. */ T4_COMPRESSION_ITU_T85 = 4, + /*! T.85 monochrome JBIG coding with L0 variable. */ + T4_COMPRESSION_ITU_T85_L0 = 5, /*! T.43 colour JBIG coding */ - T4_COMPRESSION_ITU_T43 = 5, + T4_COMPRESSION_ITU_T43 = 6, /*! T.45 run length colour compression */ - T4_COMPRESSION_ITU_T45 = 6, + T4_COMPRESSION_ITU_T45 = 7, /*! T.81 + T.30 Annex E colour JPEG coding */ - T4_COMPRESSION_ITU_T81 = 7, + T4_COMPRESSION_ITU_T81 = 8, /*! T.81 + T.30 Annex K colour sYCC-JPEG coding */ - T4_COMPRESSION_ITU_SYCC_T81 = 8 + T4_COMPRESSION_ITU_SYCC_T81 = 9 } t4_image_compression_t; /*! Supported X resolutions, in pixels per metre. */ @@ -328,7 +328,7 @@ SPAN_DECLARE(void) t4_rx_set_model(t4_state_t *s, const char *model); \brief Get the current transfer statistics. \param s The T.4 context. \param t A pointer to a statistics structure. */ -SPAN_DECLARE(void) t4_get_transfer_statistics(t4_state_t *s, t4_stats_t *t); +SPAN_DECLARE(void) t4_rx_get_transfer_statistics(t4_state_t *s, t4_stats_t *t); /*! Get the short text name of an encoding format. \brief Get the short text name of an encoding format. diff --git a/libs/spandsp/src/spandsp/t4_tx.h b/libs/spandsp/src/spandsp/t4_tx.h index c30386c03d..0d32297ef3 100644 --- a/libs/spandsp/src/spandsp/t4_tx.h +++ b/libs/spandsp/src/spandsp/t4_tx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t4_tx.h,v 1.2.2.3 2009/12/21 17:18:40 steveu Exp $ */ /*! \file */ @@ -123,7 +121,7 @@ SPAN_DECLARE(void) t4_tx_set_tx_encoding(t4_state_t *s, int encoding); time specified by a remote receiving machine. \param s The T.4 context. \param bits The minimum number of bits per row. */ -SPAN_DECLARE(void) t4_tx_set_min_row_bits(t4_state_t *s, int bits); +SPAN_DECLARE(void) t4_tx_set_min_bits_per_row(t4_state_t *s, int bits); /*! \brief Set the identity of the local machine, for inclusion in page headers. \param s The T.4 context. @@ -139,6 +137,13 @@ SPAN_DECLARE(void) t4_tx_set_local_ident(t4_state_t *s, const char *ident); \param info A string, of up to 50 bytes, which will form the info field. */ SPAN_DECLARE(void) t4_tx_set_header_info(t4_state_t *s, const char *info); +/*! Set the time zone for the time stamp in page header lines. If this function is not used + the current time zone of the program's environment is used. + \brief Set the header timezone. + \param s The T.4 context. + \param info A POSIX timezone description string. */ +SPAN_DECLARE(void) t4_tx_set_header_tz(t4_state_t *s, const char *tzstring); + /*! \brief Set the row read handler for a T.4 transmit context. \param s The T.4 transmit context. \param handler A pointer to the handler routine. @@ -171,6 +176,12 @@ SPAN_DECLARE(int) t4_tx_get_pages_in_file(t4_state_t *s); \return The page number, or -1 if there is an error. */ SPAN_DECLARE(int) t4_tx_get_current_page_in_file(t4_state_t *s); +/*! Get the current image transfer statistics. + \brief Get the current transfer statistics. + \param s The T.4 context. + \param t A pointer to a statistics structure. */ +SPAN_DECLARE(void) t4_tx_get_transfer_statistics(t4_state_t *s, t4_stats_t *t); + #if defined(__cplusplus) } #endif diff --git a/libs/spandsp/src/spandsp/telephony.h b/libs/spandsp/src/spandsp/telephony.h index 703c0bd966..f6998e09f5 100644 --- a/libs/spandsp/src/spandsp/telephony.h +++ b/libs/spandsp/src/spandsp/telephony.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: telephony.h,v 1.18.4.2 2009/12/21 18:38:06 steveu Exp $ */ #if !defined(_SPANDSP_TELEPHONY_H_) diff --git a/libs/spandsp/src/spandsp/time_scale.h b/libs/spandsp/src/spandsp/time_scale.h index 7b7a60eda7..666cca7a78 100644 --- a/libs/spandsp/src/spandsp/time_scale.h +++ b/libs/spandsp/src/spandsp/time_scale.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: time_scale.h,v 1.20 2009/02/10 13:06:47 steveu Exp $ */ #if !defined(_SPANDSP_TIME_SCALE_H_) diff --git a/libs/spandsp/src/spandsp/timing.h b/libs/spandsp/src/spandsp/timing.h index 85f3ce5f43..01e7c99146 100644 --- a/libs/spandsp/src/spandsp/timing.h +++ b/libs/spandsp/src/spandsp/timing.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: timing.h,v 1.14 2009/09/04 14:38:47 steveu Exp $ */ #if !defined(_SPANDSP_TIMING_H_) diff --git a/libs/spandsp/src/spandsp/tone_detect.h b/libs/spandsp/src/spandsp/tone_detect.h index 6822fff676..bf779ca41e 100644 --- a/libs/spandsp/src/spandsp/tone_detect.h +++ b/libs/spandsp/src/spandsp/tone_detect.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: tone_detect.h,v 1.45 2009/02/10 13:06:47 steveu Exp $ */ #if !defined(_SPANDSP_TONE_DETECT_H_) diff --git a/libs/spandsp/src/spandsp/tone_generate.h b/libs/spandsp/src/spandsp/tone_generate.h index 4cd7ff93a0..545335af51 100644 --- a/libs/spandsp/src/spandsp/tone_generate.h +++ b/libs/spandsp/src/spandsp/tone_generate.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: tone_generate.h,v 1.40 2010/05/22 13:20:18 steveu Exp $ */ /*! \file */ @@ -88,6 +86,9 @@ SPAN_DECLARE(tone_gen_descriptor_t *) tone_gen_descriptor_init(tone_gen_descript int d4, int repeat); +/* For backwards compatibility */ +#define make_tone_gen_descriptor tone_gen_descriptor_init + SPAN_DECLARE(void) tone_gen_descriptor_free(tone_gen_descriptor_t *s); SPAN_DECLARE_NONSTD(int) tone_gen(tone_gen_state_t *s, int16_t amp[], int max_samples); diff --git a/libs/spandsp/src/spandsp/v17rx.h b/libs/spandsp/src/spandsp/v17rx.h index da4514d316..164fa25232 100644 --- a/libs/spandsp/src/spandsp/v17rx.h +++ b/libs/spandsp/src/spandsp/v17rx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v17rx.h,v 1.65 2009/07/09 13:52:09 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/v17tx.h b/libs/spandsp/src/spandsp/v17tx.h index 01b0f82056..e288817e7a 100644 --- a/libs/spandsp/src/spandsp/v17tx.h +++ b/libs/spandsp/src/spandsp/v17tx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v17tx.h,v 1.43.4.1 2009/12/24 16:52:30 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/v18.h b/libs/spandsp/src/spandsp/v18.h index 7e964cdba6..53da9d099f 100644 --- a/libs/spandsp/src/spandsp/v18.h +++ b/libs/spandsp/src/spandsp/v18.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v18.h,v 1.6 2009/11/04 15:52:06 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/v22bis.h b/libs/spandsp/src/spandsp/v22bis.h index aa2a50a05d..5bdc1791a3 100644 --- a/libs/spandsp/src/spandsp/v22bis.h +++ b/libs/spandsp/src/spandsp/v22bis.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v22bis.h,v 1.46 2009/11/04 15:52:06 steveu Exp $ */ /*! \file */ @@ -84,7 +82,7 @@ SPAN_DECLARE_NONSTD(int) v22bis_rx(v22bis_state_t *s, const int16_t amp[], int l \param s The modem context. \param len The number of samples to fake. \return The number of samples unprocessed. */ -SPAN_DECLARE(int) v22bis_rx_fillin(v22bis_state_t *s, int len); +SPAN_DECLARE_NONSTD(int) v22bis_rx_fillin(v22bis_state_t *s, int len); /*! Get a snapshot of the current equalizer coefficients. \brief Get a snapshot of the current equalizer coefficients. @@ -156,7 +154,7 @@ SPAN_DECLARE(int) v22bis_remote_loopback(v22bis_state_t *s, int enable); /*! Report the current operating bit rate of a V.22bis modem context. \brief Report the current operating bit rate of a V.22bis modem context \param s The modem context. */ -SPAN_DECLARE(int) v22bis_current_bit_rate(v22bis_state_t *s); +SPAN_DECLARE(int) v22bis_get_current_bit_rate(v22bis_state_t *s); /*! Initialise a V.22bis modem context. This must be called before the first use of the context, to initialise its contents. diff --git a/libs/spandsp/src/spandsp/v27ter_rx.h b/libs/spandsp/src/spandsp/v27ter_rx.h index bf365df9a1..baa04b54fe 100644 --- a/libs/spandsp/src/spandsp/v27ter_rx.h +++ b/libs/spandsp/src/spandsp/v27ter_rx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v27ter_rx.h,v 1.61 2009/07/09 13:52:09 steveu Exp $ */ /*! \file */ @@ -122,7 +120,7 @@ SPAN_DECLARE_NONSTD(int) v27ter_rx(v27ter_rx_state_t *s, const int16_t amp[], in \param len The number of samples to fake. \return The number of samples unprocessed. */ -SPAN_DECLARE(int) v27ter_rx_fillin(v27ter_rx_state_t *s, int len); +SPAN_DECLARE_NONSTD(int) v27ter_rx_fillin(v27ter_rx_state_t *s, int len); /*! Get a snapshot of the current equalizer coefficients. \brief Get a snapshot of the current equalizer coefficients. diff --git a/libs/spandsp/src/spandsp/v27ter_tx.h b/libs/spandsp/src/spandsp/v27ter_tx.h index 0d332e3470..ce5f440272 100644 --- a/libs/spandsp/src/spandsp/v27ter_tx.h +++ b/libs/spandsp/src/spandsp/v27ter_tx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v27ter_tx.h,v 1.43 2009/07/09 13:52:09 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/v29rx.h b/libs/spandsp/src/spandsp/v29rx.h index 7ee67b763c..dc8c7b4367 100644 --- a/libs/spandsp/src/spandsp/v29rx.h +++ b/libs/spandsp/src/spandsp/v29rx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v29rx.h,v 1.72 2009/07/09 13:52:09 steveu Exp $ */ /*! \file */ @@ -196,7 +194,7 @@ SPAN_DECLARE_NONSTD(int) v29_rx(v29_rx_state_t *s, const int16_t amp[], int len) \param s The modem context. \param len The number of samples to fake. \return The number of samples unprocessed. */ -SPAN_DECLARE(int) v29_rx_fillin(v29_rx_state_t *s, int len); +SPAN_DECLARE_NONSTD(int) v29_rx_fillin(v29_rx_state_t *s, int len); /*! Get a snapshot of the current equalizer coefficients. \brief Get a snapshot of the current equalizer coefficients. diff --git a/libs/spandsp/src/spandsp/v29tx.h b/libs/spandsp/src/spandsp/v29tx.h index 522eee7e40..8a765445c2 100644 --- a/libs/spandsp/src/spandsp/v29tx.h +++ b/libs/spandsp/src/spandsp/v29tx.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v29tx.h,v 1.41 2009/07/09 13:52:09 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/spandsp/v42.h b/libs/spandsp/src/spandsp/v42.h index bba70af5be..22d6122b60 100644 --- a/libs/spandsp/src/spandsp/v42.h +++ b/libs/spandsp/src/spandsp/v42.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v42.h,v 1.31 2009/11/04 15:52:06 steveu Exp $ */ /*! \page v42_page V.42 modem error correction diff --git a/libs/spandsp/src/spandsp/v42bis.h b/libs/spandsp/src/spandsp/v42bis.h index f13e5c5acb..35d5be3f42 100644 --- a/libs/spandsp/src/spandsp/v42bis.h +++ b/libs/spandsp/src/spandsp/v42bis.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v42bis.h,v 1.27 2009/04/11 18:11:19 steveu Exp $ */ /*! \page v42bis_page V.42bis modem data compression @@ -36,10 +34,12 @@ conjunction with the error correction scheme defined in V.42. #if !defined(_SPANDSP_V42BIS_H_) #define _SPANDSP_V42BIS_H_ -#define V42BIS_MAX_BITS 12 -#define V42BIS_MAX_CODEWORDS 4096 /* 2^V42BIS_MAX_BITS */ -#define V42BIS_TABLE_SIZE 5021 /* This should be a prime >(2^V42BIS_MAX_BITS) */ -#define V42BIS_MAX_STRING_SIZE 250 +#define V42BIS_MIN_STRING_SIZE 6 +#define V42BIS_MAX_STRING_SIZE 250 +#define V42BIS_MIN_DICTIONARY_SIZE 512 +#define V42BIS_MAX_BITS 12 +#define V42BIS_MAX_CODEWORDS 4096 /* 2^V42BIS_MAX_BITS */ +#define V42BIS_TABLE_SIZE 5021 /* This should be a prime >(2^V42BIS_MAX_BITS) */ enum { diff --git a/libs/spandsp/src/spandsp/v8.h b/libs/spandsp/src/spandsp/v8.h index a8bd2e4d40..25449fb6c1 100644 --- a/libs/spandsp/src/spandsp/v8.h +++ b/libs/spandsp/src/spandsp/v8.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v8.h,v 1.31.4.1 2009/12/28 12:20:47 steveu Exp $ */ /*! \file */ @@ -64,19 +62,17 @@ enum v8_modulation_e V8_MOD_V17 = (1 << 0), /* V.17 half-duplex */ V8_MOD_V21 = (1 << 1), /* V.21 duplex */ V8_MOD_V22 = (1 << 2), /* V.22/V22.bis duplex */ - V8_MOD_V23HALF = (1 << 3), /* V.23 half-duplex */ + V8_MOD_V23HDX = (1 << 3), /* V.23 half-duplex */ V8_MOD_V23 = (1 << 4), /* V.23 duplex */ V8_MOD_V26BIS = (1 << 5), /* V.23 duplex */ V8_MOD_V26TER = (1 << 6), /* V.23 duplex */ V8_MOD_V27TER = (1 << 7), /* V.23 duplex */ V8_MOD_V29 = (1 << 8), /* V.29 half-duplex */ V8_MOD_V32 = (1 << 9), /* V.32/V32.bis duplex */ - V8_MOD_V34HALF = (1 << 10), /* V.34 half-duplex */ + V8_MOD_V34HDX = (1 << 10), /* V.34 half-duplex */ V8_MOD_V34 = (1 << 11), /* V.34 duplex */ V8_MOD_V90 = (1 << 12), /* V.90 duplex */ - V8_MOD_V92 = (1 << 13), /* V.92 duplex */ - - V8_MOD_FAILED = (1 << 15) /* Indicates failure to negotiate */ + V8_MOD_V92 = (1 << 13) /* V.92 duplex */ }; enum v8_protocol_e @@ -100,10 +96,27 @@ enum v8_pcm_modem_availability_e V8_PSTN_PCM_MODEM_V91 = 0x04 }; +enum v8_status_e +{ + /*! V.8 negotiation is in progress. */ + V8_STATUS_IN_PROGRESS = 0, + /*! V.8 has been offered by the other (calling) party. */ + V8_STATUS_V8_OFFERED = 1, + /*! V.8 has been successfully negotiated. Note that this only means the V.8 + message exchange has successfully completed. The actual exchanged parameters + must be checked, to see if the call can proceed properly. */ + V8_STATUS_V8_CALL = 2, + /*! A non-V.8 is being received. */ + V8_STATUS_NON_V8_CALL = 3, + /*! V.8 negotiation failed. */ + V8_STATUS_FAILED = 4 +}; + typedef struct v8_state_s v8_state_t; struct v8_parms_s { + int status; int modem_connect_tone; int call_function; unsigned int modulations; diff --git a/libs/spandsp/src/spandsp/vector_float.h b/libs/spandsp/src/spandsp/vector_float.h index d9aa6616a0..97d95f3007 100644 --- a/libs/spandsp/src/spandsp/vector_float.h +++ b/libs/spandsp/src/spandsp/vector_float.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: vector_float.h,v 1.15 2009/01/31 08:48:11 steveu Exp $ */ #if !defined(_SPANDSP_VECTOR_FLOAT_H_) diff --git a/libs/spandsp/src/spandsp/vector_int.h b/libs/spandsp/src/spandsp/vector_int.h index 04a632fe17..c20f02a7d9 100644 --- a/libs/spandsp/src/spandsp/vector_int.h +++ b/libs/spandsp/src/spandsp/vector_int.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: vector_int.h,v 1.14 2009/01/31 08:48:11 steveu Exp $ */ #if !defined(_SPANDSP_VECTOR_INT_H_) diff --git a/libs/spandsp/src/spandsp/version.h b/libs/spandsp/src/spandsp/version.h index 611d321042..a07f2f061d 100644 --- a/libs/spandsp/src/spandsp/version.h +++ b/libs/spandsp/src/spandsp/version.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: version.h.in,v 1.3.4.1 2009/12/19 09:47:56 steveu Exp $ */ #if !defined(_SPANDSP_VERSION_H_) @@ -30,9 +28,9 @@ /* The date and time of the version are in UTC form. */ -#define SPANDSP_RELEASE_DATE 20091228 -#define SPANDSP_RELEASE_TIME 123351 -#define SPANDSP_RELEASE_DATETIME_STRING "20091228 123351" +#define SPANDSP_RELEASE_DATE 20100724 +#define SPANDSP_RELEASE_TIME 163333 +#define SPANDSP_RELEASE_DATETIME_STRING "20100724 163333" #endif /*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/spandsp/version.h.in b/libs/spandsp/src/spandsp/version.h.in index 8a547f1e13..c5d137a01c 100644 --- a/libs/spandsp/src/spandsp/version.h.in +++ b/libs/spandsp/src/spandsp/version.h.in @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: version.h.in,v 1.3.4.1 2009/12/19 09:47:56 steveu Exp $ */ #if !defined(_SPANDSP_VERSION_H_) diff --git a/libs/spandsp/src/super_tone_rx.c b/libs/spandsp/src/super_tone_rx.c index 8822577de6..767a1893ff 100644 --- a/libs/spandsp/src/super_tone_rx.c +++ b/libs/spandsp/src/super_tone_rx.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: super_tone_rx.c,v 1.33.4.1 2009/12/19 09:47:56 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/super_tone_tx.c b/libs/spandsp/src/super_tone_tx.c index 1d1beee280..7725858f5d 100644 --- a/libs/spandsp/src/super_tone_tx.c +++ b/libs/spandsp/src/super_tone_tx.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: super_tone_tx.c,v 1.30 2009/02/10 17:44:18 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/swept_tone.c b/libs/spandsp/src/swept_tone.c index 78555ab8fa..f2b5eb7e24 100644 --- a/libs/spandsp/src/swept_tone.c +++ b/libs/spandsp/src/swept_tone.c @@ -10,19 +10,17 @@ * All rights reserved. * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2, as - * published by the Free Software Foundation. + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: swept_tone.c,v 1.2 2009/09/23 16:02:59 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/t30.c b/libs/spandsp/src/t30.c index b89c2e6485..97c7ed8cc7 100644 --- a/libs/spandsp/src/t30.c +++ b/libs/spandsp/src/t30.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t30.c,v 1.305.4.4 2009/12/23 14:23:49 steveu Exp $ */ /*! \file */ @@ -62,6 +60,12 @@ #include "spandsp/v27ter_tx.h" #include "spandsp/t4_rx.h" #include "spandsp/t4_tx.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/t81_t82_arith_coding.h" +#include "spandsp/t85.h" +#endif +#include "spandsp/t4_t6_decode.h" +#include "spandsp/t4_t6_encode.h" #include "spandsp/t30_fcf.h" #include "spandsp/t35.h" #include "spandsp/t30.h" @@ -69,6 +73,12 @@ #include "spandsp/t30_logging.h" #include "spandsp/private/logging.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/private/t81_t82_arith_coding.h" +#include "spandsp/private/t85.h" +#endif +#include "spandsp/private/t4_t6_decode.h" +#include "spandsp/private/t4_t6_encode.h" #include "spandsp/private/t4_rx.h" #include "spandsp/private/t4_tx.h" #include "spandsp/private/t30.h" @@ -182,7 +192,7 @@ enum }; /*! These are internal assessments of received image quality, used to determine whether we - continue, retrain, or abandon the call. */ + continue, retrain, or abandon the call. This is only relevant to non-ECM operation. */ enum { T30_COPY_QUALITY_PERFECT = 0, @@ -204,12 +214,14 @@ enum }; /*! There are high level indications of what is happening at any instant, to guide the cleanup - process if the call is abandoned. */ + continue, retrain, or abandoning of the call. */ enum { OPERATION_IN_PROGRESS_NONE = 0, OPERATION_IN_PROGRESS_T4_RX, - OPERATION_IN_PROGRESS_T4_TX + OPERATION_IN_PROGRESS_T4_TX, + OPERATION_IN_PROGRESS_POST_T4_RX, + OPERATION_IN_PROGRESS_POST_T4_TX }; /* All timers specified in milliseconds */ @@ -401,20 +413,21 @@ static int terminate_operation_in_progress(t30_state_t *s) switch (s->operation_in_progress) { case OPERATION_IN_PROGRESS_T4_TX: - t4_tx_release(&s->t4); + t4_tx_release(&s->t4.tx); + s->operation_in_progress = OPERATION_IN_PROGRESS_POST_T4_TX; break; case OPERATION_IN_PROGRESS_T4_RX: - t4_rx_release(&s->t4); + t4_rx_release(&s->t4.rx); + s->operation_in_progress = OPERATION_IN_PROGRESS_POST_T4_RX; break; } - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; return 0; } /*- End of function --------------------------------------------------------*/ static int tx_start_page(t30_state_t *s) { - if (t4_tx_start_page(&s->t4)) + if (t4_tx_start_page(&s->t4.tx)) { terminate_operation_in_progress(s); return -1; @@ -429,7 +442,7 @@ static int tx_start_page(t30_state_t *s) static int tx_end_page(t30_state_t *s) { s->retries = 0; - if (t4_tx_end_page(&s->t4) == 0) + if (t4_tx_end_page(&s->t4.tx) == 0) { s->tx_page_number++; s->ecm_block = 0; @@ -442,20 +455,20 @@ static int rx_start_page(t30_state_t *s) { int i; - t4_rx_set_image_width(&s->t4, s->image_width); - t4_rx_set_sub_address(&s->t4, s->rx_info.sub_address); - t4_rx_set_dcs(&s->t4, s->rx_dcs_string); - t4_rx_set_far_ident(&s->t4, s->rx_info.ident); - t4_rx_set_vendor(&s->t4, s->vendor); - t4_rx_set_model(&s->t4, s->model); + t4_rx_set_image_width(&s->t4.rx, s->image_width); + t4_rx_set_sub_address(&s->t4.rx, s->rx_info.sub_address); + t4_rx_set_dcs(&s->t4.rx, s->rx_dcs_string); + t4_rx_set_far_ident(&s->t4.rx, s->rx_info.ident); + t4_rx_set_vendor(&s->t4.rx, s->vendor); + t4_rx_set_model(&s->t4.rx, s->model); - t4_rx_set_rx_encoding(&s->t4, s->line_encoding); - t4_rx_set_x_resolution(&s->t4, s->x_resolution); - t4_rx_set_y_resolution(&s->t4, s->y_resolution); + t4_rx_set_rx_encoding(&s->t4.rx, s->line_encoding); + t4_rx_set_x_resolution(&s->t4.rx, s->x_resolution); + t4_rx_set_y_resolution(&s->t4.rx, s->y_resolution); - if (t4_rx_start_page(&s->t4)) + if (t4_rx_start_page(&s->t4.rx)) return -1; - /* Clear the buffer */ + /* Clear the ECM buffer */ for (i = 0; i < 256; i++) s->ecm_len[i] = -1; s->ecm_block = 0; @@ -468,7 +481,7 @@ static int rx_start_page(t30_state_t *s) static int rx_end_page(t30_state_t *s) { - if (t4_rx_end_page(&s->t4) == 0) + if (t4_rx_end_page(&s->t4.rx) == 0) { s->rx_page_number++; s->ecm_block = 0; @@ -477,12 +490,27 @@ static int rx_end_page(t30_state_t *s) } /*- End of function --------------------------------------------------------*/ +static void report_rx_ecm_page_result(t30_state_t *s) +{ + t4_stats_t stats; + + /* This is only used for ECM pages, as copy_quality() does a similar job for non-ECM + pages as a byproduct of assessing copy quality. */ + t4_rx_get_transfer_statistics(&s->t4.rx, &stats); + span_log(&s->logging, SPAN_LOG_FLOW, "Page no = %d\n", stats.pages_transferred); + span_log(&s->logging, SPAN_LOG_FLOW, "Image size = %d x %d pixels\n", stats.width, stats.length); + span_log(&s->logging, SPAN_LOG_FLOW, "Image resolution = %d/m x %d/m\n", stats.x_resolution, stats.y_resolution); + span_log(&s->logging, SPAN_LOG_FLOW, "Compression = %s (%d)\n", t4_encoding_to_str(stats.encoding), stats.encoding); + span_log(&s->logging, SPAN_LOG_FLOW, "Compressed image size = %d bytes\n", stats.line_image_size); +} +/*- End of function --------------------------------------------------------*/ + static int copy_quality(t30_state_t *s) { t4_stats_t stats; int quality; - t4_get_transfer_statistics(&s->t4, &stats); + t4_rx_get_transfer_statistics(&s->t4.rx, &stats); /* There is no specification for judging copy quality. However, we need to classify it at three levels, to control what we do next: OK; tolerable, but retrain; intolerable. */ @@ -491,9 +519,13 @@ static int copy_quality(t30_state_t *s) <15% bad rows to be tolerable, but retrain >15% bad rows to be intolerable */ + /* This is called before the page is confirmed, so we need to add one to get the page + number right */ span_log(&s->logging, SPAN_LOG_FLOW, "Page no = %d\n", stats.pages_transferred + 1); span_log(&s->logging, SPAN_LOG_FLOW, "Image size = %d x %d pixels\n", stats.width, stats.length); span_log(&s->logging, SPAN_LOG_FLOW, "Image resolution = %d/m x %d/m\n", stats.x_resolution, stats.y_resolution); + span_log(&s->logging, SPAN_LOG_FLOW, "Compression = %s (%d)\n", t4_encoding_to_str(stats.encoding), stats.encoding); + span_log(&s->logging, SPAN_LOG_FLOW, "Compressed image size = %d bytes\n", stats.line_image_size); span_log(&s->logging, SPAN_LOG_FLOW, "Bad rows = %d\n", stats.bad_rows); span_log(&s->logging, SPAN_LOG_FLOW, "Longest bad row run = %d\n", stats.longest_bad_row_run); /* Don't treat a page as perfect because it has zero bad rows out of zero total rows. A zero row @@ -522,6 +554,22 @@ static int copy_quality(t30_state_t *s) } /*- End of function --------------------------------------------------------*/ +static void report_tx_result(t30_state_t *s, int result) +{ + t4_stats_t stats; + + if (span_log_test(&s->logging, SPAN_LOG_FLOW)) + { + t4_tx_get_transfer_statistics(&s->t4.tx, &stats); + span_log(&s->logging, + SPAN_LOG_FLOW, + "%s - delivered %d pages\n", + (result) ? "Success" : "Failure", + stats.pages_transferred); + } +} +/*- End of function --------------------------------------------------------*/ + static void release_resources(t30_state_t *s) { if (s->tx_info.nsf) @@ -619,7 +667,7 @@ static uint8_t check_next_tx_step(t30_state_t *s) int res; int more; - res = t4_tx_next_page_has_different_format(&s->t4); + res = t4_tx_next_page_has_different_format(&s->t4.tx); if (res == 0) { span_log(&s->logging, SPAN_LOG_FLOW, "More pages to come with the same format\n"); @@ -628,7 +676,7 @@ static uint8_t check_next_tx_step(t30_state_t *s) if (res > 0) { span_log(&s->logging, SPAN_LOG_FLOW, "More pages to come with a different format\n"); - s->tx_start_page = t4_tx_get_current_page_in_file(&s->t4) + 1; + s->tx_start_page = t4_tx_get_current_page_in_file(&s->t4.tx) + 1; return (s->local_interrupt_pending) ? T30_PRI_EOM : T30_EOM; } /* Call a user handler, if one is set, to check if another document is to be sent. @@ -671,7 +719,7 @@ static int get_partial_ecm_page(t30_state_t *s) /* These frames contain a frame sequence number within the partial page (one octet) followed by some image data. */ s->ecm_data[i][3] = (uint8_t) i; - if ((len = t4_tx_get_chunk(&s->t4, &s->ecm_data[i][4], s->octets_per_ecm_frame)) < s->octets_per_ecm_frame) + if ((len = t4_tx_get_chunk(&s->t4.tx, &s->ecm_data[i][4], s->octets_per_ecm_frame)) < s->octets_per_ecm_frame) { /* The image is not big enough to fill the entire buffer */ /* We need to pad to a full frame, as most receivers expect that. */ @@ -690,40 +738,11 @@ static int get_partial_ecm_page(t30_state_t *s) /* We filled the entire buffer */ s->ecm_frames = 256; span_log(&s->logging, SPAN_LOG_FLOW, "Partial page buffer full (%d per frame)\n", s->octets_per_ecm_frame); - s->ecm_at_page_end = ((t4_tx_check_bit(&s->t4) & 2) != 0); + s->ecm_at_page_end = ((t4_tx_check_bit(&s->t4.tx) & 2) != 0); return 256; } /*- End of function --------------------------------------------------------*/ -static int t30_ecm_commit_partial_page(t30_state_t *s) -{ - int i; - int image_ended; - - span_log(&s->logging, SPAN_LOG_FLOW, "Commiting partial page - block %d, %d frames\n", s->ecm_block, s->ecm_frames); - image_ended = FALSE; - for (i = 0; i < s->ecm_frames; i++) - { - if (t4_rx_put_chunk(&s->t4, s->ecm_data[i], s->ecm_len[i])) - { - /* This is the end of the document */ - /* Clear the buffer */ - for (i = 0; i < 256; i++) - s->ecm_len[i] = -1; - s->ecm_frames = -1; - image_ended = TRUE; - break; - } - } - /* Clear the buffer */ - for (i = 0; i < 256; i++) - s->ecm_len[i] = -1; - s->ecm_block++; - s->ecm_frames = -1; - return (image_ended) ? -1 : 0; -} -/*- End of function --------------------------------------------------------*/ - static int send_next_ecm_frame(t30_state_t *s) { int i; @@ -1132,7 +1151,6 @@ int t30_build_dis_or_dtc(t30_state_t *s) set_ctrl_bit(s->local_dis_dtc_frame, T30_DIS_BIT_T6_CAPABLE); if ((s->supported_compressions & T30_SUPPORT_T43_COMPRESSION)) set_ctrl_bit(s->local_dis_dtc_frame, T30_DIS_BIT_T43_CAPABLE); -#if 0 if ((s->supported_compressions & T30_SUPPORT_T45_COMPRESSION)) set_ctrl_bit(s->local_dis_dtc_frame, T30_DIS_BIT_T45_CAPABLE); if ((s->supported_compressions & T30_SUPPORT_T81_COMPRESSION)) @@ -1140,13 +1158,13 @@ int t30_build_dis_or_dtc(t30_state_t *s) if ((s->supported_compressions & T30_SUPPORT_SYCC_T81_COMPRESSION)) set_ctrl_bit(s->local_dis_dtc_frame, T30_DIS_BIT_SYCC_T81_CAPABLE); if ((s->supported_compressions & T30_SUPPORT_T85_COMPRESSION)) + { set_ctrl_bit(s->local_dis_dtc_frame, T30_DIS_BIT_T85_CAPABLE); - /* No T.85 optional L0. */ - //if ((s->supported_compressions & T30_SUPPORT_T85_L0_COMPRESSION)) - // set_ctrl_bit(s->local_dis_dtc_frame, T30_DIS_BIT_T85_L0_CAPABLE); + if ((s->supported_compressions & T30_SUPPORT_T85_L0_COMPRESSION)) + set_ctrl_bit(s->local_dis_dtc_frame, T30_DIS_BIT_T85_L0_CAPABLE); + } //if ((s->supported_compressions & T30_SUPPORT_T89_COMPRESSION)) // set_ctrl_bit(s->local_dis_dtc_frame, T30_DIS_BIT_T89_CAPABLE); -#endif } if ((s->supported_t30_features & T30_SUPPORT_FIELD_NOT_VALID)) set_ctrl_bit(s->local_dis_dtc_frame, T30_DIS_BIT_FNV_CAPABLE); @@ -1236,7 +1254,7 @@ int t30_build_dis_or_dtc(t30_state_t *s) /* No k > 4 */ if ((s->iaf & T30_IAF_MODE_CONTINUOUS_FLOW)) set_ctrl_bit(s->local_dis_dtc_frame, T30_DIS_BIT_T38_FAX_CAPABLE); - /* No T.89 profile */ + /* No T.88/T.89 profile */ s->local_dis_dtc_len = 19; //t30_decode_dis_dtc_dcs(s, s->local_dis_dtc_frame, s->local_dis_dtc_len); return 0; @@ -1294,13 +1312,16 @@ static int build_dcs(t30_state_t *s) /* Select the compression to use. */ switch (s->line_encoding) { -#if 0 case T4_COMPRESSION_ITU_T85: set_ctrl_bit(s->dcs_frame, T30_DCS_BIT_T85_MODE); - //set_ctrl_bit(s->dcs_frame, T30_DCS_BIT_T85_L0_MODE); + clr_ctrl_bit(s->dcs_frame, T30_DCS_BIT_T85_L0_MODE); + set_ctrl_bits(s->dcs_frame, T30_MIN_SCAN_0MS, 21); + break; + case T4_COMPRESSION_ITU_T85_L0: + set_ctrl_bit(s->dcs_frame, T30_DCS_BIT_T85_MODE); + set_ctrl_bit(s->dcs_frame, T30_DCS_BIT_T85_L0_MODE); set_ctrl_bits(s->dcs_frame, T30_MIN_SCAN_0MS, 21); break; -#endif case T4_COMPRESSION_ITU_T6: set_ctrl_bit(s->dcs_frame, T30_DCS_BIT_T6_MODE); set_ctrl_bits(s->dcs_frame, T30_MIN_SCAN_0MS, 21); @@ -1605,7 +1626,7 @@ static int step_fallback_entry(t30_state_t *s) current page, though it is benign - fallback will only result in an excessive minimum. */ min_row_bits = set_min_scan_time_code(s); - t4_tx_set_min_row_bits(&s->t4, min_row_bits); + t4_tx_set_min_bits_per_row(&s->t4.tx, min_row_bits); /* We need to rebuild the DCS message we will send. */ build_dcs(s); return s->current_fallback; @@ -1837,16 +1858,7 @@ static void disconnect(t30_state_t *s) span_log(&s->logging, SPAN_LOG_FLOW, "Disconnecting\n"); /* Make sure any FAX in progress is tidied up. If the tidying up has already happened, repeating it here is harmless. */ - switch (s->operation_in_progress) - { - case OPERATION_IN_PROGRESS_T4_TX: - t4_tx_release(&s->t4); - break; - case OPERATION_IN_PROGRESS_T4_RX: - t4_rx_release(&s->t4); - break; - } - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; + terminate_operation_in_progress(s); s->timer_t0_t1 = 0; s->timer_t2_t4 = 0; s->timer_t3 = 0; @@ -1920,34 +1932,33 @@ static int start_sending_document(t30_state_t *s) return -1; } span_log(&s->logging, SPAN_LOG_FLOW, "Start sending document\n"); - if (t4_tx_init(&s->t4, s->tx_file, s->tx_start_page, s->tx_stop_page) == NULL) + if (t4_tx_init(&s->t4.tx, s->tx_file, s->tx_start_page, s->tx_stop_page) == NULL) { span_log(&s->logging, SPAN_LOG_WARNING, "Cannot open source TIFF file '%s'\n", s->tx_file); s->current_status = T30_ERR_FILEERROR; return -1; } s->operation_in_progress = OPERATION_IN_PROGRESS_T4_TX; - t4_tx_get_pages_in_file(&s->t4); - t4_tx_set_tx_encoding(&s->t4, s->line_encoding); - t4_tx_set_local_ident(&s->t4, s->tx_info.ident); - t4_tx_set_header_info(&s->t4, s->header_info); + t4_tx_get_pages_in_file(&s->t4.tx); + t4_tx_set_tx_encoding(&s->t4.tx, s->line_encoding); + t4_tx_set_local_ident(&s->t4.tx, s->tx_info.ident); + t4_tx_set_header_info(&s->t4.tx, s->header_info); - s->x_resolution = t4_tx_get_x_resolution(&s->t4); - s->y_resolution = t4_tx_get_y_resolution(&s->t4); + s->x_resolution = t4_tx_get_x_resolution(&s->t4.tx); + s->y_resolution = t4_tx_get_y_resolution(&s->t4.tx); /* The minimum scan time to be used can't be evaluated until we know the Y resolution, and must be evaluated before the minimum scan row bits can be evaluated. */ if ((min_row_bits = set_min_scan_time_code(s)) < 0) { - t4_tx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; + terminate_operation_in_progress(s); return -1; } span_log(&s->logging, SPAN_LOG_FLOW, "Minimum bits per row will be %d\n", min_row_bits); - t4_tx_set_min_row_bits(&s->t4, min_row_bits); + t4_tx_set_min_bits_per_row(&s->t4.tx, min_row_bits); if (tx_start_page(s)) return -1; - s->image_width = t4_tx_get_image_width(&s->t4); + s->image_width = t4_tx_get_image_width(&s->t4.tx); if (s->error_correcting_mode) { if (get_partial_ecm_page(s) == 0) @@ -1959,7 +1970,7 @@ static int start_sending_document(t30_state_t *s) static int restart_sending_document(t30_state_t *s) { - t4_tx_restart_page(&s->t4); + t4_tx_restart_page(&s->t4.tx); s->retries = 0; s->ecm_block = 0; send_dcs_sequence(s, TRUE); @@ -2032,19 +2043,34 @@ static int process_rx_dis_dtc(t30_state_t *s, const uint8_t *msg, int len) /* 256 octets per ECM frame */ s->octets_per_ecm_frame = 256; /* Select the compression to use. */ -#if 0 - if (s->error_correcting_mode && (s->supported_compressions & T30_SUPPORT_T85_COMPRESSION) && test_ctrl_bit(s->far_dis_dtc_frame, T30_DIS_BIT_T85_CAPABLE)) + if (s->error_correcting_mode + && + (s->supported_compressions & T30_SUPPORT_T85_COMPRESSION) + && + test_ctrl_bit(s->far_dis_dtc_frame, T30_DIS_BIT_T85_CAPABLE)) { - s->line_encoding = T4_COMPRESSION_ITU_T85; + if (s->supported_compressions & T30_SUPPORT_T85_L0_COMPRESSION + && + test_ctrl_bit(s->far_dis_dtc_frame, T30_DIS_BIT_T85_L0_CAPABLE)) + { + s->line_encoding = T4_COMPRESSION_ITU_T85_L0; + } + else + { + s->line_encoding = T4_COMPRESSION_ITU_T85; + } } - else if (s->error_correcting_mode && (s->supported_compressions & T30_SUPPORT_T6_COMPRESSION) && test_ctrl_bit(s->far_dis_dtc_frame, T30_DIS_BIT_T6_CAPABLE)) -#else - if (s->error_correcting_mode && (s->supported_compressions & T30_SUPPORT_T6_COMPRESSION) && test_ctrl_bit(s->far_dis_dtc_frame, T30_DIS_BIT_T6_CAPABLE)) -#endif + else if (s->error_correcting_mode + && + (s->supported_compressions & T30_SUPPORT_T6_COMPRESSION) + && + test_ctrl_bit(s->far_dis_dtc_frame, T30_DIS_BIT_T6_CAPABLE)) { s->line_encoding = T4_COMPRESSION_ITU_T6; } - else if ((s->supported_compressions & T30_SUPPORT_T4_2D_COMPRESSION) && test_ctrl_bit(s->far_dis_dtc_frame, T30_DIS_BIT_2D_CAPABLE)) + else if ((s->supported_compressions & T30_SUPPORT_T4_2D_COMPRESSION) + && + test_ctrl_bit(s->far_dis_dtc_frame, T30_DIS_BIT_2D_CAPABLE)) { s->line_encoding = T4_COMPRESSION_ITU_T4_2D; } @@ -2252,19 +2278,26 @@ static int process_rx_dcs(t30_state_t *s, const uint8_t *msg, int len) s->image_width = widths[i][dcs_frame[5] & (DISBIT2 | DISBIT1)]; /* Check which compression we will use. */ -#if 0 if (test_ctrl_bit(dcs_frame, T30_DCS_BIT_T85_MODE)) - s->line_encoding = T4_COMPRESSION_ITU_T85; + { + if (test_ctrl_bit(dcs_frame, T30_DCS_BIT_T85_L0_MODE)) + s->line_encoding = T4_COMPRESSION_ITU_T85_L0; + else + s->line_encoding = T4_COMPRESSION_ITU_T85; + } else if (test_ctrl_bit(dcs_frame, T30_DCS_BIT_T6_MODE)) -#else - if (test_ctrl_bit(dcs_frame, T30_DCS_BIT_T6_MODE)) -#endif + { s->line_encoding = T4_COMPRESSION_ITU_T6; + } else if (test_ctrl_bit(dcs_frame, T30_DCS_BIT_2D_CODING)) + { s->line_encoding = T4_COMPRESSION_ITU_T4_2D; + } else + { s->line_encoding = T4_COMPRESSION_ITU_T4_1D; - span_log(&s->logging, SPAN_LOG_FLOW, "Selected compression %d\n", s->line_encoding); + } + span_log(&s->logging, SPAN_LOG_FLOW, "Selected compression %s (%d)\n", t4_encoding_to_str(s->line_encoding), s->line_encoding); if (!test_ctrl_bit(dcs_frame, T30_DCS_BIT_RECEIVE_FAX_DOCUMENT)) span_log(&s->logging, SPAN_LOG_PROTOCOL_WARNING, "Remote is not requesting receive in DCS\n"); @@ -2300,9 +2333,9 @@ static int process_rx_dcs(t30_state_t *s, const uint8_t *msg, int len) send_dcn(s); return -1; } - if (!s->in_message) + if (s->operation_in_progress != OPERATION_IN_PROGRESS_T4_RX) { - if (t4_rx_init(&s->t4, s->rx_file, s->output_encoding) == NULL) + if (t4_rx_init(&s->t4.rx, s->rx_file, s->output_encoding) == NULL) { span_log(&s->logging, SPAN_LOG_WARNING, "Cannot open target TIFF file '%s'\n", s->rx_file); s->current_status = T30_ERR_FILEERROR; @@ -2323,27 +2356,11 @@ static int process_rx_dcs(t30_state_t *s, const uint8_t *msg, int len) } /*- End of function --------------------------------------------------------*/ -static int send_deferred_pps_response(t30_state_t *s) +static int send_response_to_pps(t30_state_t *s) { queue_phase(s, T30_PHASE_D_TX); - if (s->ecm_first_bad_frame >= s->ecm_frames) + if (s->rx_ecm_block_ok) { - /* Everything was OK. We can accept the data and move on. */ - t30_ecm_commit_partial_page(s); - switch (s->last_pps_fcf2) - { - case T30_NULL: - /* We can confirm this partial page. */ - break; - default: - /* We can confirm the whole page. */ - s->next_rx_step = s->last_pps_fcf2; - rx_end_page(s); - if (s->phase_d_handler) - s->phase_d_handler(s, s->phase_d_user_data, s->last_pps_fcf2); - rx_start_page(s); - break; - } set_state(s, T30_STATE_F_POST_RCP_MCF); send_simple_frame(s, T30_MCF); } @@ -2368,6 +2385,8 @@ static int process_rx_pps(t30_state_t *s, const uint8_t *msg, int len) int i; int j; int frame_no; + int first_bad_frame; + int image_ended; if (len < 7) { @@ -2375,8 +2394,6 @@ static int process_rx_pps(t30_state_t *s, const uint8_t *msg, int len) return -1; } s->last_pps_fcf2 = msg[3] & 0xFE; - page = msg[4]; - block = msg[5]; /* The frames count is not well specified in T.30. In practice it seems it might be the number of frames in the current block, or it might be the number of frames in the @@ -2384,6 +2401,9 @@ static int process_rx_pps(t30_state_t *s, const uint8_t *msg, int len) than the actual size of the block. If we only accept the number when it exceeds previous values, we should get the real number of frames in the block. */ frames = msg[6] + 1; + block = msg[5]; + page = msg[4]; + if (s->ecm_frames < 0) { /* First time. Take the number and believe in it. */ @@ -2401,17 +2421,54 @@ static int process_rx_pps(t30_state_t *s, const uint8_t *msg, int len) frames = 0; } } - span_log(&s->logging, SPAN_LOG_FLOW, "Received PPS + %s - page %d, block %d, %d frames\n", t30_frametype(msg[3]), page, block, frames); - if (page != s->rx_page_number) + span_log(&s->logging, + SPAN_LOG_FLOW, + "Received PPS + %s - page %d, block %d, %d frames\n", + t30_frametype(msg[3]), + page, + block, + frames); + /* Check that we have received the page and block we expected. If the far end missed + our last response, it might have repeated the previous chunk. */ + if ((s->rx_page_number & 0xFF) != page || (s->ecm_block & 0xFF) != block) { - span_log(&s->logging, SPAN_LOG_FLOW, "ECM rx page mismatch - expected %d, but received %d.\n", s->rx_page_number, page); - } - if (block != s->ecm_block) - { - span_log(&s->logging, SPAN_LOG_FLOW, "ECM rx block mismatch - expected %d, but received %d.\n", s->ecm_block, block); + span_log(&s->logging, + SPAN_LOG_FLOW, + "ECM rx page/block mismatch - expected %d/%d, but received %d/%d.\n", + (s->rx_page_number & 0xFF), + (s->ecm_block & 0xFF), + page, + block); + /* Look for this being a repeat, because the other end missed the last response + we sent - which would have been a T30_MCF - If the block is for the previous + page, or the previous block of the current page, we can assume we have hit this + condition. */ + if (((s->rx_page_number & 0xFF) == page && (s->ecm_block & 0xFF) == block) + || + (((s->rx_page_number - 1) & 0xFF) == page && s->ecm_block == 0)) + { + /* This must be a repeat of the last thing the far end sent, while we are expecting + the first transfer of a new block. */ + span_log(&s->logging, SPAN_LOG_FLOW, "Looks like a repeat from the previous page/block - send MCF again.\n"); + /* Clear the ECM buffer */ + for (i = 0; i < 256; i++) + s->ecm_len[i] = -1; + s->ecm_frames = -1; + queue_phase(s, T30_PHASE_D_TX); + set_state(s, T30_STATE_F_POST_RCP_MCF); + send_simple_frame(s, T30_MCF); + } + else + { + /* Give up */ + s->current_status = T30_ERR_RX_ECMPHD; + send_dcn(s); + } + return 0; } + /* Build a bit map of which frames we now have stored OK */ - s->ecm_first_bad_frame = 256; + first_bad_frame = 256; for (i = 0; i < 32; i++) { s->ecm_frame_map[i + 3] = 0; @@ -2421,14 +2478,50 @@ static int process_rx_pps(t30_state_t *s, const uint8_t *msg, int len) if (s->ecm_len[frame_no] < 0) { s->ecm_frame_map[i + 3] |= (1 << j); - if (frame_no < s->ecm_first_bad_frame) - s->ecm_first_bad_frame = frame_no; + if (frame_no < first_bad_frame) + first_bad_frame = frame_no; if (frame_no < s->ecm_frames) s->error_correcting_mode_retries++; } } } - /* Are there any bad frames, or does our scan represent things being OK? */ + s->rx_ecm_block_ok = (first_bad_frame >= s->ecm_frames); + if (s->rx_ecm_block_ok) + { + span_log(&s->logging, SPAN_LOG_FLOW, "Partial page OK - committing block %d, %d frames\n", s->ecm_block, s->ecm_frames); + image_ended = FALSE; + for (i = 0; i < s->ecm_frames; i++) + { + if (t4_rx_put_chunk(&s->t4.rx, s->ecm_data[i], s->ecm_len[i])) + { + /* This is the end of the document */ + image_ended = TRUE; + break; + } + } + /* Clear the ECM buffer */ + for (i = 0; i < 256; i++) + s->ecm_len[i] = -1; + s->ecm_block++; + s->ecm_frames = -1; + + switch (s->last_pps_fcf2) + { + case T30_NULL: + /* We can accept only this partial page. */ + break; + default: + /* We can accept and confirm the whole page. */ + s->next_rx_step = s->last_pps_fcf2; + rx_end_page(s); + report_rx_ecm_page_result(s); + if (s->phase_d_handler) + s->phase_d_handler(s, s->phase_d_user_data, s->last_pps_fcf2); + rx_start_page(s); + break; + } + } + switch (s->last_pps_fcf2) { case T30_NULL: @@ -2448,7 +2541,7 @@ static int process_rx_pps(t30_state_t *s, const uint8_t *msg, int len) } else { - send_deferred_pps_response(s); + send_response_to_pps(s); } break; default: @@ -3056,8 +3149,6 @@ static void process_state_f_post_doc_non_ecm(t30_state_t *s, const uint8_t *msg, switch (fcf) { case T30_MPS: - if (s->phase_d_handler) - s->phase_d_handler(s, s->phase_d_user_data, fcf); s->next_rx_step = fcf; queue_phase(s, T30_PHASE_D_TX); switch (copy_quality(s)) @@ -3065,17 +3156,23 @@ static void process_state_f_post_doc_non_ecm(t30_state_t *s, const uint8_t *msg, case T30_COPY_QUALITY_PERFECT: case T30_COPY_QUALITY_GOOD: rx_end_page(s); + if (s->phase_d_handler) + s->phase_d_handler(s, s->phase_d_user_data, fcf); rx_start_page(s); set_state(s, T30_STATE_III_Q_MCF); send_simple_frame(s, T30_MCF); break; case T30_COPY_QUALITY_POOR: rx_end_page(s); + if (s->phase_d_handler) + s->phase_d_handler(s, s->phase_d_user_data, fcf); rx_start_page(s); set_state(s, T30_STATE_III_Q_RTP); send_simple_frame(s, T30_RTP); break; case T30_COPY_QUALITY_BAD: + if (s->phase_d_handler) + s->phase_d_handler(s, s->phase_d_user_data, fcf); rx_start_page(s); set_state(s, T30_STATE_III_Q_RTN); send_simple_frame(s, T30_RTN); @@ -3083,38 +3180,42 @@ static void process_state_f_post_doc_non_ecm(t30_state_t *s, const uint8_t *msg, } break; case T30_PRI_MPS: - if (s->phase_d_handler) - { - s->phase_d_handler(s, s->phase_d_user_data, fcf); - s->timer_t3 = ms_to_samples(DEFAULT_TIMER_T3); - } s->next_rx_step = fcf; switch (copy_quality(s)) { case T30_COPY_QUALITY_PERFECT: case T30_COPY_QUALITY_GOOD: rx_end_page(s); - t4_rx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; - s->in_message = FALSE; + if (s->phase_d_handler) + { + s->phase_d_handler(s, s->phase_d_user_data, fcf); + s->timer_t3 = ms_to_samples(DEFAULT_TIMER_T3); + } + terminate_operation_in_progress(s); set_state(s, T30_STATE_III_Q_MCF); break; case T30_COPY_QUALITY_POOR: rx_end_page(s); - t4_rx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; - s->in_message = FALSE; + if (s->phase_d_handler) + { + s->phase_d_handler(s, s->phase_d_user_data, fcf); + s->timer_t3 = ms_to_samples(DEFAULT_TIMER_T3); + } + terminate_operation_in_progress(s); set_state(s, T30_STATE_III_Q_RTP); break; case T30_COPY_QUALITY_BAD: + if (s->phase_d_handler) + { + s->phase_d_handler(s, s->phase_d_user_data, fcf); + s->timer_t3 = ms_to_samples(DEFAULT_TIMER_T3); + } set_state(s, T30_STATE_III_Q_RTN); break; } break; case T30_EOM: case T30_EOS: - if (s->phase_d_handler) - s->phase_d_handler(s, s->phase_d_user_data, fcf); s->next_rx_step = fcf; /* Return to phase B */ queue_phase(s, T30_PHASE_B_TX); @@ -3123,17 +3224,23 @@ static void process_state_f_post_doc_non_ecm(t30_state_t *s, const uint8_t *msg, case T30_COPY_QUALITY_PERFECT: case T30_COPY_QUALITY_GOOD: rx_end_page(s); + if (s->phase_d_handler) + s->phase_d_handler(s, s->phase_d_user_data, fcf); rx_start_page(s); set_state(s, T30_STATE_III_Q_MCF); send_simple_frame(s, T30_MCF); break; case T30_COPY_QUALITY_POOR: rx_end_page(s); + if (s->phase_d_handler) + s->phase_d_handler(s, s->phase_d_user_data, fcf); rx_start_page(s); set_state(s, T30_STATE_III_Q_RTP); send_simple_frame(s, T30_RTP); break; case T30_COPY_QUALITY_BAD: + if (s->phase_d_handler) + s->phase_d_handler(s, s->phase_d_user_data, fcf); rx_start_page(s); set_state(s, T30_STATE_III_Q_RTN); send_simple_frame(s, T30_RTN); @@ -3141,37 +3248,41 @@ static void process_state_f_post_doc_non_ecm(t30_state_t *s, const uint8_t *msg, } break; case T30_PRI_EOM: - if (s->phase_d_handler) - { - s->phase_d_handler(s, s->phase_d_user_data, fcf); - s->timer_t3 = ms_to_samples(DEFAULT_TIMER_T3); - } s->next_rx_step = fcf; switch (copy_quality(s)) { case T30_COPY_QUALITY_PERFECT: case T30_COPY_QUALITY_GOOD: rx_end_page(s); - t4_rx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; - s->in_message = FALSE; + if (s->phase_d_handler) + { + s->phase_d_handler(s, s->phase_d_user_data, fcf); + s->timer_t3 = ms_to_samples(DEFAULT_TIMER_T3); + } + terminate_operation_in_progress(s); set_state(s, T30_STATE_III_Q_MCF); break; case T30_COPY_QUALITY_POOR: rx_end_page(s); - t4_rx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; - s->in_message = FALSE; + if (s->phase_d_handler) + { + s->phase_d_handler(s, s->phase_d_user_data, fcf); + s->timer_t3 = ms_to_samples(DEFAULT_TIMER_T3); + } + terminate_operation_in_progress(s); set_state(s, T30_STATE_III_Q_RTP); break; case T30_COPY_QUALITY_BAD: + if (s->phase_d_handler) + { + s->phase_d_handler(s, s->phase_d_user_data, fcf); + s->timer_t3 = ms_to_samples(DEFAULT_TIMER_T3); + } set_state(s, T30_STATE_III_Q_RTN); break; } break; case T30_EOP: - if (s->phase_d_handler) - s->phase_d_handler(s, s->phase_d_user_data, fcf); s->next_rx_step = fcf; queue_phase(s, T30_PHASE_D_TX); switch (copy_quality(s)) @@ -3179,51 +3290,59 @@ static void process_state_f_post_doc_non_ecm(t30_state_t *s, const uint8_t *msg, case T30_COPY_QUALITY_PERFECT: case T30_COPY_QUALITY_GOOD: rx_end_page(s); - t4_rx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; - s->in_message = FALSE; + if (s->phase_d_handler) + s->phase_d_handler(s, s->phase_d_user_data, fcf); + terminate_operation_in_progress(s); set_state(s, T30_STATE_III_Q_MCF); send_simple_frame(s, T30_MCF); break; case T30_COPY_QUALITY_POOR: rx_end_page(s); - t4_rx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; - s->in_message = FALSE; + if (s->phase_d_handler) + s->phase_d_handler(s, s->phase_d_user_data, fcf); + terminate_operation_in_progress(s); set_state(s, T30_STATE_III_Q_RTP); send_simple_frame(s, T30_RTP); break; case T30_COPY_QUALITY_BAD: + if (s->phase_d_handler) + s->phase_d_handler(s, s->phase_d_user_data, fcf); set_state(s, T30_STATE_III_Q_RTN); send_simple_frame(s, T30_RTN); break; } break; case T30_PRI_EOP: - if (s->phase_d_handler) - { - s->phase_d_handler(s, s->phase_d_user_data, fcf); - s->timer_t3 = ms_to_samples(DEFAULT_TIMER_T3); - } s->next_rx_step = fcf; switch (copy_quality(s)) { case T30_COPY_QUALITY_PERFECT: case T30_COPY_QUALITY_GOOD: rx_end_page(s); - t4_rx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; - s->in_message = FALSE; + if (s->phase_d_handler) + { + s->phase_d_handler(s, s->phase_d_user_data, fcf); + s->timer_t3 = ms_to_samples(DEFAULT_TIMER_T3); + } + terminate_operation_in_progress(s); set_state(s, T30_STATE_III_Q_MCF); break; case T30_COPY_QUALITY_POOR: rx_end_page(s); - t4_rx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; - s->in_message = FALSE; + if (s->phase_d_handler) + { + s->phase_d_handler(s, s->phase_d_user_data, fcf); + s->timer_t3 = ms_to_samples(DEFAULT_TIMER_T3); + } + terminate_operation_in_progress(s); set_state(s, T30_STATE_III_Q_RTP); break; case T30_COPY_QUALITY_BAD: + if (s->phase_d_handler) + { + s->phase_d_handler(s, s->phase_d_user_data, fcf); + s->timer_t3 = ms_to_samples(DEFAULT_TIMER_T3); + } set_state(s, T30_STATE_III_Q_RTN); break; } @@ -3404,7 +3523,8 @@ static void process_state_f_post_rcp_rnr(t30_state_t *s, const uint8_t *msg, int } else { - send_deferred_pps_response(s); + /* Now we send the deferred response */ + send_response_to_pps(s); } break; case T30_CRP: @@ -3526,7 +3646,6 @@ static void process_state_ii(t30_state_t *s, const uint8_t *msg, int len) static void process_state_ii_q(t30_state_t *s, const uint8_t *msg, int len) { - t4_stats_t stats; uint8_t fcf; fcf = msg[2] & 0xFE; @@ -3555,13 +3674,8 @@ static void process_state_ii_q(t30_state_t *s, const uint8_t *msg, int len) tx_end_page(s); if (s->phase_d_handler) s->phase_d_handler(s, s->phase_d_user_data, fcf); - t4_tx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; - if (span_log_test(&s->logging, SPAN_LOG_FLOW)) - { - t4_get_transfer_statistics(&s->t4, &stats); - span_log(&s->logging, SPAN_LOG_FLOW, "Success - delivered %d pages\n", stats.pages_transferred); - } + terminate_operation_in_progress(s); + report_tx_result(s, TRUE); return_to_phase_b(s, FALSE); break; case T30_EOP: @@ -3569,14 +3683,9 @@ static void process_state_ii_q(t30_state_t *s, const uint8_t *msg, int len) tx_end_page(s); if (s->phase_d_handler) s->phase_d_handler(s, s->phase_d_user_data, fcf); - t4_tx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; + terminate_operation_in_progress(s); send_dcn(s); - if (span_log_test(&s->logging, SPAN_LOG_FLOW)) - { - t4_get_transfer_statistics(&s->t4, &stats); - span_log(&s->logging, SPAN_LOG_FLOW, "Success - delivered %d pages\n", stats.pages_transferred); - } + report_tx_result(s, TRUE); break; } break; @@ -3614,7 +3723,7 @@ static void process_state_ii_q(t30_state_t *s, const uint8_t *msg, int len) tx_end_page(s); if (s->phase_d_handler) s->phase_d_handler(s, s->phase_d_user_data, fcf); - t4_tx_release(&s->t4); + t4_tx_release(&s->t4.tx); /* TODO: should go back to T, and resend */ return_to_phase_b(s, TRUE); break; @@ -3623,7 +3732,7 @@ static void process_state_ii_q(t30_state_t *s, const uint8_t *msg, int len) tx_end_page(s); if (s->phase_d_handler) s->phase_d_handler(s, s->phase_d_user_data, fcf); - t4_tx_release(&s->t4); + t4_tx_release(&s->t4.tx); send_dcn(s); break; } @@ -3887,7 +3996,6 @@ static void process_state_iv(t30_state_t *s, const uint8_t *msg, int len) static void process_state_iv_pps_null(t30_state_t *s, const uint8_t *msg, int len) { - t4_stats_t stats; uint8_t fcf; fcf = msg[2] & 0xFE; @@ -3934,13 +4042,8 @@ static void process_state_iv_pps_null(t30_state_t *s, const uint8_t *msg, int le tx_end_page(s); if (s->phase_d_handler) s->phase_d_handler(s, s->phase_d_user_data, fcf); - t4_tx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; - if (span_log_test(&s->logging, SPAN_LOG_FLOW)) - { - t4_get_transfer_statistics(&s->t4, &stats); - span_log(&s->logging, SPAN_LOG_FLOW, "Success - delivered %d pages\n", stats.pages_transferred); - } + terminate_operation_in_progress(s); + report_tx_result(s, TRUE); return_to_phase_b(s, FALSE); break; case T30_EOP: @@ -3948,14 +4051,9 @@ static void process_state_iv_pps_null(t30_state_t *s, const uint8_t *msg, int le tx_end_page(s); if (s->phase_d_handler) s->phase_d_handler(s, s->phase_d_user_data, fcf); - t4_tx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; + terminate_operation_in_progress(s); send_dcn(s); - if (span_log_test(&s->logging, SPAN_LOG_FLOW)) - { - t4_get_transfer_statistics(&s->t4, &stats); - span_log(&s->logging, SPAN_LOG_FLOW, "Success - delivered %d pages\n", stats.pages_transferred); - } + report_tx_result(s, TRUE); break; } } @@ -3991,7 +4089,6 @@ static void process_state_iv_pps_null(t30_state_t *s, const uint8_t *msg, int le static void process_state_iv_pps_q(t30_state_t *s, const uint8_t *msg, int len) { - t4_stats_t stats; uint8_t fcf; fcf = msg[2] & 0xFE; @@ -4038,13 +4135,8 @@ static void process_state_iv_pps_q(t30_state_t *s, const uint8_t *msg, int len) tx_end_page(s); if (s->phase_d_handler) s->phase_d_handler(s, s->phase_d_user_data, fcf); - t4_tx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; - if (span_log_test(&s->logging, SPAN_LOG_FLOW)) - { - t4_get_transfer_statistics(&s->t4, &stats); - span_log(&s->logging, SPAN_LOG_FLOW, "Success - delivered %d pages\n", stats.pages_transferred); - } + terminate_operation_in_progress(s); + report_tx_result(s, TRUE); return_to_phase_b(s, FALSE); break; case T30_EOP: @@ -4052,14 +4144,9 @@ static void process_state_iv_pps_q(t30_state_t *s, const uint8_t *msg, int len) tx_end_page(s); if (s->phase_d_handler) s->phase_d_handler(s, s->phase_d_user_data, fcf); - t4_tx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; + terminate_operation_in_progress(s); send_dcn(s); - if (span_log_test(&s->logging, SPAN_LOG_FLOW)) - { - t4_get_transfer_statistics(&s->t4, &stats); - span_log(&s->logging, SPAN_LOG_FLOW, "Success - delivered %d pages\n", stats.pages_transferred); - } + report_tx_result(s, TRUE); break; } } @@ -4111,7 +4198,6 @@ static void process_state_iv_pps_q(t30_state_t *s, const uint8_t *msg, int len) static void process_state_iv_pps_rnr(t30_state_t *s, const uint8_t *msg, int len) { - t4_stats_t stats; uint8_t fcf; fcf = msg[2] & 0xFE; @@ -4158,13 +4244,8 @@ static void process_state_iv_pps_rnr(t30_state_t *s, const uint8_t *msg, int len tx_end_page(s); if (s->phase_d_handler) s->phase_d_handler(s, s->phase_d_user_data, fcf); - t4_tx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; - if (span_log_test(&s->logging, SPAN_LOG_FLOW)) - { - t4_get_transfer_statistics(&s->t4, &stats); - span_log(&s->logging, SPAN_LOG_FLOW, "Success - delivered %d pages\n", stats.pages_transferred); - } + terminate_operation_in_progress(s); + report_tx_result(s, TRUE); return_to_phase_b(s, FALSE); break; case T30_EOP: @@ -4172,14 +4253,9 @@ static void process_state_iv_pps_rnr(t30_state_t *s, const uint8_t *msg, int len tx_end_page(s); if (s->phase_d_handler) s->phase_d_handler(s, s->phase_d_user_data, fcf); - t4_tx_release(&s->t4); - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; + terminate_operation_in_progress(s); send_dcn(s); - if (span_log_test(&s->logging, SPAN_LOG_FLOW)) - { - t4_get_transfer_statistics(&s->t4, &stats); - span_log(&s->logging, SPAN_LOG_FLOW, "Success - delivered %d pages\n", stats.pages_transferred); - } + report_tx_result(s, TRUE); break; } } @@ -5253,7 +5329,6 @@ static void t30_non_ecm_rx_status(void *user_data, int status) { /* The training went OK */ s->short_train = TRUE; - s->in_message = TRUE; rx_start_page(s); set_phase(s, T30_PHASE_B_TX); set_state(s, T30_STATE_F_CFR); @@ -5327,7 +5402,7 @@ SPAN_DECLARE_NONSTD(void) t30_non_ecm_put_bit(void *user_data, int bit) break; case T30_STATE_F_DOC_NON_ECM: /* Document transfer */ - if (t4_rx_put_bit(&s->t4, bit)) + if (t4_rx_put_bit(&s->t4.rx, bit)) { /* That is the end of the document */ set_state(s, T30_STATE_F_POST_DOC_NON_ECM); @@ -5343,6 +5418,11 @@ SPAN_DECLARE(void) t30_non_ecm_put_byte(void *user_data, int byte) { t30_state_t *s; + if (byte < 0) + { + t30_non_ecm_rx_status(user_data, byte); + return; + } s = (t30_state_t *) user_data; switch (s->state) { @@ -5363,7 +5443,7 @@ SPAN_DECLARE(void) t30_non_ecm_put_byte(void *user_data, int byte) break; case T30_STATE_F_DOC_NON_ECM: /* Document transfer */ - if (t4_rx_put_byte(&s->t4, (uint8_t) byte)) + if (t4_rx_put_byte(&s->t4.rx, (uint8_t) byte)) { /* That is the end of the document */ set_state(s, T30_STATE_F_POST_DOC_NON_ECM); @@ -5403,7 +5483,7 @@ SPAN_DECLARE(void) t30_non_ecm_put_chunk(void *user_data, const uint8_t buf[], i break; case T30_STATE_F_DOC_NON_ECM: /* Document transfer */ - if (t4_rx_put_chunk(&s->t4, buf, len)) + if (t4_rx_put_chunk(&s->t4.rx, buf, len)) { /* That is the end of the document */ set_state(s, T30_STATE_F_POST_DOC_NON_ECM); @@ -5434,7 +5514,7 @@ SPAN_DECLARE_NONSTD(int) t30_non_ecm_get_bit(void *user_data) break; case T30_STATE_I: /* Transferring real data. */ - bit = t4_tx_get_bit(&s->t4); + bit = t4_tx_get_bit(&s->t4.tx); break; case T30_STATE_D_POST_TCF: case T30_STATE_II_Q: @@ -5469,7 +5549,7 @@ SPAN_DECLARE(int) t30_non_ecm_get_byte(void *user_data) break; case T30_STATE_I: /* Transferring real data. */ - byte = t4_tx_get_byte(&s->t4); + byte = t4_tx_get_byte(&s->t4.tx); break; case T30_STATE_D_POST_TCF: case T30_STATE_II_Q: @@ -5504,7 +5584,7 @@ SPAN_DECLARE(int) t30_non_ecm_get_chunk(void *user_data, uint8_t buf[], int max_ break; case T30_STATE_I: /* Transferring real data. */ - len = t4_tx_get_chunk(&s->t4, buf, max_len); + len = t4_tx_get_chunk(&s->t4.tx, buf, max_len); break; case T30_STATE_D_POST_TCF: case T30_STATE_II_Q: @@ -6131,7 +6211,20 @@ SPAN_DECLARE(void) t30_get_transfer_statistics(t30_state_t *s, t30_stats_t *t) t->bit_rate = fallback_sequence[s->current_fallback].bit_rate; t->error_correcting_mode = s->error_correcting_mode; t->error_correcting_mode_retries = s->error_correcting_mode_retries; - t4_get_transfer_statistics(&s->t4, &stats); + switch (s->operation_in_progress) + { + case OPERATION_IN_PROGRESS_T4_TX: + case OPERATION_IN_PROGRESS_POST_T4_TX: + t4_tx_get_transfer_statistics(&s->t4.tx, &stats); + break; + case OPERATION_IN_PROGRESS_T4_RX: + case OPERATION_IN_PROGRESS_POST_T4_RX: + t4_rx_get_transfer_statistics(&s->t4.rx, &stats); + break; + default: + memset(&stats, 0, sizeof(stats)); + break; + } t->pages_tx = s->tx_page_number; t->pages_rx = s->rx_page_number; t->pages_in_file = stats.pages_in_file; @@ -6248,16 +6341,7 @@ SPAN_DECLARE(int) t30_release(t30_state_t *s) { /* Make sure any FAX in progress is tidied up. If the tidying up has already happened, repeating it here is harmless. */ - switch (s->operation_in_progress) - { - case OPERATION_IN_PROGRESS_T4_TX: - t4_tx_release(&s->t4); - break; - case OPERATION_IN_PROGRESS_T4_RX: - t4_rx_release(&s->t4); - break; - } - s->operation_in_progress = OPERATION_IN_PROGRESS_NONE; + terminate_operation_in_progress(s); return 0; } /*- End of function --------------------------------------------------------*/ diff --git a/libs/spandsp/src/t30_api.c b/libs/spandsp/src/t30_api.c index 258e3f212d..a98dfeecc6 100644 --- a/libs/spandsp/src/t30_api.c +++ b/libs/spandsp/src/t30_api.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t30_api.c,v 1.13.4.2 2009/12/19 14:18:13 steveu Exp $ */ /*! \file */ @@ -62,6 +60,12 @@ #include "spandsp/v27ter_tx.h" #include "spandsp/t4_rx.h" #include "spandsp/t4_tx.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/t81_t82_arith_coding.h" +#include "spandsp/t85.h" +#endif +#include "spandsp/t4_t6_decode.h" +#include "spandsp/t4_t6_encode.h" #include "spandsp/t30_fcf.h" #include "spandsp/t35.h" #include "spandsp/t30.h" @@ -69,6 +73,12 @@ #include "spandsp/t30_logging.h" #include "spandsp/private/logging.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/private/t81_t82_arith_coding.h" +#include "spandsp/private/t85.h" +#endif +#include "spandsp/private/t4_t6_decode.h" +#include "spandsp/private/t4_t6_encode.h" #include "spandsp/private/t4_rx.h" #include "spandsp/private/t4_tx.h" #include "spandsp/private/t30.h" @@ -85,7 +95,7 @@ SPAN_DECLARE(int) t30_set_tx_ident(t30_state_t *s, const char *id) if (strlen(id) > T30_MAX_IDENT_LEN) return -1; strcpy(s->tx_info.ident, id); - t4_tx_set_local_ident(&s->t4, s->tx_info.ident); + t4_tx_set_local_ident(&s->t4.tx, s->tx_info.ident); return 0; } /*- End of function --------------------------------------------------------*/ @@ -536,6 +546,16 @@ SPAN_DECLARE(size_t) t30_get_rx_csa(t30_state_t *s, int *type, const char *addre } /*- End of function --------------------------------------------------------*/ +SPAN_DECLARE(int) t30_set_tx_page_header_overlays_image(t30_state_t *s, int header_overlays_image) +{ +#if 0 + s->header_overlays_image = header_overlays_image; + t4_tx_set_header_overlays_image(&s->t4.tx, s->header_overlays_image); +#endif + return 0; +} +/*- End of function --------------------------------------------------------*/ + SPAN_DECLARE(int) t30_set_tx_page_header_info(t30_state_t *s, const char *info) { if (info == NULL) @@ -546,7 +566,14 @@ SPAN_DECLARE(int) t30_set_tx_page_header_info(t30_state_t *s, const char *info) if (strlen(info) > T30_MAX_PAGE_HEADER_INFO) return -1; strcpy(s->header_info, info); - t4_tx_set_header_info(&s->t4, s->header_info); + t4_tx_set_header_info(&s->t4.tx, s->header_info); + return 0; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(int) t30_set_tx_page_header_tz(t30_state_t *s, const char *tzstring) +{ + t4_tx_set_header_tz(&s->t4.tx, tzstring); return 0; } /*- End of function --------------------------------------------------------*/ @@ -653,7 +680,19 @@ SPAN_DECLARE(int) t30_set_supported_modems(t30_state_t *s, int supported_modems) SPAN_DECLARE(int) t30_set_supported_compressions(t30_state_t *s, int supported_compressions) { - s->supported_compressions = supported_compressions; + int mask; + + /* Mask out the ones we actually support today. */ + mask = T30_SUPPORT_T4_1D_COMPRESSION + | T30_SUPPORT_T4_2D_COMPRESSION + | T30_SUPPORT_T6_COMPRESSION +#if defined(SPANDSP_SUPPORT_T85) + | T30_SUPPORT_T85_COMPRESSION + | T30_SUPPORT_T85_L0_COMPRESSION; +#else + | 0; +#endif + s->supported_compressions = supported_compressions & mask; t30_build_dis_or_dtc(s); return 0; } diff --git a/libs/spandsp/src/t30_local.h b/libs/spandsp/src/t30_local.h index 177d6dc3eb..3152ad94ea 100644 --- a/libs/spandsp/src/t30_local.h +++ b/libs/spandsp/src/t30_local.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t30_local.h,v 1.2 2008/04/17 14:26:57 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/t30_logging.c b/libs/spandsp/src/t30_logging.c index abc6fa31c5..97a8c02378 100644 --- a/libs/spandsp/src/t30_logging.c +++ b/libs/spandsp/src/t30_logging.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t30_logging.c,v 1.12.4.2 2009/12/19 10:44:10 steveu Exp $ */ /*! \file */ @@ -62,12 +60,24 @@ #include "spandsp/v27ter_tx.h" #include "spandsp/t4_rx.h" #include "spandsp/t4_tx.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/t81_t82_arith_coding.h" +#include "spandsp/t85.h" +#endif +#include "spandsp/t4_t6_decode.h" +#include "spandsp/t4_t6_encode.h" #include "spandsp/t30_fcf.h" #include "spandsp/t35.h" #include "spandsp/t30.h" #include "spandsp/t30_logging.h" #include "spandsp/private/logging.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/private/t81_t82_arith_coding.h" +#include "spandsp/private/t85.h" +#endif +#include "spandsp/private/t4_t6_decode.h" +#include "spandsp/private/t4_t6_encode.h" #include "spandsp/private/t4_rx.h" #include "spandsp/private/t4_tx.h" #include "spandsp/private/t30.h" diff --git a/libs/spandsp/src/t31.c b/libs/spandsp/src/t31.c index 6f00df9499..5c9c4066b2 100644 --- a/libs/spandsp/src/t31.c +++ b/libs/spandsp/src/t31.c @@ -24,8 +24,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t31.c,v 1.155.4.1 2009/12/19 10:44:10 steveu Exp $ */ /*! \file */ @@ -55,6 +53,7 @@ #include "spandsp/telephony.h" #include "spandsp/logging.h" #include "spandsp/bit_operations.h" +#include "spandsp/bitstream.h" #include "spandsp/dc_restore.h" #include "spandsp/queue.h" #include "spandsp/power_meter.h" @@ -65,15 +64,19 @@ #include "spandsp/crc.h" #include "spandsp/hdlc.h" #include "spandsp/silence_gen.h" +#include "spandsp/super_tone_rx.h" #include "spandsp/fsk.h" +#include "spandsp/modem_connect_tones.h" +#include "spandsp/v8.h" #include "spandsp/v29tx.h" #include "spandsp/v29rx.h" #include "spandsp/v27ter_tx.h" #include "spandsp/v27ter_rx.h" #include "spandsp/v17tx.h" #include "spandsp/v17rx.h" -#include "spandsp/super_tone_rx.h" -#include "spandsp/modem_connect_tones.h" +#if defined(SPANDSP_SUPPORT_V34) +#include "spandsp/v34.h" +#endif #include "spandsp/t4_rx.h" #include "spandsp/t4_tx.h" #include "spandsp/t30.h" @@ -86,16 +89,21 @@ #include "spandsp/t30_fcf.h" #include "spandsp/private/logging.h" +#include "spandsp/private/bitstream.h" #include "spandsp/private/t38_core.h" #include "spandsp/private/silence_gen.h" #include "spandsp/private/fsk.h" +#include "spandsp/private/modem_connect_tones.h" +#include "spandsp/private/v8.h" +#if defined(SPANDSP_SUPPORT_V34) +#include "spandsp/private/v34.h" +#endif #include "spandsp/private/v17tx.h" #include "spandsp/private/v17rx.h" #include "spandsp/private/v27ter_tx.h" #include "spandsp/private/v27ter_rx.h" #include "spandsp/private/v29tx.h" #include "spandsp/private/v29rx.h" -#include "spandsp/private/modem_connect_tones.h" #include "spandsp/private/hdlc.h" #include "spandsp/private/fax_modems.h" #include "spandsp/private/at_interpreter.h" @@ -455,12 +463,23 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, with 0xFF it would appear some octets must have been missed before this one. */ if (len <= 0 || buf[0] != 0xFF) fe->rx_data_missing = TRUE; + /*endif*/ } - if (len > 0 && fe->hdlc_rx.len + len <= T31_T38_MAX_HDLC_LEN) + /*endif*/ + if (len > 0) { - bit_reverse(fe->hdlc_rx.buf + fe->hdlc_rx.len, buf, len); - fe->hdlc_rx.len += len; + if (fe->hdlc_rx.len + len <= T31_T38_MAX_HDLC_LEN) + { + bit_reverse(fe->hdlc_rx.buf + fe->hdlc_rx.len, buf, len); + fe->hdlc_rx.len += len; + } + else + { + fe->rx_data_missing = TRUE; + } + /*endif*/ } + /*endif*/ fe->timeout_rx_samples = fe->samples + ms_to_samples(MID_RX_TIMEOUT); break; case T38_FIELD_HDLC_FCS_OK: @@ -470,6 +489,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, /* The sender has incorrectly included data in this message. It is unclear what we should do with it, to maximise tolerance of buggy implementations. */ } + /*endif*/ /* Some T.38 implementations send multiple T38_FIELD_HDLC_FCS_OK messages, in IFP packets with incrementing sequence numbers, which are actually repeats. They get through to this point because of the incrementing sequence numbers. We need to filter them here in a context sensitive manner. */ @@ -479,6 +499,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, crc_itu16_append(fe->hdlc_rx.buf, fe->hdlc_rx.len); hdlc_accept_frame(s, fe->hdlc_rx.buf, fe->hdlc_rx.len, !fe->rx_data_missing); } + /*endif*/ fe->hdlc_rx.len = 0; fe->rx_data_missing = FALSE; fe->timeout_rx_samples = fe->samples + ms_to_samples(MID_RX_TIMEOUT); @@ -490,6 +511,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, /* The sender has incorrectly included data in this message. We can safely ignore it, as the bad FCS means we will throw away the whole message, anyway. */ } + /*endif*/ /* Some T.38 implementations send multiple T38_FIELD_HDLC_FCS_BAD messages, in IFP packets with incrementing sequence numbers, which are actually repeats. They get through to this point because of the incrementing sequence numbers. We need to filter them here in a context sensitive manner. */ @@ -498,6 +520,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, span_log(&s->logging, SPAN_LOG_FLOW, "Type %s - CRC bad (%s)\n", (fe->hdlc_rx.len >= 3) ? t30_frametype(fe->hdlc_rx.buf[2]) : "???", (fe->rx_data_missing) ? "missing octets" : "clean"); hdlc_accept_frame(s, fe->hdlc_rx.buf, fe->hdlc_rx.len, FALSE); } + /*endif*/ fe->hdlc_rx.len = 0; fe->rx_data_missing = FALSE; fe->timeout_rx_samples = fe->samples + ms_to_samples(MID_RX_TIMEOUT); @@ -1303,6 +1326,15 @@ static void tone_detected(void *user_data, int tone, int level, int delay) } /*- End of function --------------------------------------------------------*/ +static void v8_handler(void *user_data, v8_parms_t *result) +{ + t31_state_t *s; + + s = (t31_state_t *) user_data; + span_log(&s->logging, SPAN_LOG_FLOW, "V.8 report received\n"); +} +/*- End of function --------------------------------------------------------*/ + static void hdlc_tx_underflow(void *user_data) { t31_state_t *s; @@ -2332,7 +2364,7 @@ static int v29_v21_rx_fillin(void *user_data, int len) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) t31_rx(t31_state_t *s, int16_t amp[], int len) +SPAN_DECLARE_NONSTD(int) t31_rx(t31_state_t *s, int16_t amp[], int len) { int i; int32_t power; @@ -2378,7 +2410,7 @@ SPAN_DECLARE(int) t31_rx(t31_state_t *s, int16_t amp[], int len) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) t31_rx_fillin(t31_state_t *s, int len) +SPAN_DECLARE_NONSTD(int) t31_rx_fillin(t31_state_t *s, int len) { /* To mitigate the effect of lost packets on a packet network we should try to sustain the status quo. If there is no receive modem running, keep @@ -2436,7 +2468,7 @@ static int set_next_tx_type(t31_state_t *s) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) t31_tx(t31_state_t *s, int16_t amp[], int max_len) +SPAN_DECLARE_NONSTD(int) t31_tx(t31_state_t *s, int16_t amp[], int max_len) { int len; @@ -2570,8 +2602,9 @@ SPAN_DECLARE(t31_state_t *) t31_init(t31_state_t *s, t38_tx_packet_handler_t *tx_t38_packet_handler, void *tx_t38_packet_user_data) { + v8_parms_t v8_parms; int alloced; - + if (at_tx_handler == NULL || modem_control_handler == NULL) return NULL; @@ -2596,6 +2629,28 @@ SPAN_DECLARE(t31_state_t *) t31_init(t31_state_t *s, non_ecm_get_bit, tone_detected, (void *) s); +#if 0 + v8_parms.modem_connect_tone = MODEM_CONNECT_TONES_ANSAM_PR; + v8_parms.call_function = V8_CALL_T30_RX; + v8_parms.modulations = V8_MOD_V21 +#if 0 + | V8_MOD_V34HALF +#endif + | V8_MOD_V17 + | V8_MOD_V29 + | V8_MOD_V27TER; + v8_parms.protocol = V8_PROTOCOL_NONE; + v8_parms.pcm_modem_availability = 0; + v8_parms.pstn_access = 0; + v8_parms.nsf = -1; + v8_parms.t66 = -1; + v8_init(&s->audio.v8, + FALSE, + &v8_parms, + v8_handler, + s); + +#endif power_meter_init(&(s->audio.rx_power), 4); s->audio.last_sample = 0; s->audio.silence_threshold_power = power_meter_level_dbm0(-36); diff --git a/libs/spandsp/src/t35.c b/libs/spandsp/src/t35.c index 392bc6a440..9d525b5e36 100644 --- a/libs/spandsp/src/t35.c +++ b/libs/spandsp/src/t35.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t35.c,v 1.31 2009/05/16 03:34:45 steveu Exp $ */ /* diff --git a/libs/spandsp/src/t38_core.c b/libs/spandsp/src/t38_core.c index 443608b26d..551d6c0155 100644 --- a/libs/spandsp/src/t38_core.c +++ b/libs/spandsp/src/t38_core.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_core.c,v 1.54 2009/10/09 14:53:57 steveu Exp $ */ /*! \file */ @@ -176,7 +174,7 @@ SPAN_DECLARE(const char *) t38_data_type_to_str(int data_type) case T38_DATA_V34_CC_1200: return "v34-CC-1200"; case T38_DATA_V34_PRI_CH: - return "v34-pri-vh"; + return "v34-pri-ch"; case T38_DATA_V33_12000: return "v33-12000"; case T38_DATA_V33_14400: @@ -327,7 +325,7 @@ static __inline__ int classify_seq_no_offset(int expected, int actual) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE_NONSTD(int) t38_core_rx_ifp_packet(t38_core_state_t *s, const uint8_t *buf, int len, uint16_t seq_no) +SPAN_DECLARE(int) t38_core_rx_ifp_packet(t38_core_state_t *s, const uint8_t *buf, int len, uint16_t seq_no) { int i; int t30_indicator; @@ -782,13 +780,17 @@ SPAN_DECLARE(int) t38_core_send_indicator(t38_core_state_t *s, int indicator) uint8_t buf[100]; int len; int delay; + int transmissions; delay = 0; /* Only send an indicator if it represents a change of state. */ + /* If the 0x100 bit is set in indicator it will bypass this test, and force transmission */ if (s->current_tx_indicator != indicator) { /* Zero is a valid count, to suppress the transmission of indicators when the transport means they are not needed - e.g. TPKT/TCP. */ + transmissions = (indicator & 0x100) ? 1 : s->category_control[T38_PACKET_CATEGORY_INDICATOR]; + indicator &= 0xFF; if (s->category_control[T38_PACKET_CATEGORY_INDICATOR]) { if ((len = t38_encode_indicator(s, buf, indicator)) < 0) @@ -797,7 +799,7 @@ SPAN_DECLARE(int) t38_core_send_indicator(t38_core_state_t *s, int indicator) return len; } span_log(&s->logging, SPAN_LOG_FLOW, "Tx %5d: indicator %s\n", s->tx_seq_no, t38_indicator_to_str(indicator)); - s->tx_packet_handler(s, s->tx_packet_user_data, buf, len, s->category_control[T38_PACKET_CATEGORY_INDICATOR]); + s->tx_packet_handler(s, s->tx_packet_user_data, buf, len, transmissions); s->tx_seq_no = (s->tx_seq_no + 1) & 0xFFFF; delay = modem_startup_time[indicator].training; if (s->allow_for_tep) @@ -815,6 +817,12 @@ SPAN_DECLARE(int) t38_core_send_flags_delay(t38_core_state_t *s, int indicator) } /*- End of function --------------------------------------------------------*/ +SPAN_DECLARE(int) t38_core_send_training_delay(t38_core_state_t *s, int indicator) +{ + return modem_startup_time[indicator].training; +} +/*- End of function --------------------------------------------------------*/ + SPAN_DECLARE(int) t38_core_send_data(t38_core_state_t *s, int data_type, int field_type, const uint8_t field[], int field_len, int category) { t38_data_field_t field0; @@ -935,6 +943,26 @@ SPAN_DECLARE(logging_state_t *) t38_core_get_logging_state(t38_core_state_t *s) } /*- End of function --------------------------------------------------------*/ +SPAN_DECLARE(int) t38_core_restart(t38_core_state_t *s) +{ + /* Set the initial current receive states to something invalid, so the + first data received is seen as a change of state. */ + s->current_rx_indicator = -1; + s->current_rx_data_type = -1; + s->current_rx_field_type = -1; + + /* Set the initial current indicator state to something invalid, so the + first attempt to send an indicator will work. */ + s->current_tx_indicator = -1; + + /* We have no initial expectation of the received packet sequence number. + They most often start at 0 or 1 for a UDPTL transport, but random + starting numbers are possible. */ + s->rx_expected_seq_no = -1; + return 0; +} +/*- End of function --------------------------------------------------------*/ + SPAN_DECLARE(t38_core_state_t *) t38_core_init(t38_core_state_t *s, t38_rx_indicator_handler_t *rx_indicator_handler, t38_rx_data_handler_t *rx_data_handler, @@ -971,16 +999,6 @@ SPAN_DECLARE(t38_core_state_t *) t38_core_init(t38_core_state_t *s, s->category_control[T38_PACKET_CATEGORY_IMAGE_DATA] = 1; s->category_control[T38_PACKET_CATEGORY_IMAGE_DATA_END] = 1; - /* Set the initial current receive states to something invalid, so the - first data received is seen as a change of state. */ - s->current_rx_indicator = -1; - s->current_rx_data_type = -1; - s->current_rx_field_type = -1; - - /* Set the initial current indicator state to something invalid, so the - first attempt to send an indicator will work. */ - s->current_tx_indicator = -1; - s->rx_indicator_handler = rx_indicator_handler; s->rx_data_handler = rx_data_handler; s->rx_missing_handler = rx_missing_handler; @@ -988,10 +1006,7 @@ SPAN_DECLARE(t38_core_state_t *) t38_core_init(t38_core_state_t *s, s->tx_packet_handler = tx_packet_handler; s->tx_packet_user_data = tx_packet_user_data; - /* We have no initial expectation of the received packet sequence number. - They most often start at 0 or 1 for a UDPTL transport, but random - starting numbers are possible. */ - s->rx_expected_seq_no = -1; + t38_core_restart(s); return s; } /*- End of function --------------------------------------------------------*/ diff --git a/libs/spandsp/src/t38_gateway.c b/libs/spandsp/src/t38_gateway.c index e4fac8067c..a572b5dad9 100644 --- a/libs/spandsp/src/t38_gateway.c +++ b/libs/spandsp/src/t38_gateway.c @@ -73,6 +73,12 @@ #include "spandsp/modem_connect_tones.h" #include "spandsp/t4_rx.h" #include "spandsp/t4_tx.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/t81_t82_arith_coding.h" +#include "spandsp/t85.h" +#endif +#include "spandsp/t4_t6_decode.h" +#include "spandsp/t4_t6_encode.h" #include "spandsp/t30_fcf.h" #include "spandsp/t35.h" #include "spandsp/t30.h" @@ -94,6 +100,12 @@ #include "spandsp/private/modem_connect_tones.h" #include "spandsp/private/hdlc.h" #include "spandsp/private/fax_modems.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/private/t81_t82_arith_coding.h" +#include "spandsp/private/t85.h" +#endif +#include "spandsp/private/t4_t6_decode.h" +#include "spandsp/private/t4_t6_encode.h" #include "spandsp/private/t4_rx.h" #include "spandsp/private/t4_tx.h" #include "spandsp/private/t30.h" @@ -191,6 +203,7 @@ static void set_rx_handler(t38_gateway_state_t *s, span_rx_handler_t *handler, s s->audio.modems.rx_handler = handler; s->audio.modems.rx_fillin_handler = fillin_handler; } + /*endif*/ s->audio.base_rx_handler = handler; s->audio.base_rx_fillin_handler = fillin_handler; s->audio.modems.rx_user_data = user_data; @@ -1014,10 +1027,13 @@ static void queue_missing_indicator(t38_gateway_state_t *s, int data_type) /*endswitch*/ if (expected < 0) return; + /*endif*/ if (t->current_rx_indicator == expected) return; + /*endif*/ if (expected_alt >= 0 && t->current_rx_indicator == expected_alt) return; + /*endif*/ span_log(&s->logging, SPAN_LOG_FLOW, "Queuing missing indicator - %s\n", @@ -1155,13 +1171,20 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, with 0xFF it would appear some octets must have been missed before this one. */ if (len <= 0 || buf[0] != 0xFF) s->core.hdlc_to_modem.buf[s->core.hdlc_to_modem.in].flags |= HDLC_FLAG_MISSING_DATA; + /*endif*/ hdlc_buf = &s->core.hdlc_to_modem.buf[s->core.hdlc_to_modem.in]; } /*endif*/ /* Check if this data would overflow the buffer. */ - if (len <= 0 || hdlc_buf->len + len > T38_MAX_HDLC_LEN) + if (len <= 0) break; /*endif*/ + if (hdlc_buf->len + len > T38_MAX_HDLC_LEN) + { + s->core.hdlc_to_modem.buf[s->core.hdlc_to_modem.in].flags |= HDLC_FLAG_MISSING_DATA; + break; + } + /*endif*/ hdlc_buf->contents = (data_type | FLAG_DATA); bit_reverse(&hdlc_buf->buf[hdlc_buf->len], buf, len); /* We need to send out the control messages as they are arriving. They are @@ -1389,6 +1412,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, queue_missing_indicator(s, data_type); hdlc_buf = &s->core.hdlc_to_modem.buf[s->core.hdlc_to_modem.in]; } + /*endif*/ /* WORKAROUND: At least some Mediatrix boxes have a bug, where they can send this message at the end of non-ECM data. We need to tolerate this. */ if (xx->current_rx_field_class == T38_FIELD_CLASS_NON_ECM) @@ -1423,8 +1447,10 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, queue_missing_indicator(s, data_type); hdlc_buf = &s->core.hdlc_to_modem.buf[s->core.hdlc_to_modem.in]; } + /*endif*/ if (len > 0) t38_non_ecm_buffer_inject(&s->core.non_ecm_to_modem, buf, len); + /*endif*/ xx->corrupt_current_frame[0] = FALSE; break; case T38_FIELD_T4_NON_ECM_SIG_END: @@ -1510,7 +1536,8 @@ static void set_octets_per_data_packet(t38_gateway_state_t *s, int bit_rate) { int octets; - octets = s->core.ms_per_tx_chunk*bit_rate/(8*1000); + //octets = s->core.ms_per_tx_chunk*bit_rate/(8*1000); + octets = DEFAULT_MS_PER_TX_CHUNK*bit_rate/(8*1000); if (octets < 1) octets = 1; /*endif*/ @@ -1555,6 +1582,7 @@ static int set_fast_packetisation(t38_gateway_state_t *s) s->t38x.current_tx_data_type = T38_DATA_V17_14400; break; } + /*endswitch*/ break; case T38_V27TER_RX: set_octets_per_data_packet(s, s->core.fast_bit_rate); @@ -1570,6 +1598,7 @@ static int set_fast_packetisation(t38_gateway_state_t *s) s->t38x.current_tx_data_type = T38_DATA_V27TER_4800; break; } + /*endswitch*/ break; case T38_V29_RX: set_octets_per_data_packet(s, s->core.fast_bit_rate); @@ -1585,8 +1614,10 @@ static int set_fast_packetisation(t38_gateway_state_t *s) s->t38x.current_tx_data_type = T38_DATA_V29_9600; break; } + /*endswitch*/ break; } + /*endswitch*/ return ind; } /*- End of function --------------------------------------------------------*/ @@ -1616,8 +1647,10 @@ static void non_ecm_rx_status(void *user_data, int status) s->core.timed_mode = TIMED_MODE_TCF_PREDICTABLE_MODEM_START_FAST_MODEM_SEEN; else s->core.samples_to_timeout = ms_to_samples(500); + /*endif*/ set_fast_packetisation(s); } + /*endif*/ break; case SIG_STATUS_TRAINING_FAILED: break; @@ -1650,14 +1683,17 @@ static void non_ecm_rx_status(void *user_data, int status) non_ecm_push_residue(s); t38_core_send_indicator(&s->t38x.t38, T38_IND_NO_SIGNAL); } + /*endif*/ restart_rx_modem(s); break; } + /*endswitch*/ break; default: span_log(&s->logging, SPAN_LOG_WARNING, "Unexpected non-ECM special bit - %d!\n", status); break; } + /*endswitch*/ } /*- End of function --------------------------------------------------------*/ @@ -1682,6 +1718,7 @@ static void non_ecm_push_residue(t38_gateway_state_t *t) /* There is a fractional octet in progress. We might as well send every last bit we can. */ s->data[s->data_ptr++] = (uint8_t) (s->bit_stream << (8 - s->bit_no)); } + /*endif*/ t38_core_send_data(&t->t38x.t38, t->t38x.current_tx_data_type, T38_FIELD_T4_NON_ECM_SIG_END, s->data, s->data_ptr, T38_PACKET_CATEGORY_IMAGE_DATA_END); s->in_bits += s->bits_absorbed; s->out_octets += s->data_ptr; @@ -1716,6 +1753,7 @@ static void non_ecm_put_bit(void *user_data, int bit) non_ecm_rx_status(user_data, bit); return; } + /*endif*/ t = (t38_gateway_state_t *) user_data; s = &t->core.to_t38; @@ -1727,8 +1765,10 @@ static void non_ecm_put_bit(void *user_data, int bit) s->data[s->data_ptr++] = (uint8_t) s->bit_stream & 0xFF; if (s->data_ptr >= s->octets_per_data_packet) non_ecm_push(t); + /*endif*/ s->bit_no = 0; } + /*endif*/ } /*- End of function --------------------------------------------------------*/ @@ -1742,6 +1782,7 @@ static void non_ecm_remove_fill_and_put_bit(void *user_data, int bit) non_ecm_rx_status(user_data, bit); return; } + /*endif*/ t = (t38_gateway_state_t *) user_data; s = &t->core.to_t38; @@ -1762,16 +1803,20 @@ static void non_ecm_remove_fill_and_put_bit(void *user_data, int bit) end gateway (assuming the far end is a gateway) cannot play them out. */ non_ecm_push(t); } + /*endif*/ return; } + /*endif*/ s->bit_stream = (s->bit_stream << 1) | bit; if (++s->bit_no >= 8) { s->data[s->data_ptr++] = (uint8_t) s->bit_stream & 0xFF; if (s->data_ptr >= s->octets_per_data_packet) non_ecm_push(t); + /*endif*/ s->bit_no = 0; } + /*endif*/ } /*- End of function --------------------------------------------------------*/ @@ -1815,6 +1860,7 @@ static void hdlc_rx_status(hdlc_rx_state_t *t, int status) t38_core_send_indicator(&s->t38x.t38, T38_IND_NO_SIGNAL); t->framing_ok_announced = FALSE; } + /*endif*/ restart_rx_modem(s); if (s->core.timed_mode == TIMED_MODE_TCF_PREDICTABLE_MODEM_START_BEGIN) { @@ -1826,11 +1872,13 @@ static void hdlc_rx_status(hdlc_rx_state_t *t, int status) s->core.samples_to_timeout = ms_to_samples(75); s->core.timed_mode = TIMED_MODE_TCF_PREDICTABLE_MODEM_START_PAST_V21_MODEM; } + /*endif*/ break; default: span_log(&s->logging, SPAN_LOG_WARNING, "Unexpected HDLC special bit - %d!\n", status); break; } + /*endswitch*/ } /*- End of function --------------------------------------------------------*/ @@ -2041,7 +2089,13 @@ static int restart_rx_modem(t38_gateway_state_t *s) s->core.to_t38.in_bits = 0; s->core.to_t38.out_octets = 0; } - span_log(&s->logging, SPAN_LOG_FLOW, "Restart rx modem - modem = %d, short train = %d, ECM = %d\n", s->core.fast_rx_modem, s->core.short_train, s->core.ecm_mode); + /*endif*/ + span_log(&s->logging, + SPAN_LOG_FLOW, + "Restart rx modem - modem = %d, short train = %d, ECM = %d\n", + s->core.fast_rx_modem, + s->core.short_train, + s->core.ecm_mode); hdlc_rx_init(&(s->audio.modems.hdlc_rx), FALSE, TRUE, HDLC_FRAMING_OK_THRESHOLD, NULL, s); s->audio.modems.rx_signal_present = FALSE; @@ -2063,6 +2117,7 @@ static int restart_rx_modem(t38_gateway_state_t *s) put_bit_func = non_ecm_remove_fill_and_put_bit; else put_bit_func = non_ecm_put_bit; + /*endif*/ put_bit_user_data = (void *) s; } /*endif*/ @@ -2150,7 +2205,7 @@ SPAN_DECLARE_NONSTD(int) t38_gateway_rx(t38_gateway_state_t *s, int16_t amp[], i amp[i] = dc_restore(&(s->audio.modems.dc_restore), amp[i]); /*endfor*/ s->audio.modems.rx_handler(s->audio.modems.rx_user_data, amp, len); - return 0; + return 0; } /*- End of function --------------------------------------------------------*/ @@ -2178,7 +2233,7 @@ SPAN_DECLARE_NONSTD(int) t38_gateway_rx_fillin(t38_gateway_state_t *s, int len) update_rx_timing(s, len); /* TODO: handle the modems properly */ s->audio.modems.rx_fillin_handler(s->audio.modems.rx_user_data, len); - return 0; + return 0; } /*- End of function --------------------------------------------------------*/ @@ -2377,8 +2432,8 @@ SPAN_DECLARE(t38_gateway_state_t *) t38_gateway_init(t38_gateway_state_t *s, s->core.to_t38.octets_per_data_packet = 1; s->core.ecm_allowed = TRUE; - s->core.ms_per_tx_chunk = DEFAULT_MS_PER_TX_CHUNK; t38_non_ecm_buffer_init(&s->core.non_ecm_to_modem, FALSE, 0); + //s->core.ms_per_tx_chunk = DEFAULT_MS_PER_TX_CHUNK; restart_rx_modem(s); s->core.timed_mode = TIMED_MODE_STARTUP; s->core.samples_to_timeout = 1; diff --git a/libs/spandsp/src/t38_non_ecm_buffer.c b/libs/spandsp/src/t38_non_ecm_buffer.c index 1820981002..ddf5b49f7a 100644 --- a/libs/spandsp/src/t38_non_ecm_buffer.c +++ b/libs/spandsp/src/t38_non_ecm_buffer.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_non_ecm_buffer.c,v 1.9.4.1 2009/12/19 06:43:28 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/t38_terminal.c b/libs/spandsp/src/t38_terminal.c index c11a95e943..c9961f665b 100644 --- a/libs/spandsp/src/t38_terminal.c +++ b/libs/spandsp/src/t38_terminal.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_terminal.c,v 1.129.4.2 2009/12/19 10:44:10 steveu Exp $ */ /*! \file */ @@ -65,6 +63,12 @@ #include "spandsp/v17rx.h" #include "spandsp/t4_rx.h" #include "spandsp/t4_tx.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/t81_t82_arith_coding.h" +#include "spandsp/t85.h" +#endif +#include "spandsp/t4_t6_decode.h" +#include "spandsp/t4_t6_encode.h" #include "spandsp/t30_fcf.h" #include "spandsp/t35.h" #include "spandsp/t30.h" @@ -74,6 +78,12 @@ #include "spandsp/t38_terminal.h" #include "spandsp/private/logging.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/private/t81_t82_arith_coding.h" +#include "spandsp/private/t85.h" +#endif +#include "spandsp/private/t4_t6_decode.h" +#include "spandsp/private/t4_t6_encode.h" #include "spandsp/private/t4_rx.h" #include "spandsp/private/t4_tx.h" #include "spandsp/private/t30.h" @@ -81,7 +91,7 @@ #include "spandsp/private/t38_terminal.h" /* Settings suitable for paced transmission over a UDP transport */ -#define MS_PER_TX_CHUNK 30 +#define DEFAULT_MS_PER_TX_CHUNK 30 #define INDICATOR_TX_COUNT 3 #define DATA_TX_COUNT 1 @@ -97,7 +107,9 @@ enum { T38_CHUNKING_MERGE_FCS_WITH_DATA = 0x0001, T38_CHUNKING_WHOLE_FRAMES = 0x0002, - T38_CHUNKING_ALLOW_TEP_TIME = 0x0004 + T38_CHUNKING_ALLOW_TEP_TIME = 0x0004, + T38_CHUNKING_SEND_REGULAR_INDICATORS = 0x0008, + T38_CHUNKING_SEND_2S_REGULAR_INDICATORS = 0x0010 }; enum @@ -118,7 +130,8 @@ enum T38_TIMED_STEP_CED_3 = 0x32, T38_TIMED_STEP_CNG = 0x40, T38_TIMED_STEP_CNG_2 = 0x41, - T38_TIMED_STEP_PAUSE = 0x50 + T38_TIMED_STEP_PAUSE = 0x50, + T38_TIMED_STEP_NO_SIGNAL = 0x60 }; static __inline__ void front_end_status(t38_terminal_state_t *s, int status) @@ -159,14 +172,18 @@ static int extra_bits_in_stuffed_frame(const uint8_t buf[], int len) ones = 0; stuffed++; } + /*endif*/ } else { ones = 0; } + /*endif*/ bitstream >>= 1; } + /*endfor*/ } + /*endfor*/ /* The total length of the frame is: the number of bits in the body + the number of additional bits in the body due to stuffing @@ -176,7 +193,7 @@ static int extra_bits_in_stuffed_frame(const uint8_t buf[], int len) Lets just allow 3 bits for the CRC, which is the worst case. It avoids calculating the real CRC, and the worst it can do is cause a flag octet's worth of additional output. - */ + */ return stuffed + 16 + 3 + 16; } /*- End of function --------------------------------------------------------*/ @@ -206,6 +223,7 @@ static int process_rx_indicator(t38_core_state_t *t, void *user_data, int indica ignore it. Its harmless. */ return 0; } + /*endif*/ /* In termination mode we don't care very much about indicators telling us training is starting. We only care about V.21 preamble starting, for timeout control, and the actual data. */ @@ -218,6 +236,7 @@ static int process_rx_indicator(t38_core_state_t *t, void *user_data, int indica { hdlc_accept_frame(s, NULL, SIG_STATUS_CARRIER_DOWN, TRUE); } + /*endif*/ fe->timeout_rx_samples = 0; front_end_status(s, T30_FRONT_END_SIGNAL_ABSENT); break; @@ -307,6 +326,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, span_log(&s->logging, SPAN_LOG_FLOW, "CM profile %d - %s\n", buf[0] - '0', t38_cm_profile_to_str(buf[0])); else span_log(&s->logging, SPAN_LOG_FLOW, "Bad length for CM message - %d\n", len); + /*endif*/ //front_end_status(s, T30_FRONT_END_RECEIVE_COMPLETE); break; case T38_FIELD_JM_MESSAGE: @@ -314,6 +334,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, span_log(&s->logging, SPAN_LOG_FLOW, "JM - %s\n", t38_jm_to_str(buf, len)); else span_log(&s->logging, SPAN_LOG_FLOW, "Bad length for JM message - %d\n", len); + /*endif*/ //front_end_status(s, T30_FRONT_END_RECEIVE_COMPLETE); break; case T38_FIELD_CI_MESSAGE: @@ -321,6 +342,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, span_log(&s->logging, SPAN_LOG_FLOW, "CI 0x%X\n", buf[0]); else span_log(&s->logging, SPAN_LOG_FLOW, "Bad length for CI message - %d\n", len); + /*endif*/ //front_end_status(s, T30_FRONT_END_RECEIVE_COMPLETE); break; default: @@ -343,6 +365,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, { span_log(&s->logging, SPAN_LOG_FLOW, "Bad length for V34rate message - %d\n", len); } + /*endif*/ break; default: break; @@ -359,19 +382,30 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, if (fe->timeout_rx_samples == 0) { /* HDLC can just start without any signal indicator on some platforms, even when - there is zero packet lost. Nasty, but true. Its a good idea to be tolerant of + there is zero packet loss. Nasty, but true. Its a good idea to be tolerant of loss, though, so accepting a sudden start of HDLC data is the right thing to do. */ fake_rx_indicator(t, s, T38_IND_V21_PREAMBLE); /* All real HDLC messages in the FAX world start with 0xFF. If this one is not starting with 0xFF it would appear some octets must have been missed before this one. */ if (len <= 0 || buf[0] != 0xFF) fe->rx_data_missing = TRUE; + /*endif*/ } - if (len > 0 && fe->hdlc_rx.len + len <= T38_MAX_HDLC_LEN) + /*endif*/ + if (len > 0) { - bit_reverse(fe->hdlc_rx.buf + fe->hdlc_rx.len, buf, len); - fe->hdlc_rx.len += len; + if (fe->hdlc_rx.len + len <= T38_MAX_HDLC_LEN) + { + bit_reverse(fe->hdlc_rx.buf + fe->hdlc_rx.len, buf, len); + fe->hdlc_rx.len += len; + } + else + { + fe->rx_data_missing = TRUE; + } + /*endif*/ } + /*endif*/ fe->timeout_rx_samples = fe->samples + ms_to_samples(MID_RX_TIMEOUT); break; case T38_FIELD_HDLC_FCS_OK: @@ -381,6 +415,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, /* The sender has incorrectly included data in this message. It is unclear what we should do with it, to maximise tolerance of buggy implementations. */ } + /*endif*/ /* Some T.38 implementations send multiple T38_FIELD_HDLC_FCS_OK messages, in IFP packets with incrementing sequence numbers, which are actually repeats. They get through to this point because of the incrementing sequence numbers. We need to filter them here in a context sensitive manner. */ @@ -389,6 +424,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, span_log(&s->logging, SPAN_LOG_FLOW, "Type %s - CRC OK (%s)\n", (fe->hdlc_rx.len >= 3) ? t30_frametype(fe->hdlc_rx.buf[2]) : "???", (fe->rx_data_missing) ? "missing octets" : "clean"); hdlc_accept_frame(s, fe->hdlc_rx.buf, fe->hdlc_rx.len, !fe->rx_data_missing); } + /*endif*/ fe->hdlc_rx.len = 0; fe->rx_data_missing = FALSE; fe->timeout_rx_samples = fe->samples + ms_to_samples(MID_RX_TIMEOUT); @@ -400,6 +436,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, /* The sender has incorrectly included data in this message. We can safely ignore it, as the bad FCS means we will throw away the whole message, anyway. */ } + /*endif*/ /* Some T.38 implementations send multiple T38_FIELD_HDLC_FCS_BAD messages, in IFP packets with incrementing sequence numbers, which are actually repeats. They get through to this point because of the incrementing sequence numbers. We need to filter them here in a context sensitive manner. */ @@ -408,6 +445,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, span_log(&s->logging, SPAN_LOG_FLOW, "Type %s - CRC bad (%s)\n", (fe->hdlc_rx.len >= 3) ? t30_frametype(fe->hdlc_rx.buf[2]) : "???", (fe->rx_data_missing) ? "missing octets" : "clean"); hdlc_accept_frame(s, fe->hdlc_rx.buf, fe->hdlc_rx.len, FALSE); } + /*endif*/ fe->hdlc_rx.len = 0; fe->rx_data_missing = FALSE; fe->timeout_rx_samples = fe->samples + ms_to_samples(MID_RX_TIMEOUT); @@ -419,6 +457,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, /* The sender has incorrectly included data in this message. It is unclear what we should do with it, to maximise tolerance of buggy implementations. */ } + /*endif*/ /* Some T.38 implementations send multiple T38_FIELD_HDLC_FCS_OK_SIG_END messages, in IFP packets with incrementing sequence numbers, which are actually repeats. They get through to this point because of the incrementing sequence numbers. We need to filter them here in a context sensitive manner. */ @@ -428,6 +467,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, hdlc_accept_frame(s, fe->hdlc_rx.buf, fe->hdlc_rx.len, !fe->rx_data_missing); hdlc_accept_frame(s, NULL, SIG_STATUS_CARRIER_DOWN, TRUE); } + /*endif*/ fe->hdlc_rx.len = 0; fe->rx_data_missing = FALSE; /* Treat this like a no signal indicator has occurred, so if the no signal indicator is missing, we are still OK */ @@ -440,6 +480,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, /* The sender has incorrectly included data in this message. We can safely ignore it, as the bad FCS means we will throw away the whole message, anyway. */ } + /*endif*/ /* Some T.38 implementations send multiple T38_FIELD_HDLC_FCS_BAD_SIG_END messages, in IFP packets with incrementing sequence numbers, which are actually repeats. They get through to this point because of the incrementing sequence numbers. We need to filter them here in a context sensitive manner. */ @@ -449,6 +490,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, hdlc_accept_frame(s, fe->hdlc_rx.buf, fe->hdlc_rx.len, FALSE); hdlc_accept_frame(s, NULL, SIG_STATUS_CARRIER_DOWN, TRUE); } + /*endif*/ fe->hdlc_rx.len = 0; fe->rx_data_missing = FALSE; /* Treat this like a no signal indicator has occurred, so if the no signal indicator is missing, we are still OK */ @@ -461,6 +503,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, /* The sender has incorrectly included data in this message, but there seems nothing meaningful it could be. There could not be an FCS good/bad report beyond this. */ } + /*endif*/ /* Some T.38 implementations send multiple T38_FIELD_HDLC_SIG_END messages, in IFP packets with incrementing sequence numbers, which are actually repeats. They get through to this point because of the incrementing sequence numbers. We need to filter them here in a context sensitive manner. */ @@ -476,6 +519,7 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, fe->rx_data_missing = FALSE; front_end_status(s, T30_FRONT_END_RECEIVE_COMPLETE); } + /*endif*/ /* Treat this like a no signal indicator has occurred, so if the no signal indicator is missing, we are still OK */ fake_rx_indicator(t, s, T38_IND_NO_SIGNAL); break; @@ -485,11 +529,13 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, t30_non_ecm_put_bit(&s->t30, SIG_STATUS_TRAINING_SUCCEEDED); fe->rx_signal_present = TRUE; } + /*endif*/ if (len > 0) { bit_reverse(buf2, buf, len); t30_non_ecm_put_chunk(&s->t30, buf2, len); } + /*endif*/ fe->timeout_rx_samples = fe->samples + ms_to_samples(MID_RX_TIMEOUT); break; case T38_FIELD_T4_NON_ECM_SIG_END: @@ -505,15 +551,18 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type, t30_non_ecm_put_bit(&s->t30, SIG_STATUS_TRAINING_SUCCEEDED); fe->rx_signal_present = TRUE; } + /*endif*/ bit_reverse(buf2, buf, len); t30_non_ecm_put_chunk(&s->t30, buf2, len); } + /*endif*/ /* WORKAROUND: At least some Mediatrix boxes have a bug, where they can send HDLC signal end where they should send non-ECM signal end. It is possible they also do the opposite. We need to tolerate this, so we use the generic receive complete indication, rather than the specific non-ECM carrier down. */ front_end_status(s, T30_FRONT_END_RECEIVE_COMPLETE); } + /*endif*/ fe->rx_signal_present = FALSE; /* Treat this like a no signal indicator has occurred, so if the no signal indicator is missing, we are still OK */ fake_rx_indicator(t, s, T38_IND_NO_SIGNAL); @@ -542,6 +591,7 @@ static void send_hdlc(void *user_data, const uint8_t *msg, int len) s->t38_fe.hdlc_tx.len = len; s->t38_fe.hdlc_tx.ptr = 0; } + /*endif*/ } /*- End of function --------------------------------------------------------*/ @@ -549,6 +599,7 @@ static __inline__ int bits_to_us(t38_terminal_state_t *s, int bits) { if (s->t38_fe.ms_per_tx_chunk == 0 || s->t38_fe.tx_bit_rate == 0) return 0; + /*endif*/ return bits*1000000/s->t38_fe.tx_bit_rate; } /*- End of function --------------------------------------------------------*/ @@ -562,11 +613,49 @@ static void set_octets_per_data_packet(t38_terminal_state_t *s, int bit_rate) /* Make sure we have a positive number (i.e. we didn't truncate to zero). */ if (s->t38_fe.octets_per_data_packet < 1) s->t38_fe.octets_per_data_packet = 1; + /*endif*/ } else { s->t38_fe.octets_per_data_packet = MAX_OCTETS_PER_UNPACED_CHUNK; } + /*endif*/ +} +/*- End of function --------------------------------------------------------*/ + +static int set_no_signal(t38_terminal_state_t *s) +{ + int delay; + + if ((s->t38_fe.chunking_modes & T38_CHUNKING_SEND_REGULAR_INDICATORS)) + { + t38_core_send_indicator(&s->t38_fe.t38, 0x100 | T38_IND_NO_SIGNAL); + s->t38_fe.timed_step = T38_TIMED_STEP_NO_SIGNAL; +#if 0 + if ((s->t38_fe.chunking_modes & T38_CHUNKING_SEND_2S_REGULAR_INDICATORS)) + s->t38_fe.timeout_tx_samples = s->t38_fe.next_tx_samples + us_to_samples(2000000); + else + s->t38_fe.timeout_tx_samples = 0; + /*endif*/ +#endif + return s->t38_fe.ms_per_tx_chunk*1000; + } + /*endif*/ + delay = t38_core_send_indicator(&s->t38_fe.t38, T38_IND_NO_SIGNAL); + s->t38_fe.timed_step = T38_TIMED_STEP_NONE; + return delay; +} +/*- End of function --------------------------------------------------------*/ + +static int stream_no_signal(t38_terminal_state_t *s) +{ + t38_core_send_indicator(&s->t38_fe.t38, 0x100 | T38_IND_NO_SIGNAL); +#if 0 + if (s->t38_fe.timeout_tx_samples && s->t38_fe.next_tx_samples >= s->t38_fe.timeout_tx_samples) + s->t38_fe.timed_step = T38_TIMED_STEP_NONE; + /*endif*/ +#endif + return s->t38_fe.ms_per_tx_chunk*1000; } /*- End of function --------------------------------------------------------*/ @@ -588,11 +677,27 @@ static int stream_non_ecm(t38_terminal_state_t *s) delay = t38_core_send_indicator(&fe->t38, T38_IND_NO_SIGNAL); else delay = 75000; + /*endif*/ fe->timed_step = T38_TIMED_STEP_NON_ECM_MODEM_2; +#if 0 + fe->timeout_tx_samples = fe->next_tx_samples + + us_to_samples(t38_core_send_training_delay(&fe->t38, fe->next_tx_indicator)); +#endif fe->next_tx_samples = fe->samples; break; case T38_TIMED_STEP_NON_ECM_MODEM_2: /* Switch on a fast modem, and give the training time to complete */ +#if 0 + if ((s->t38_fe.chunking_modes & T38_CHUNKING_SEND_REGULAR_INDICATORS)) + { + delay = t38_core_send_indicator(&fe->t38, 0x100 | fe->next_tx_indicator); + if (fe->next_tx_samples >= fe->timeout_tx_samples) + fe->timed_step = T38_TIMED_STEP_NON_ECM_MODEM_3; + /*endif*/ + return fe->ms_per_tx_chunk*1000; + } + /*endif*/ +#endif delay = t38_core_send_indicator(&fe->t38, fe->next_tx_indicator); fe->timed_step = T38_TIMED_STEP_NON_ECM_MODEM_3; break; @@ -605,6 +710,7 @@ static int stream_non_ecm(t38_terminal_state_t *s) len = t30_non_ecm_get_chunk(&s->t30, buf, fe->octets_per_data_packet); if (len > 0) bit_reverse(buf, buf, len); + /*endif*/ if (len < fe->octets_per_data_packet) { /* That's the end of the image data. */ @@ -630,7 +736,9 @@ static int stream_non_ecm(t38_terminal_state_t *s) delay = 0; break; } + /*endif*/ } + /*endif*/ t38_core_send_data(&fe->t38, fe->current_tx_data_type, T38_FIELD_T4_NON_ECM_DATA, buf, len, T38_PACKET_CATEGORY_IMAGE_DATA); delay = bits_to_us(s, 8*len); break; @@ -649,9 +757,11 @@ static int stream_non_ecm(t38_terminal_state_t *s) delay = bits_to_us(s, 8*len); if (s->t38_fe.ms_per_tx_chunk) delay += 60000; + /*endif*/ front_end_status(s, T30_FRONT_END_SEND_STEP_COMPLETE); break; } + /*endif*/ memset(buf, 0, len); t38_core_send_data(&fe->t38, fe->current_tx_data_type, T38_FIELD_T4_NON_ECM_DATA, buf, len, T38_PACKET_CATEGORY_IMAGE_DATA); delay = bits_to_us(s, 8*len); @@ -659,11 +769,11 @@ static int stream_non_ecm(t38_terminal_state_t *s) case T38_TIMED_STEP_NON_ECM_MODEM_5: /* This should not be needed, since the message above indicates the end of the signal, but it seems like it can improve compatibility with quirky implementations. */ - delay = t38_core_send_indicator(&fe->t38, T38_IND_NO_SIGNAL); - fe->timed_step = T38_TIMED_STEP_NONE; - return delay; + return set_no_signal(s); } + /*endswitch*/ } + /*endfor*/ return delay; } /*- End of function --------------------------------------------------------*/ @@ -689,13 +799,31 @@ static int stream_hdlc(t38_terminal_state_t *s) delay = t38_core_send_indicator(&fe->t38, T38_IND_NO_SIGNAL); else delay = 75000; + /*endif*/ fe->timed_step = T38_TIMED_STEP_HDLC_MODEM_2; +#if 0 + fe->timeout_tx_samples = fe->next_tx_samples + + us_to_samples(t38_core_send_training_delay(&fe->t38, fe->next_tx_indicator)) + + us_to_samples(t38_core_send_flags_delay(&fe->t38, fe->next_tx_indicator)) + + us_to_samples(delay); +#endif fe->next_tx_samples = fe->samples; break; case T38_TIMED_STEP_HDLC_MODEM_2: /* Send HDLC preambling */ - delay = t38_core_send_indicator(&fe->t38, fe->next_tx_indicator); - delay += t38_core_send_flags_delay(&fe->t38, fe->next_tx_indicator); +#if 0 + if ((s->t38_fe.chunking_modes & T38_CHUNKING_SEND_REGULAR_INDICATORS)) + { + delay = t38_core_send_indicator(&fe->t38, 0x100 | fe->next_tx_indicator); + if (fe->next_tx_samples >= fe->timeout_tx_samples) + fe->timed_step = T38_TIMED_STEP_HDLC_MODEM_3; + /*endif*/ + return fe->ms_per_tx_chunk*1000; + } + /*endif*/ +#endif + delay = t38_core_send_indicator(&fe->t38, fe->next_tx_indicator) + + t38_core_send_flags_delay(&fe->t38, fe->next_tx_indicator); fe->timed_step = T38_TIMED_STEP_HDLC_MODEM_3; break; case T38_TIMED_STEP_HDLC_MODEM_3: @@ -731,6 +859,7 @@ static int stream_hdlc(t38_terminal_state_t *s) delay = bits_to_us(s, i*8 + fe->hdlc_tx.extra_bits); if (s->t38_fe.ms_per_tx_chunk) delay += 100000; + /*endif*/ front_end_status(s, T30_FRONT_END_SEND_STEP_COMPLETE); } else @@ -743,8 +872,10 @@ static int stream_hdlc(t38_terminal_state_t *s) fe->timed_step = T38_TIMED_STEP_HDLC_MODEM_3; delay = bits_to_us(s, i*8 + fe->hdlc_tx.extra_bits); } + /*endif*/ break; } + /*endif*/ category = (s->t38_fe.current_tx_data_type == T38_DATA_V21) ? T38_PACKET_CATEGORY_CONTROL_DATA : T38_PACKET_CATEGORY_IMAGE_DATA; t38_core_send_data(&fe->t38, fe->current_tx_data_type, T38_FIELD_HDLC_DATA, &fe->hdlc_tx.buf[fe->hdlc_tx.ptr], i, category); fe->timed_step = T38_TIMED_STEP_HDLC_MODEM_4; @@ -756,6 +887,7 @@ static int stream_hdlc(t38_terminal_state_t *s) t38_core_send_data(&fe->t38, fe->current_tx_data_type, T38_FIELD_HDLC_DATA, &fe->hdlc_tx.buf[fe->hdlc_tx.ptr], i, category); fe->hdlc_tx.ptr += i; } + /*endif*/ delay = bits_to_us(s, i*8); break; case T38_TIMED_STEP_HDLC_MODEM_4: @@ -776,15 +908,18 @@ static int stream_hdlc(t38_terminal_state_t *s) delay = bits_to_us(s, fe->hdlc_tx.extra_bits); if (s->t38_fe.ms_per_tx_chunk) delay += 100000; + /*endif*/ front_end_status(s, T30_FRONT_END_SEND_STEP_COMPLETE); break; } + /*endif*/ if (fe->hdlc_tx.len == 0) { /* Now, how did we get here? We have finished a frame, but have no new frame to send, and no end of transmission condition. */ span_log(&s->logging, SPAN_LOG_FLOW, "No new frame or end transmission condition.\n"); } + /*endif*/ /* Finish the current frame off, and prepare for the next one. */ category = (s->t38_fe.current_tx_data_type == T38_DATA_V21) ? T38_PACKET_CATEGORY_CONTROL_DATA : T38_PACKET_CATEGORY_IMAGE_DATA; t38_core_send_data(&fe->t38, previous, T38_FIELD_HDLC_FCS_OK, NULL, 0, category); @@ -795,11 +930,11 @@ static int stream_hdlc(t38_terminal_state_t *s) case T38_TIMED_STEP_HDLC_MODEM_5: /* Note that some boxes do not like us sending a T38_FIELD_HDLC_SIG_END at this point. A T38_IND_NO_SIGNAL should always be OK. */ - delay = t38_core_send_indicator(&fe->t38, T38_IND_NO_SIGNAL); - fe->timed_step = T38_TIMED_STEP_NONE; - return delay; + return set_no_signal(s); } + /*endswitch*/ } + /*endfor*/ return delay; } /*- End of function --------------------------------------------------------*/ @@ -836,7 +971,9 @@ static int stream_ced(t38_terminal_state_t *s) front_end_status(s, T30_FRONT_END_SEND_STEP_COMPLETE); return 0; } + /*endswitch*/ } + /*endfor*/ return delay; } /*- End of function --------------------------------------------------------*/ @@ -870,7 +1007,9 @@ static int stream_cng(t38_terminal_state_t *s) fe->current_tx_data_type = T38_DATA_NONE; return delay; } + /*endswitch*/ } + /*endfor*/ return delay; } /*- End of function --------------------------------------------------------*/ @@ -883,6 +1022,7 @@ SPAN_DECLARE(int) t38_terminal_send_timeout(t38_terminal_state_t *s, int samples fe = &s->t38_fe; if (fe->current_rx_type == T30_MODEM_DONE || fe->current_tx_type == T30_MODEM_DONE) return TRUE; + /*endif*/ fe->samples += samples; t30_timer_update(&s->t30, samples); @@ -892,15 +1032,18 @@ SPAN_DECLARE(int) t38_terminal_send_timeout(t38_terminal_state_t *s, int samples fe->timeout_rx_samples = 0; front_end_status(s, T30_FRONT_END_RECEIVE_COMPLETE); } + /*endif*/ if (fe->timed_step == T38_TIMED_STEP_NONE) return FALSE; + /*endif*/ /* Wait until the right time comes along, unless we are working in "no delays" mode, while talking to an IAF terminal. */ if (fe->ms_per_tx_chunk && fe->samples < fe->next_tx_samples) return FALSE; + /*endif*/ /* Its time to send something */ delay = 0; - switch (fe->timed_step & 0xFFF0) + switch ((fe->timed_step & 0xFFF0)) { case T38_TIMED_STEP_NON_ECM_MODEM: delay = stream_non_ecm(s); @@ -919,7 +1062,11 @@ SPAN_DECLARE(int) t38_terminal_send_timeout(t38_terminal_state_t *s, int samples fe->timed_step = T38_TIMED_STEP_NONE; front_end_status(s, T30_FRONT_END_SEND_STEP_COMPLETE); break; + case T38_TIMED_STEP_NO_SIGNAL: + delay = stream_no_signal(s); + break; } + /*endswitch*/ fe->next_tx_samples += us_to_samples(delay); return FALSE; } @@ -946,11 +1093,13 @@ static void start_tx(t38_terminal_front_end_state_t *fe, int use_hdlc) fe->timed_step = (use_hdlc) ? T38_TIMED_STEP_HDLC_MODEM : T38_TIMED_STEP_NON_ECM_MODEM; if (fe->next_tx_samples < fe->samples) fe->next_tx_samples = fe->samples; + /*endif*/ } else { /* Start the fast streaming transmission process. */ } + /*endif*/ } /*- End of function --------------------------------------------------------*/ @@ -964,6 +1113,7 @@ static void set_tx_type(void *user_data, int type, int bit_rate, int short_train span_log(&s->logging, SPAN_LOG_FLOW, "Set tx type %d\n", type); if (fe->current_tx_type == type) return; + /*endif*/ set_octets_per_data_packet(s, bit_rate); switch (type) @@ -972,6 +1122,7 @@ static void set_tx_type(void *user_data, int type, int bit_rate, int short_train /* If a "no signal" indicator is waiting to be played out, don't disturb it. */ if (fe->timed_step != T38_TIMED_STEP_NON_ECM_MODEM_5 && fe->timed_step != T38_TIMED_STEP_HDLC_MODEM_5) fe->timed_step = T38_TIMED_STEP_NONE; + /*endif*/ fe->current_tx_data_type = T38_DATA_NONE; break; case T30_MODEM_PAUSE: @@ -1006,6 +1157,7 @@ static void set_tx_type(void *user_data, int type, int bit_rate, int short_train fe->current_tx_data_type = T38_DATA_V27TER_4800; break; } + /*endswitch*/ start_tx(fe, use_hdlc); break; case T30_MODEM_V29: @@ -1020,6 +1172,7 @@ static void set_tx_type(void *user_data, int type, int bit_rate, int short_train fe->current_tx_data_type = T38_DATA_V29_9600; break; } + /*endswitch*/ start_tx(fe, use_hdlc); break; case T30_MODEM_V17: @@ -1042,6 +1195,7 @@ static void set_tx_type(void *user_data, int type, int bit_rate, int short_train fe->current_tx_data_type = T38_DATA_V17_14400; break; } + /*endswitch*/ start_tx(fe, use_hdlc); break; case T30_MODEM_DONE: @@ -1050,13 +1204,14 @@ static void set_tx_type(void *user_data, int type, int bit_rate, int short_train fe->current_tx_data_type = T38_DATA_NONE; break; } + /*endswitch*/ fe->current_tx_type = type; } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(void) t38_terminal_set_config(t38_terminal_state_t *s, int without_pacing) +SPAN_DECLARE(void) t38_terminal_set_config(t38_terminal_state_t *s, int config) { - if (without_pacing) + if ((config & T38_TERMINAL_OPTION_NO_PACING)) { /* Continuous streaming mode, as used for TPKT over TCP transport */ /* Inhibit indicator packets */ @@ -1066,6 +1221,7 @@ SPAN_DECLARE(void) t38_terminal_set_config(t38_terminal_state_t *s, int without_ t38_set_redundancy_control(&s->t38_fe.t38, T38_PACKET_CATEGORY_IMAGE_DATA, 1); t38_set_redundancy_control(&s->t38_fe.t38, T38_PACKET_CATEGORY_IMAGE_DATA_END, 1); s->t38_fe.ms_per_tx_chunk = 0; + s->t38_fe.chunking_modes &= ~T38_CHUNKING_SEND_REGULAR_INDICATORS; } else { @@ -1075,8 +1231,19 @@ SPAN_DECLARE(void) t38_terminal_set_config(t38_terminal_state_t *s, int without_ t38_set_redundancy_control(&s->t38_fe.t38, T38_PACKET_CATEGORY_CONTROL_DATA_END, DATA_END_TX_COUNT); t38_set_redundancy_control(&s->t38_fe.t38, T38_PACKET_CATEGORY_IMAGE_DATA, DATA_TX_COUNT); t38_set_redundancy_control(&s->t38_fe.t38, T38_PACKET_CATEGORY_IMAGE_DATA_END, DATA_END_TX_COUNT); - s->t38_fe.ms_per_tx_chunk = MS_PER_TX_CHUNK; + s->t38_fe.ms_per_tx_chunk = DEFAULT_MS_PER_TX_CHUNK; + if ((config & (T38_TERMINAL_OPTION_REGULAR_INDICATORS | T38_TERMINAL_OPTION_2S_REPEATING_INDICATORS))) + s->t38_fe.chunking_modes |= T38_CHUNKING_SEND_REGULAR_INDICATORS; + else + s->t38_fe.chunking_modes &= ~T38_CHUNKING_SEND_REGULAR_INDICATORS; + /*endif*/ + if ((config & T38_TERMINAL_OPTION_2S_REPEATING_INDICATORS)) + s->t38_fe.chunking_modes |= T38_CHUNKING_SEND_2S_REGULAR_INDICATORS; + else + s->t38_fe.chunking_modes &= ~T38_CHUNKING_SEND_2S_REGULAR_INDICATORS; + /*endif*/ } + /*endif*/ set_octets_per_data_packet(s, 300); } /*- End of function --------------------------------------------------------*/ @@ -1087,6 +1254,7 @@ SPAN_DECLARE(void) t38_terminal_set_tep_mode(t38_terminal_state_t *s, int use_te s->t38_fe.chunking_modes |= T38_CHUNKING_ALLOW_TEP_TIME; else s->t38_fe.chunking_modes &= ~T38_CHUNKING_ALLOW_TEP_TIME; + /*endif*/ t38_set_tep_handling(&s->t38_fe.t38, use_tep); } /*- End of function --------------------------------------------------------*/ @@ -1097,6 +1265,7 @@ SPAN_DECLARE(void) t38_terminal_set_fill_bit_removal(t38_terminal_state_t *s, in s->t38_fe.iaf |= T30_IAF_MODE_NO_FILL_BITS; else s->t38_fe.iaf &= ~T30_IAF_MODE_NO_FILL_BITS; + /*endif*/ t30_set_iaf_mode(&s->t30, s->t38_fe.iaf); } /*- End of function --------------------------------------------------------*/ @@ -1113,6 +1282,27 @@ SPAN_DECLARE(t38_core_state_t *) t38_terminal_get_t38_core_state(t38_terminal_st } /*- End of function --------------------------------------------------------*/ +static int t38_terminal_t38_fe_restart(t38_terminal_state_t *t) +{ + t38_terminal_front_end_state_t *s; + + s = &t->t38_fe; + t38_core_restart(&s->t38); + + s->rx_signal_present = FALSE; + s->timed_step = T38_TIMED_STEP_NONE; + //s->iaf = T30_IAF_MODE_T37 | T30_IAF_MODE_T38; + s->iaf = T30_IAF_MODE_T38; + + s->current_tx_data_type = T38_DATA_NONE; + s->next_tx_samples = 0; + + s->hdlc_tx.ptr = 0; + + return 0; +} +/*- End of function --------------------------------------------------------*/ + static int t38_terminal_t38_fe_init(t38_terminal_state_t *t, t38_tx_packet_handler_t *tx_packet_handler, void *tx_packet_user_data) @@ -1150,6 +1340,15 @@ SPAN_DECLARE(logging_state_t *) t38_terminal_get_logging_state(t38_terminal_stat } /*- End of function --------------------------------------------------------*/ +SPAN_DECLARE(int) t38_terminal_restart(t38_terminal_state_t *s, + int calling_party) +{ + t38_terminal_t38_fe_restart(s); + t30_restart(&s->t30); + return 0; +} +/*- End of function --------------------------------------------------------*/ + SPAN_DECLARE(t38_terminal_state_t *) t38_terminal_init(t38_terminal_state_t *s, int calling_party, t38_tx_packet_handler_t *tx_packet_handler, @@ -1157,19 +1356,22 @@ SPAN_DECLARE(t38_terminal_state_t *) t38_terminal_init(t38_terminal_state_t *s, { if (tx_packet_handler == NULL) return NULL; + /*endif*/ if (s == NULL) { if ((s = (t38_terminal_state_t *) malloc(sizeof(*s))) == NULL) return NULL; + /*endif*/ } + /*endif*/ memset(s, 0, sizeof(*s)); span_log_init(&s->logging, SPAN_LOG_NONE, NULL); span_log_set_protocol(&s->logging, "T.38T"); t38_terminal_t38_fe_init(s, tx_packet_handler, tx_packet_user_data); - t38_terminal_set_config(s, FALSE); + t38_terminal_set_config(s, 0); t30_init(&s->t30, calling_party, diff --git a/libs/spandsp/src/t4_rx.c b/libs/spandsp/src/t4_rx.c index b5321a5540..dfdf914804 100644 --- a/libs/spandsp/src/t4_rx.c +++ b/libs/spandsp/src/t4_rx.c @@ -2,7 +2,7 @@ /* * SpanDSP - a series of DSP components for telephony * - * t4_rx.c - ITU T.4 FAX receive processing + * t4_rx.c - ITU T.4 FAX image receive processing * * Written by Steve Underwood * @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t4_rx.c,v 1.12.2.8 2009/12/21 17:18:39 steveu Exp $ */ /* @@ -86,9 +84,21 @@ #include "spandsp/async.h" #include "spandsp/t4_rx.h" #include "spandsp/t4_tx.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/t81_t82_arith_coding.h" +#include "spandsp/t85.h" +#endif +#include "spandsp/t4_t6_decode.h" +#include "spandsp/t4_t6_encode.h" #include "spandsp/version.h" #include "spandsp/private/logging.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/private/t81_t82_arith_coding.h" +#include "spandsp/private/t85.h" +#endif +#include "spandsp/private/t4_t6_decode.h" +#include "spandsp/private/t4_t6_encode.h" #include "spandsp/private/t4_rx.h" #include "spandsp/private/t4_tx.h" @@ -102,6 +112,8 @@ /*! The number of EOLs to check at the end of a T.6 page */ #define EOLS_TO_END_T6_RX_PAGE 2 +#include "t4_t6_decode_states.h" + #if defined(T4_STATE_DEBUGGING) static void STATE_TRACE(const char *format, ...) { @@ -116,19 +128,6 @@ static void STATE_TRACE(const char *format, ...) #define STATE_TRACE(...) /**/ #endif -/*! T.4 run length table entry */ -typedef struct -{ - /*! Length of T.4 code, in bits */ - uint16_t length; - /*! T.4 code */ - uint16_t code; - /*! Run length, in bits */ - int16_t run_length; -} t4_run_table_entry_t; - -#include "t4_t6_decode_states.h" - #if defined(HAVE_LIBTIFF) static int set_tiff_directory_info(t4_state_t *s) { @@ -1195,7 +1194,7 @@ SPAN_DECLARE(void) t4_rx_set_model(t4_state_t *s, const char *model) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(void) t4_get_transfer_statistics(t4_state_t *s, t4_stats_t *t) +SPAN_DECLARE(void) t4_rx_get_transfer_statistics(t4_state_t *s, t4_stats_t *t) { t->pages_transferred = s->current_page - s->tiff.start_page; t->pages_in_file = s->tiff.pages_in_file; @@ -1214,12 +1213,26 @@ SPAN_DECLARE(const char *) t4_encoding_to_str(int encoding) { switch (encoding) { + case T4_COMPRESSION_NONE: + return "None"; case T4_COMPRESSION_ITU_T4_1D: return "T.4 1-D"; case T4_COMPRESSION_ITU_T4_2D: return "T.4 2-D"; case T4_COMPRESSION_ITU_T6: return "T.6"; + case T4_COMPRESSION_ITU_T85: + return "T.85"; + case T4_COMPRESSION_ITU_T85_L0: + return "T.85(L0)"; + case T4_COMPRESSION_ITU_T43: + return "T.43"; + case T4_COMPRESSION_ITU_T45: + return "T.45"; + case T4_COMPRESSION_ITU_T81: + return "T.81"; + case T4_COMPRESSION_ITU_SYCC_T81: + return "sYCC T.81"; } return "???"; } diff --git a/libs/spandsp/src/t4_t6_decode_states.h b/libs/spandsp/src/t4_t6_decode_states.h index 71619e5d6a..daf0e1a711 100644 --- a/libs/spandsp/src/t4_t6_decode_states.h +++ b/libs/spandsp/src/t4_t6_decode_states.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t4_t6_decode_states.h,v 1.1.2.4 2009/12/19 10:21:43 steveu Exp $ */ /* Legitimate runs of zero bits which are the tail end of one code diff --git a/libs/spandsp/src/t4_tx.c b/libs/spandsp/src/t4_tx.c index 4efb3ad449..55f15477f4 100644 --- a/libs/spandsp/src/t4_tx.c +++ b/libs/spandsp/src/t4_tx.c @@ -2,7 +2,7 @@ /* * SpanDSP - a series of DSP components for telephony * - * t4_tx.c - ITU T.4 FAX transmit processing + * t4_tx.c - ITU T.4 FAX image transmit processing * * Written by Steve Underwood * @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t4_tx.c,v 1.13.2.9 2009/12/21 17:18:40 steveu Exp $ */ /* @@ -81,11 +79,23 @@ #include "spandsp/logging.h" #include "spandsp/bit_operations.h" #include "spandsp/async.h" +#include "spandsp/timezone.h" #include "spandsp/t4_rx.h" #include "spandsp/t4_tx.h" -#include "spandsp/version.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/t81_t82_arith_coding.h" +#include "spandsp/t85.h" +#endif +#include "spandsp/t4_t6_decode.h" +#include "spandsp/t4_t6_encode.h" #include "spandsp/private/logging.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/private/t81_t82_arith_coding.h" +#include "spandsp/private/t85.h" +#endif +#include "spandsp/private/t4_t6_decode.h" +#include "spandsp/private/t4_t6_encode.h" #include "spandsp/private/t4_rx.h" #include "spandsp/private/t4_tx.h" @@ -371,7 +381,10 @@ static void make_header(t4_state_t *s, char *header) }; time(&now); - tm = *localtime(&now); + if (s->tz) + tz_localtime(s->tz, &tm, now); + else + tm = *localtime(&now); snprintf(header, 132, " %2d-%s-%d %02d:%02d %-50s %-21s p.%d", @@ -380,8 +393,8 @@ static void make_header(t4_state_t *s, char *header) tm.tm_year + 1900, tm.tm_hour, tm.tm_min, - s->t4_t6_tx.header_info, - s->tiff.local_ident, + s->header_info, + (s->tiff.local_ident) ? s->tiff.local_ident : "", s->current_page + 1); } /*- End of function --------------------------------------------------------*/ @@ -1321,7 +1334,7 @@ SPAN_DECLARE(int) t4_tx_start_page(t4_state_t *s) s->min_row_bits = INT_MAX; s->max_row_bits = 0; - if (s->t4_t6_tx.header_info && s->t4_t6_tx.header_info[0]) + if (s->header_info && s->header_info[0]) { if (t4_tx_put_fax_header(s)) return -1; @@ -1482,7 +1495,7 @@ SPAN_DECLARE(void) t4_tx_set_tx_encoding(t4_state_t *s, int encoding) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(void) t4_tx_set_min_row_bits(t4_state_t *s, int bits) +SPAN_DECLARE(void) t4_tx_set_min_bits_per_row(t4_state_t *s, int bits) { s->t4_t6_tx.min_bits_per_row = bits; } @@ -1496,7 +1509,13 @@ SPAN_DECLARE(void) t4_tx_set_local_ident(t4_state_t *s, const char *ident) SPAN_DECLARE(void) t4_tx_set_header_info(t4_state_t *s, const char *info) { - s->t4_t6_tx.header_info = (info && info[0]) ? info : NULL; + s->header_info = (info && info[0]) ? info : NULL; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(void) t4_tx_set_header_tz(t4_state_t *s, const char *tzstring) +{ + s->tz = tz_init(s->tz, tzstring); } /*- End of function --------------------------------------------------------*/ @@ -1536,4 +1555,19 @@ SPAN_DECLARE(int) t4_tx_get_current_page_in_file(t4_state_t *s) return s->current_page; } /*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(void) t4_tx_get_transfer_statistics(t4_state_t *s, t4_stats_t *t) +{ + t->pages_transferred = s->current_page - s->tiff.start_page; + t->pages_in_file = s->tiff.pages_in_file; + t->width = s->image_width; + t->length = s->image_length; + t->bad_rows = s->t4_t6_rx.bad_rows; + t->longest_bad_row_run = s->t4_t6_rx.longest_bad_row_run; + t->x_resolution = s->x_resolution; + t->y_resolution = s->y_resolution; + t->encoding = s->line_encoding; + t->line_image_size = s->line_image_size/8; +} +/*- End of function --------------------------------------------------------*/ /*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/testcpuid.c b/libs/spandsp/src/testcpuid.c index c55c349ab9..98c46a0581 100644 --- a/libs/spandsp/src/testcpuid.c +++ b/libs/spandsp/src/testcpuid.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: testcpuid.c,v 1.13 2009/01/05 13:48:31 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/time_scale.c b/libs/spandsp/src/time_scale.c index cd3f7d028a..3a85cae71c 100644 --- a/libs/spandsp/src/time_scale.c +++ b/libs/spandsp/src/time_scale.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: time_scale.c,v 1.30 2009/02/10 13:06:47 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/tone_detect.c b/libs/spandsp/src/tone_detect.c index 7ac1a12dba..2887af51d6 100644 --- a/libs/spandsp/src/tone_detect.c +++ b/libs/spandsp/src/tone_detect.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: tone_detect.c,v 1.53 2009/04/12 09:12:10 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/tone_generate.c b/libs/spandsp/src/tone_generate.c index 4b65610289..437865b3d3 100644 --- a/libs/spandsp/src/tone_generate.c +++ b/libs/spandsp/src/tone_generate.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: tone_generate.c,v 1.56 2010/05/23 14:02:21 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/v17_v32bis_rx_constellation_maps.h b/libs/spandsp/src/v17_v32bis_rx_constellation_maps.h index a84950dcc7..ad9b1fa499 100644 --- a/libs/spandsp/src/v17_v32bis_rx_constellation_maps.h +++ b/libs/spandsp/src/v17_v32bis_rx_constellation_maps.h @@ -23,8 +23,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v17_v32bis_rx_constellation_maps.h,v 1.1.4.1 2009/12/24 16:52:30 steveu Exp $ */ /* The following table maps the 8 soft-decisions associated with every possible point in the diff --git a/libs/spandsp/src/v17_v32bis_tx_constellation_maps.h b/libs/spandsp/src/v17_v32bis_tx_constellation_maps.h index d2a231c233..4abe80d93d 100644 --- a/libs/spandsp/src/v17_v32bis_tx_constellation_maps.h +++ b/libs/spandsp/src/v17_v32bis_tx_constellation_maps.h @@ -23,8 +23,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v17_v32bis_tx_constellation_maps.h,v 1.1.4.1 2009/12/24 16:52:30 steveu Exp $ */ #if defined(SPANDSP_USE_FIXED_POINTx) diff --git a/libs/spandsp/src/v17rx.c b/libs/spandsp/src/v17rx.c index 78311a8a43..974448b46a 100644 --- a/libs/spandsp/src/v17rx.c +++ b/libs/spandsp/src/v17rx.c @@ -289,6 +289,7 @@ static void tune_equalizer(v17_rx_state_t *s, const complexf_t *z, const complex cvec_circular_lmsf(s->eq_buf, s->eq_coeff, V17_EQUALIZER_LEN, s->eq_step, &err); } #endif +/*- End of function --------------------------------------------------------*/ static int descramble(v17_rx_state_t *s, int in_bit) { @@ -1370,8 +1371,8 @@ SPAN_DECLARE(int) v17_rx_restart(v17_rx_state_t *s, int bit_rate, int short_trai #endif } s->last_sample = 0; - span_log(&s->logging, SPAN_LOG_FLOW, "Phase rates %f %f\n", dds_frequencyf(s->carrier_phase_rate), dds_frequencyf(s->carrier_phase_rate_save)); span_log(&s->logging, SPAN_LOG_FLOW, "Gains %f %f\n", s->agc_scaling_save, s->agc_scaling); + span_log(&s->logging, SPAN_LOG_FLOW, "Phase rates %f %f\n", dds_frequencyf(s->carrier_phase_rate), dds_frequencyf(s->carrier_phase_rate_save)); /* Initialise the working data for symbol timing synchronisation */ #if defined(SPANDSP_USE_FIXED_POINTx) diff --git a/libs/spandsp/src/v17tx.c b/libs/spandsp/src/v17tx.c index 83c6bcce9c..8cce8940e9 100644 --- a/libs/spandsp/src/v17tx.c +++ b/libs/spandsp/src/v17tx.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v17tx.c,v 1.75.4.1 2009/12/24 16:52:30 steveu Exp $ */ /*! \file */ @@ -49,6 +47,8 @@ #include "spandsp/complex.h" #include "spandsp/vector_float.h" #include "spandsp/complex_vector_float.h" +#include "spandsp/vector_int.h" +#include "spandsp/complex_vector_int.h" #include "spandsp/async.h" #include "spandsp/dds.h" #include "spandsp/power_meter.h" @@ -410,7 +410,7 @@ SPAN_DECLARE(int) v17_tx_restart(v17_tx_state_t *s, int bit_rate, int tep, int s /* NB: some modems seem to use 3 instead of 1 for long training */ s->diff = (short_train) ? 0 : 1; #if defined(SPANDSP_USE_FIXED_POINT) - memset(s->rrc_filter, 0, sizeof(s->rrc_filter)); + cvec_zeroi16(s->rrc_filter, sizeof(s->rrc_filter)/sizeof(s->rrc_filter[0])); #else cvec_zerof(s->rrc_filter, sizeof(s->rrc_filter)/sizeof(s->rrc_filter[0])); #endif diff --git a/libs/spandsp/src/v18.c b/libs/spandsp/src/v18.c index 067bd9e251..d84b56edc4 100644 --- a/libs/spandsp/src/v18.c +++ b/libs/spandsp/src/v18.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v18.c,v 1.12 2009/11/04 15:52:06 steveu Exp $ */ /*! \file */ @@ -114,19 +112,19 @@ static const struct dtmf_to_ascii_s dtmf_to_ascii[] = {"##9", 'Z'}, {"##0", ' '}, #if defined(WIN32) - {"#*1", 'X'}, // (Note 1) 111 1011 - {"#*2", 'X'}, // (Note 1) 111 1100 - {"#*3", 'X'}, // (Note 1) 111 1101 - {"#*4", 'X'}, // (Note 1) 101 1011 - {"#*5", 'X'}, // (Note 1) 101 1100 - {"#*6", 'X'}, // (Note 1) 101 1101 + {"#*1", 'X'}, // (Note 1) 111 1011 + {"#*2", 'X'}, // (Note 1) 111 1100 + {"#*3", 'X'}, // (Note 1) 111 1101 + {"#*4", 'X'}, // (Note 1) 101 1011 + {"#*5", 'X'}, // (Note 1) 101 1100 + {"#*6", 'X'}, // (Note 1) 101 1101 #else - {"#*1", 'æ'}, // (Note 1) 111 1011 - {"#*2", 'ø'}, // (Note 1) 111 1100 - {"#*3", 'å'}, // (Note 1) 111 1101 - {"#*4", 'Æ'}, // (Note 1) 101 1011 - {"#*5", 'Ø'}, // (Note 1) 101 1100 - {"#*6", 'Å'}, // (Note 1) 101 1101 + {"#*1", 0xE6}, // (Note 1) 111 1011 + {"#*2", 0xF8}, // (Note 1) 111 1100 + {"#*3", 0xE5}, // (Note 1) 111 1101 + {"#*4", 0xC6}, // (Note 1) 101 1011 + {"#*5", 0xD8}, // (Note 1) 101 1100 + {"#*6", 0xC5}, // (Note 1) 101 1101 #endif {"#0", '?'}, {"#1", 'c'}, @@ -221,7 +219,7 @@ static const char *ascii_to_dtmf[128] = "", /* $ */ "**5", /* % */ "**1", /* & >> + */ - "", /* ’ */ + "", /* 0x92 */ "**6", /* ( */ "**7", /* ) */ "#9", /* _ >> . */ @@ -273,12 +271,12 @@ static const char *ascii_to_dtmf[128] = "###8", /* X */ "##*9", /* Y */ "##9", /* Z */ - "#*4", /* Æ (National code) */ - "#*5", /* Ø (National code) */ - "#*6", /* Å (National code) */ + "#*4", /* 0xC6 (National code) */ + "#*5", /* 0xD8 (National code) */ + "#*6", /* 0xC5 (National code) */ "", /* ^ */ "0", /* _ >> SPACE */ - "", /* ’ */ + "", /* 0x92 */ "*1", /* a */ "1", /* b */ "#1", /* c */ @@ -305,9 +303,9 @@ static const char *ascii_to_dtmf[128] = "#8", /* x */ "*9", /* y */ "9", /* z */ - "#*1", /* æ (National code) */ - "#*2", /* ø (National code) */ - "#*3", /* å (National code) */ + "#*1", /* 0xE6 (National code) */ + "#*2", /* 0xF8 (National code) */ + "#*3", /* 0xE5 (National code) */ "0", /* ~ >> SPACE */ "*0" /* DEL >> BACK SPACE */ }; @@ -582,13 +580,7 @@ static int v18_tdd_get_async_byte(void *user_data) s = (v18_state_t *) user_data; if ((ch = queue_read_byte(&s->queue.queue)) >= 0) - { - int space; - int cont; - space = queue_free_space(&s->queue.queue); - cont = queue_contents(&s->queue.queue); return ch; - } if (s->tx_signal_on) { /* The FSK should now be switched off. */ diff --git a/libs/spandsp/src/v22bis_rx.c b/libs/spandsp/src/v22bis_rx.c index fc5e3a9f23..91b009ce85 100644 --- a/libs/spandsp/src/v22bis_rx.c +++ b/libs/spandsp/src/v22bis_rx.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v22bis_rx.c,v 1.69 2009/11/04 15:52:06 steveu Exp $ */ /*! \file */ @@ -57,6 +55,8 @@ #include "spandsp/complex.h" #include "spandsp/vector_float.h" #include "spandsp/complex_vector_float.h" +#include "spandsp/vector_int.h" +#include "spandsp/complex_vector_int.h" #include "spandsp/async.h" #include "spandsp/power_meter.h" #include "spandsp/arctan2.h" @@ -694,7 +694,6 @@ static void process_half_baud(v22bis_state_t *s, const complexf_t *sample) SPAN_DECLARE_NONSTD(int) v22bis_rx(v22bis_state_t *s, const int16_t amp[], int len) { int i; - int j; int step; complexf_t z; complexf_t zz; @@ -708,8 +707,7 @@ SPAN_DECLARE_NONSTD(int) v22bis_rx(v22bis_state_t *s, const int16_t amp[], int l /* Complex bandpass filter the signal, using a pair of FIRs, and RRC coeffs shifted to centre at 1200Hz or 2400Hz. The filters support 12 fractional phase shifts, to permit signal extraction very close to the middle of a symbol. */ - s->rx.rrc_filter[s->rx.rrc_filter_step] = - s->rx.rrc_filter[s->rx.rrc_filter_step + V22BIS_RX_FILTER_STEPS] = amp[i]; + s->rx.rrc_filter[s->rx.rrc_filter_step] = amp[i]; if (++s->rx.rrc_filter_step >= V22BIS_RX_FILTER_STEPS) s->rx.rrc_filter_step = 0; @@ -718,15 +716,19 @@ SPAN_DECLARE_NONSTD(int) v22bis_rx(v22bis_state_t *s, const int16_t amp[], int l own transmitted signal suppressed. */ if (s->calling_party) { - ii = rx_pulseshaper_2400_re[6][0]*s->rx.rrc_filter[s->rx.rrc_filter_step]; - for (j = 1; j < V22BIS_RX_FILTER_STEPS; j++) - ii += rx_pulseshaper_2400_re[6][j]*s->rx.rrc_filter[j + s->rx.rrc_filter_step]; +#if defined(SPANDSP_USE_FIXED_POINT) + ii = vec_circular_dot_prodi16(s->rx.rrc_filter, rx_pulseshaper_2400_re[6], V22BIS_RX_FILTER_STEPS, s->rx.rrc_filter_step); +#else + ii = vec_circular_dot_prodf(s->rx.rrc_filter, rx_pulseshaper_2400_re[6], V22BIS_RX_FILTER_STEPS, s->rx.rrc_filter_step); +#endif } else { - ii = rx_pulseshaper_1200_re[6][0]*s->rx.rrc_filter[s->rx.rrc_filter_step]; - for (j = 1; j < V22BIS_RX_FILTER_STEPS; j++) - ii += rx_pulseshaper_1200_re[6][j]*s->rx.rrc_filter[j + s->rx.rrc_filter_step]; +#if defined(SPANDSP_USE_FIXED_POINT) + ii = vec_circular_dot_prodi16(s->rx.rrc_filter, rx_pulseshaper_1200_re[6], V22BIS_RX_FILTER_STEPS, s->rx.rrc_filter_step); +#else + ii = vec_circular_dot_prodf(s->rx.rrc_filter, rx_pulseshaper_1200_re[6], V22BIS_RX_FILTER_STEPS, s->rx.rrc_filter_step); +#endif } power = power_meter_update(&(s->rx.rx_power), (int16_t) ii); if (s->rx.signal_present) @@ -771,23 +773,23 @@ SPAN_DECLARE_NONSTD(int) v22bis_rx(v22bis_state_t *s, const int16_t amp[], int l s->rx.eq_put_step += PULSESHAPER_COEFF_SETS*40/(3*2); if (s->calling_party) { - ii = rx_pulseshaper_2400_re[step][0]*s->rx.rrc_filter[s->rx.rrc_filter_step]; - qq = rx_pulseshaper_2400_im[step][0]*s->rx.rrc_filter[s->rx.rrc_filter_step]; - for (j = 1; j < V22BIS_RX_FILTER_STEPS; j++) - { - ii += rx_pulseshaper_2400_re[step][j]*s->rx.rrc_filter[j + s->rx.rrc_filter_step]; - qq += rx_pulseshaper_2400_im[step][j]*s->rx.rrc_filter[j + s->rx.rrc_filter_step]; - } +#if defined(SPANDSP_USE_FIXED_POINT) + ii = vec_circular_dot_prodi16(s->rx.rrc_filter, rx_pulseshaper_2400_re[step], V22BIS_RX_FILTER_STEPS, s->rx.rrc_filter_step); + qq = vec_circular_dot_prodi16(s->rx.rrc_filter, rx_pulseshaper_2400_im[step], V22BIS_RX_FILTER_STEPS, s->rx.rrc_filter_step); +#else + ii = vec_circular_dot_prodf(s->rx.rrc_filter, rx_pulseshaper_2400_re[step], V22BIS_RX_FILTER_STEPS, s->rx.rrc_filter_step); + qq = vec_circular_dot_prodf(s->rx.rrc_filter, rx_pulseshaper_2400_im[step], V22BIS_RX_FILTER_STEPS, s->rx.rrc_filter_step); +#endif } else { - ii = rx_pulseshaper_1200_re[step][0]*s->rx.rrc_filter[s->rx.rrc_filter_step]; - qq = rx_pulseshaper_1200_im[step][0]*s->rx.rrc_filter[s->rx.rrc_filter_step]; - for (j = 1; j < V22BIS_RX_FILTER_STEPS; j++) - { - ii += rx_pulseshaper_1200_re[step][j]*s->rx.rrc_filter[j + s->rx.rrc_filter_step]; - qq += rx_pulseshaper_1200_im[step][j]*s->rx.rrc_filter[j + s->rx.rrc_filter_step]; - } +#if defined(SPANDSP_USE_FIXED_POINT) + ii = vec_circular_dot_prodi16(s->rx.rrc_filter, rx_pulseshaper_1200_re[step], V22BIS_RX_FILTER_STEPS, s->rx.rrc_filter_step); + qq = vec_circular_dot_prodi16(s->rx.rrc_filter, rx_pulseshaper_1200_im[step], V22BIS_RX_FILTER_STEPS, s->rx.rrc_filter_step); +#else + ii = vec_circular_dot_prodf(s->rx.rrc_filter, rx_pulseshaper_1200_re[step], V22BIS_RX_FILTER_STEPS, s->rx.rrc_filter_step); + qq = vec_circular_dot_prodf(s->rx.rrc_filter, rx_pulseshaper_1200_im[step], V22BIS_RX_FILTER_STEPS, s->rx.rrc_filter_step); +#endif } sample.re = ii*s->rx.agc_scaling; sample.im = qq*s->rx.agc_scaling; @@ -804,7 +806,7 @@ SPAN_DECLARE_NONSTD(int) v22bis_rx(v22bis_state_t *s, const int16_t amp[], int l } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) v22bis_rx_fillin(v22bis_state_t *s, int len) +SPAN_DECLARE_NONSTD(int) v22bis_rx_fillin(v22bis_state_t *s, int len) { int i; @@ -828,7 +830,11 @@ SPAN_DECLARE(int) v22bis_rx_fillin(v22bis_state_t *s, int len) int v22bis_rx_restart(v22bis_state_t *s) { +#if defined(SPANDSP_USE_FIXED_POINTx) + vec_zeroi16(s->rx.rrc_filter, sizeof(s->rx.rrc_filter)/sizeof(s->rx.rrc_filter[0])); +#else vec_zerof(s->rx.rrc_filter, sizeof(s->rx.rrc_filter)/sizeof(s->rx.rrc_filter[0])); +#endif s->rx.rrc_filter_step = 0; s->rx.scramble_reg = 0; s->rx.scrambler_pattern_count = 0; diff --git a/libs/spandsp/src/v22bis_tx.c b/libs/spandsp/src/v22bis_tx.c index 58a0bd589b..5619e87120 100644 --- a/libs/spandsp/src/v22bis_tx.c +++ b/libs/spandsp/src/v22bis_tx.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v22bis_tx.c,v 1.64 2009/11/04 15:52:06 steveu Exp $ */ /*! \file */ @@ -52,6 +50,8 @@ #include "spandsp/complex.h" #include "spandsp/vector_float.h" #include "spandsp/complex_vector_float.h" +#include "spandsp/vector_int.h" +#include "spandsp/complex_vector_int.h" #include "spandsp/async.h" #include "spandsp/dds.h" #include "spandsp/power_meter.h" @@ -478,7 +478,7 @@ SPAN_DECLARE_NONSTD(int) v22bis_tx(v22bis_state_t *s, int16_t amp[], int len) /* Now create and modulate the carrier */ z = dds_complexf(&(s->tx.carrier_phase), s->tx.carrier_phase_rate); famp = (x.re*z.re - x.im*z.im)*s->tx.gain; - if (s->tx.guard_phase_rate && (s->tx.rrc_filter[s->tx.rrc_filter_step].re != 0.0f || s->tx.rrc_filter[i + s->tx.rrc_filter_step].im != 0.0f)) + if (s->tx.guard_phase_rate && (s->tx.rrc_filter[s->tx.rrc_filter_step].re != 0.0f || s->tx.rrc_filter[s->tx.rrc_filter_step].im != 0.0f)) { /* Add the guard tone */ famp += dds_modf(&(s->tx.guard_phase), s->tx.guard_phase_rate, s->tx.guard_level, 0); @@ -625,7 +625,7 @@ SPAN_DECLARE(int) v22bis_remote_loopback(v22bis_state_t *s, int enable) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) v22bis_current_bit_rate(v22bis_state_t *s) +SPAN_DECLARE(int) v22bis_get_current_bit_rate(v22bis_state_t *s) { return s->negotiated_bit_rate; } diff --git a/libs/spandsp/src/v27ter_rx.c b/libs/spandsp/src/v27ter_rx.c index 96e94c7ac0..8685ef1d77 100644 --- a/libs/spandsp/src/v27ter_rx.c +++ b/libs/spandsp/src/v27ter_rx.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v27ter_rx.c,v 1.131 2009/07/08 15:11:09 steveu Exp $ */ /*! \file */ @@ -99,9 +97,6 @@ /*! The length of training segment 6, in symbols */ #define V27TER_TRAINING_SEG_6_LEN 8 -/*! The length of the equalizer buffer */ -#define V27TER_EQUALIZER_LEN (V27TER_EQUALIZER_PRE_LEN + 1 + V27TER_EQUALIZER_POST_LEN) - enum { TRAINING_STAGE_NORMAL_OPERATION = 0, @@ -220,12 +215,12 @@ static void equalizer_reset(v27ter_rx_state_t *s) /* Start with an equalizer based on everything being perfect. */ #if defined(SPANDSP_USE_FIXED_POINTx) cvec_zeroi16(s->eq_coeff, V27TER_EQUALIZER_LEN); - s->eq_coeff[V27TER_EQUALIZER_PRE_LEN] = complex_seti16(1.414f*FP_FACTOR, 0); + s->eq_coeff[V27TER_EQUALIZER_PRE_LEN + 1] = complex_seti16(1.414f*FP_FACTOR, 0); cvec_zeroi16(s->eq_buf, V27TER_EQUALIZER_LEN); s->eq_delta = 32768.0f*EQUALIZER_DELTA/V27TER_EQUALIZER_LEN); #else cvec_zerof(s->eq_coeff, V27TER_EQUALIZER_LEN); - s->eq_coeff[V27TER_EQUALIZER_PRE_LEN] = complex_setf(1.414f, 0.0f); + s->eq_coeff[V27TER_EQUALIZER_PRE_LEN + 1] = complex_setf(1.414f, 0.0f); cvec_zerof(s->eq_buf, V27TER_EQUALIZER_LEN); s->eq_delta = EQUALIZER_DELTA/V27TER_EQUALIZER_LEN; #endif @@ -485,13 +480,13 @@ static __inline__ void symbol_sync(v27ter_rx_state_t *s) /* This routine adapts the position of the half baud samples entering the equalizer. */ /* Perform a Gardner test for baud alignment */ - p = s->eq_buf[(s->eq_step - 3) & V27TER_EQUALIZER_LEN].re - - s->eq_buf[(s->eq_step - 1) & V27TER_EQUALIZER_LEN].re; - p *= s->eq_buf[(s->eq_step - 2) & V27TER_EQUALIZER_LEN].re; + p = s->eq_buf[(s->eq_step - 3) & (V27TER_EQUALIZER_LEN - 1)].re + - s->eq_buf[(s->eq_step - 1) & (V27TER_EQUALIZER_LEN - 1)].re; + p *= s->eq_buf[(s->eq_step - 2) & (V27TER_EQUALIZER_LEN - 1)].re; - q = s->eq_buf[(s->eq_step - 3) & V27TER_EQUALIZER_LEN].im - - s->eq_buf[(s->eq_step - 1) & V27TER_EQUALIZER_LEN].im; - q *= s->eq_buf[(s->eq_step - 2) & V27TER_EQUALIZER_LEN].im; + q = s->eq_buf[(s->eq_step - 3) & (V27TER_EQUALIZER_LEN - 1)].im + - s->eq_buf[(s->eq_step - 1) & (V27TER_EQUALIZER_LEN - 1)].im; + q *= s->eq_buf[(s->eq_step - 2) & (V27TER_EQUALIZER_LEN - 1)].im; s->gardner_integrate += (p + q > 0.0f) ? s->gardner_step : -s->gardner_step; @@ -706,7 +701,8 @@ static __inline__ void process_half_baud(v27ter_rx_state_t *s, const complexf_t #if defined(SPANDSP_USE_FIXED_POINTx) z1.re = z.re/(float) FP_FACTOR; z1.im = z.im/(float) FP_FACTOR; - zz = complex_subf(&z, target); + zz.re = target->re; + zz.im = target->im; zz = complex_subf(&z1, &zz); s->training_error += powerf(&zz); #else @@ -981,7 +977,7 @@ SPAN_DECLARE_NONSTD(int) v27ter_rx(v27ter_rx_state_t *s, const int16_t amp[], in } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) v27ter_rx_fillin(v27ter_rx_state_t *s, int len) +SPAN_DECLARE_NONSTD(int) v27ter_rx_fillin(v27ter_rx_state_t *s, int len) { int i; diff --git a/libs/spandsp/src/v27ter_tx.c b/libs/spandsp/src/v27ter_tx.c index 1145b75ba6..5f35510231 100644 --- a/libs/spandsp/src/v27ter_tx.c +++ b/libs/spandsp/src/v27ter_tx.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v27ter_tx.c,v 1.76 2009/06/02 16:03:56 steveu Exp $ */ /*! \file */ @@ -49,6 +47,8 @@ #include "spandsp/complex.h" #include "spandsp/vector_float.h" #include "spandsp/complex_vector_float.h" +#include "spandsp/vector_int.h" +#include "spandsp/complex_vector_int.h" #include "spandsp/async.h" #include "spandsp/dds.h" #include "spandsp/power_meter.h" @@ -393,7 +393,7 @@ SPAN_DECLARE(int) v27ter_tx_restart(v27ter_tx_state_t *s, int bit_rate, int tep) return -1; s->bit_rate = bit_rate; #if defined(SPANDSP_USE_FIXED_POINT) - memset(s->rrc_filter, 0, sizeof(s->rrc_filter)); + cvec_zeroi16(s->rrc_filter, sizeof(s->rrc_filter)/sizeof(s->rrc_filter[0])); #else cvec_zerof(s->rrc_filter, sizeof(s->rrc_filter)/sizeof(s->rrc_filter[0])); #endif diff --git a/libs/spandsp/src/v29rx.c b/libs/spandsp/src/v29rx.c index ff4dc95570..17ddada9e8 100644 --- a/libs/spandsp/src/v29rx.c +++ b/libs/spandsp/src/v29rx.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v29rx.c,v 1.167.4.5 2009/12/28 12:20:47 steveu Exp $ */ /*! \file */ @@ -89,9 +87,6 @@ /*! The length of training segment 4, in symbols */ #define V29_TRAINING_SEG_4_LEN 48 -/*! The length of the equalizer buffer */ -#define V29_EQUALIZER_LEN (V29_EQUALIZER_PRE_LEN + 1 + V29_EQUALIZER_POST_LEN) - enum { TRAINING_STAGE_NORMAL_OPERATION = 0, @@ -233,12 +228,12 @@ static void equalizer_reset(v29_rx_state_t *s) /* Start with an equalizer based on everything being perfect */ #if defined(SPANDSP_USE_FIXED_POINT) cvec_zeroi16(s->eq_coeff, V29_EQUALIZER_LEN); - s->eq_coeff[V29_EQUALIZER_POST_LEN] = complex_seti16(3*FP_FACTOR, 0*FP_FACTOR); + s->eq_coeff[V29_EQUALIZER_PRE_LEN] = complex_seti16(3*FP_FACTOR, 0*FP_FACTOR); cvec_zeroi16(s->eq_buf, V29_EQUALIZER_LEN); s->eq_delta = 32768.0f*EQUALIZER_DELTA/V29_EQUALIZER_LEN; #else cvec_zerof(s->eq_coeff, V29_EQUALIZER_LEN); - s->eq_coeff[V29_EQUALIZER_POST_LEN] = complex_setf(3.0f, 0.0f); + s->eq_coeff[V29_EQUALIZER_PRE_LEN] = complex_setf(3.0f, 0.0f); cvec_zerof(s->eq_buf, V29_EQUALIZER_LEN); s->eq_delta = EQUALIZER_DELTA/V29_EQUALIZER_LEN; #endif @@ -386,7 +381,7 @@ static __inline__ void put_bit(v29_rx_state_t *s, int bit) bit &= 1; /* Descramble the bit */ - out_bit = (bit ^ (s->scramble_reg >> 17) ^ (s->scramble_reg >> 22)) & 1; + out_bit = (bit ^ (s->scramble_reg >> (18 - 1)) ^ (s->scramble_reg >> (23 - 1))) & 1; s->scramble_reg = (s->scramble_reg << 1) | bit; /* We need to strip the last part of the training - the test period of all 1s - @@ -499,7 +494,7 @@ static __inline__ void symbol_sync(v29_rx_state_t *s) Passband Timing Recovery in an All-Digital Modem Receiver IEEE TRANSACTIONS ON COMMUNICATIONS, VOL. COM-26, NO. 5, MAY 1978 */ - /* This is slightly rearranged for figure 3b of the Godard paper, as this saves a couple of + /* This is slightly rearranged from figure 3b of the Godard paper, as this saves a couple of maths operations */ #if defined(SPANDSP_USE_FIXED_POINT) /* TODO: The scalings used here need more thorough evaluation, to see if overflows are possible. */ @@ -513,12 +508,12 @@ static __inline__ void symbol_sync(v29_rx_state_t *s) s->symbol_sync_dc_filter[0] = v; /* A little integration will now filter away much of the HF noise */ s->baud_phase -= p; - if (abs(s->baud_phase) > 30*FP_FACTOR) + v = labs(s->baud_phase); + if (v > 30*FP_FACTOR) { - if (s->baud_phase > 0) - i = (s->baud_phase > 1000*FP_FACTOR) ? 5 : 1; - else - i = (s->baud_phase < -1000*FP_FACTOR) ? -5 : -1; + i = (v > 1000*FP_FACTOR) ? 5 : 1; + if (s->baud_phase < 0) + i = -i; //printf("v = %10.5f %5d - %f %f %d %d\n", v, i, p, s->baud_phase, s->total_baud_timing_correction); s->eq_put_step += i; s->total_baud_timing_correction += i; @@ -534,12 +529,12 @@ static __inline__ void symbol_sync(v29_rx_state_t *s) s->symbol_sync_dc_filter[0] = v; /* A little integration will now filter away much of the HF noise */ s->baud_phase -= p; - if (fabsf(s->baud_phase) > 30.0f) + v = fabsf(s->baud_phase); + if (v > 30.0f) { - if (s->baud_phase > 0.0f) - i = (s->baud_phase > 1000.0f) ? 5 : 1; - else - i = (s->baud_phase < -1000.0f) ? -5 : -1; + i = (v > 1000.0f) ? 5 : 1; + if (s->baud_phase < 0.0f) + i = -i; //printf("v = %10.5f %5d - %f %f %d %d\n", v, i, p, s->baud_phase, s->total_baud_timing_correction); s->eq_put_step += i; s->total_baud_timing_correction += i; @@ -996,9 +991,6 @@ SPAN_DECLARE_NONSTD(int) v29_rx(v29_rx_state_t *s, const int16_t amp[], int len) pair of filters. This results in a properly bandpass filtered complex signal, which can be brought directly to baseband by complex mixing. No further filtering, to remove mixer harmonics, is needed. */ - step = -s->eq_put_step; - if (step > RX_PULSESHAPER_COEFF_SETS - 1) - step = RX_PULSESHAPER_COEFF_SETS - 1; s->eq_put_step += RX_PULSESHAPER_COEFF_SETS*10/(3*2); #if defined(SPANDSP_USE_FIXED_POINT) v = vec_circular_dot_prodi16(s->rrc_filter, rx_pulseshaper_im[step], V29_RX_FILTER_STEPS, s->rrc_filter_step); @@ -1025,7 +1017,7 @@ SPAN_DECLARE_NONSTD(int) v29_rx(v29_rx_state_t *s, const int16_t amp[], int len) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) v29_rx_fillin(v29_rx_state_t *s, int len) +SPAN_DECLARE_NONSTD(int) v29_rx_fillin(v29_rx_state_t *s, int len) { int i; @@ -1121,12 +1113,13 @@ SPAN_DECLARE(int) v29_rx_restart(v29_rx_state_t *s, int bit_rate, int old_train) if (s->old_train) { s->carrier_phase_rate = s->carrier_phase_rate_save; - s->agc_scaling = s->agc_scaling_save; equalizer_restore(s); + s->agc_scaling = s->agc_scaling_save; } else { s->carrier_phase_rate = dds_phase_ratef(CARRIER_NOMINAL_FREQ); + equalizer_reset(s); #if defined(SPANDSP_USE_FIXED_POINT) s->agc_scaling_save = 0; s->agc_scaling = (float) FP_FACTOR*32768.0f*0.0017f/RX_PULSESHAPER_GAIN; @@ -1134,7 +1127,6 @@ SPAN_DECLARE(int) v29_rx_restart(v29_rx_state_t *s, int bit_rate, int old_train) s->agc_scaling_save = 0.0f; s->agc_scaling = 0.0017f/RX_PULSESHAPER_GAIN; #endif - equalizer_reset(s); } #if defined(SPANDSP_USE_FIXED_POINT) s->carrier_track_i = 8000; diff --git a/libs/spandsp/src/v29tx.c b/libs/spandsp/src/v29tx.c index f2f832caac..39c6c99b9a 100644 --- a/libs/spandsp/src/v29tx.c +++ b/libs/spandsp/src/v29tx.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v29tx.c,v 1.89 2009/06/02 16:03:56 steveu Exp $ */ /*! \file */ @@ -49,6 +47,8 @@ #include "spandsp/complex.h" #include "spandsp/vector_float.h" #include "spandsp/complex_vector_float.h" +#include "spandsp/vector_int.h" +#include "spandsp/complex_vector_int.h" #include "spandsp/async.h" #include "spandsp/dds.h" #include "spandsp/power_meter.h" @@ -105,7 +105,7 @@ static __inline__ int get_scrambled_bit(v29_tx_state_t *s) s->in_training = TRUE; bit = 1; } - out_bit = (bit ^ (s->scramble_reg >> 17) ^ (s->scramble_reg >> 22)) & 1; + out_bit = (bit ^ (s->scramble_reg >> (18 - 1)) ^ (s->scramble_reg >> (23 - 1))) & 1; s->scramble_reg = (s->scramble_reg << 1) | out_bit; return out_bit; } @@ -349,7 +349,7 @@ SPAN_DECLARE(int) v29_tx_restart(v29_tx_state_t *s, int bit_rate, int tep) return -1; } #if defined(SPANDSP_USE_FIXED_POINT) - memset(s->rrc_filter, 0, sizeof(s->rrc_filter)); + cvec_zeroi16(s->rrc_filter, sizeof(s->rrc_filter)/sizeof(s->rrc_filter[0])); #else cvec_zerof(s->rrc_filter, sizeof(s->rrc_filter)/sizeof(s->rrc_filter[0])); #endif diff --git a/libs/spandsp/src/v29tx_constellation_maps.h b/libs/spandsp/src/v29tx_constellation_maps.h index 1984c0b28f..01da53e71f 100644 --- a/libs/spandsp/src/v29tx_constellation_maps.h +++ b/libs/spandsp/src/v29tx_constellation_maps.h @@ -22,8 +22,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v29tx_constellation_maps.h,v 1.2 2008/09/04 14:40:05 steveu Exp $ */ #if defined(SPANDSP_USE_FIXED_POINT) diff --git a/libs/spandsp/src/v42.c b/libs/spandsp/src/v42.c index 1c6ed0803d..74630ee84d 100644 --- a/libs/spandsp/src/v42.c +++ b/libs/spandsp/src/v42.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v42.c,v 1.51 2009/11/04 15:52:06 steveu Exp $ */ /* THIS IS A WORK IN PROGRESS. IT IS NOT FINISHED. */ diff --git a/libs/spandsp/src/v42bis.c b/libs/spandsp/src/v42bis.c index d8d3f3fde1..f4aee8ce93 100644 --- a/libs/spandsp/src/v42bis.c +++ b/libs/spandsp/src/v42bis.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v42bis.c,v 1.37 2009/02/10 13:06:47 steveu Exp $ */ /* THIS IS A WORK IN PROGRESS. IT IS NOT FINISHED. @@ -58,6 +56,9 @@ #define V42BIS_N5 (V42BIS_N4 + V42BIS_N6) /* Index number of first dictionary entry used to store a string */ #define V42BIS_N6 3 /* Number of control codewords */ +/* V.42bis/9.2 */ +#define V42BIS_ESC_STEP 51 + /* Control code words in compressed mode */ enum { @@ -134,8 +135,16 @@ SPAN_DECLARE(int) v42bis_compress(v42bis_state_t *s, const uint8_t *buf, int len { octet = buf[ptr++]; ss->string_code = octet + V42BIS_N6; - if (ss->transparent) + if (octet == ss->escape_code) + { + push_compressed_octet(ss, ss->escape_code); + ss->escape_code += V42BIS_ESC_STEP; + push_compressed_octet(ss, V42BIS_EID); + } + else + { push_compressed_octet(ss, octet); + } ss->first = FALSE; } while (ptr < len) @@ -273,17 +282,19 @@ SPAN_DECLARE(int) v42bis_compress(v42bis_state_t *s, const uint8_t *buf, int len printf("Going compressed\n"); /* 7.8.1 Transition to compressed mode */ /* Switch out of transparent now, between codes. We need to send the octet which did not - match, just before switching. */ + match, just before switching. */ if (octet == ss->escape_code) { - push_compressed_octet(ss, ss->escape_code++); + push_compressed_octet(ss, ss->escape_code); + ss->escape_code += V42BIS_ESC_STEP; push_compressed_octet(ss, V42BIS_EID); } else { push_compressed_octet(ss, octet); } - push_compressed_octet(ss, ss->escape_code++); + push_compressed_octet(ss, ss->escape_code); + ss->escape_code += V42BIS_ESC_STEP; push_compressed_octet(ss, V42BIS_ECM); ss->transparent = FALSE; } @@ -310,7 +321,8 @@ SPAN_DECLARE(int) v42bis_compress(v42bis_state_t *s, const uint8_t *buf, int len { if (octet == ss->escape_code) { - push_compressed_octet(ss, ss->escape_code++); + push_compressed_octet(ss, ss->escape_code); + ss->escape_code += V42BIS_ESC_STEP; push_compressed_octet(ss, V42BIS_EID); } else @@ -396,7 +408,7 @@ SPAN_DECLARE(int) v42bis_decompress(v42bis_state_t *s, const uint8_t *buf, int l for (;;) { /* Fill up the bit buffer. */ - while (ss->input_bit_count < 32 - 8 && ptr < len) + while (ss->input_bit_count < (32 - 8) && ptr < len) { ss->input_bit_count += 8; ss->input_bit_buffer |= (uint32_t) buf[ptr++] << (32 - ss->input_bit_count); @@ -412,34 +424,33 @@ SPAN_DECLARE(int) v42bis_decompress(v42bis_state_t *s, const uint8_t *buf, int l if (ss->escaped) { ss->escaped = FALSE; - if (code == V42BIS_ECM) + switch (code) { + case V42BIS_ECM: printf("Hit V42BIS_ECM\n"); ss->transparent = FALSE; code_len = ss->v42bis_parm_c2; - } - else if (code == V42BIS_EID) - { + break; + case V42BIS_EID: printf("Hit V42BIS_EID\n"); - ss->output_buf[ss->output_octet_count++] = ss->escape_code - 1; + ss->output_buf[ss->output_octet_count++] = ss->escape_code; + ss->escape_code += V42BIS_ESC_STEP; if (ss->output_octet_count >= ss->max_len - s->v42bis_parm_n7) { ss->handler(ss->user_data, ss->output_buf, ss->output_octet_count); ss->output_octet_count = 0; } - } - else if (code == V42BIS_RESET) - { + break; + case V42BIS_RESET: printf("Hit V42BIS_RESET\n"); - } - else - { + break; + default: printf("Hit V42BIS_???? - %" PRIu32 "\n", code); + break; } } else if (code == ss->escape_code) { - ss->escape_code++; ss->escaped = TRUE; } else @@ -515,6 +526,11 @@ if (code > 4095) {printf("Code is 0x%" PRIu32 "\n", code); exit(2);} ss->octet = code - V42BIS_N6; /* Output the decoded string. */ this_length = V42BIS_MAX_STRING_SIZE - (int) (string - decode_buf); + for (i = 0; i < this_length; i++) + { + if (string[i] == ss->escape_code) + ss->escape_code += V42BIS_ESC_STEP; + } memcpy(ss->output_buf + ss->output_octet_count, string, this_length); ss->output_octet_count += this_length; if (ss->output_octet_count >= ss->max_len - s->v42bis_parm_n7) @@ -627,9 +643,9 @@ SPAN_DECLARE(v42bis_state_t *) v42bis_init(v42bis_state_t *s, { int i; - if (negotiated_p1 < 512 || negotiated_p1 > 65535) + if (negotiated_p1 < V42BIS_MIN_DICTIONARY_SIZE || negotiated_p1 > 65535) return NULL; - if (negotiated_p2 < 6 || negotiated_p2 > V42BIS_MAX_STRING_SIZE) + if (negotiated_p2 < V42BIS_MIN_STRING_SIZE || negotiated_p2 > V42BIS_MAX_STRING_SIZE) return NULL; if (s == NULL) { @@ -677,9 +693,13 @@ SPAN_DECLARE(v42bis_state_t *) v42bis_init(v42bis_state_t *s, s->decompress.dict[i].parent_code = (uint16_t) i; s->compress.string_code = 0xFFFFFFFF; s->compress.latest_code = 0xFFFFFFFF; - + s->compress.transparent = TRUE; + s->compress.first = TRUE; + s->decompress.last_old_code = 0xFFFFFFFF; s->decompress.last_extra_octet = -1; + s->decompress.transparent = TRUE; + s->compress.first = TRUE; s->compress.compression_mode = V42BIS_COMPRESSION_MODE_DYNAMIC; diff --git a/libs/spandsp/src/v8.c b/libs/spandsp/src/v8.c index f95c0783ab..9893bacfd3 100644 --- a/libs/spandsp/src/v8.c +++ b/libs/spandsp/src/v8.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v8.c,v 1.42.4.3 2009/12/28 12:20:47 steveu Exp $ */ /*! \file */ @@ -124,7 +122,7 @@ SPAN_DECLARE(const char *) v8_call_function_to_str(int call_function) case V8_CALL_V_SERIES: return "V series modem data"; case V8_CALL_FUNCTION_EXTENSION: - return "Call function is in extention octet"; + return "Call function is in extension octet"; } return "???"; } @@ -140,7 +138,7 @@ SPAN_DECLARE(const char *) v8_modulation_to_str(int modulation_scheme) return "V.21 duplex"; case V8_MOD_V22: return "V.22/V.22bis duplex"; - case V8_MOD_V23HALF: + case V8_MOD_V23HDX: return "V.23 half-duplex"; case V8_MOD_V23: return "V.23 duplex"; @@ -154,7 +152,7 @@ SPAN_DECLARE(const char *) v8_modulation_to_str(int modulation_scheme) return "V.29 half-duplex"; case V8_MOD_V32: return "V.32/V.32bis duplex"; - case V8_MOD_V34HALF: + case V8_MOD_V34HDX: return "V.34 half-duplex"; case V8_MOD_V34: return "V.34 duplex"; @@ -162,8 +160,6 @@ SPAN_DECLARE(const char *) v8_modulation_to_str(int modulation_scheme) return "V.90 duplex"; case V8_MOD_V92: return "V.92 duplex"; - case V8_MOD_FAILED: - return "negotiation failed"; } return "???"; } @@ -288,6 +284,14 @@ SPAN_DECLARE(void) v8_log_supported_modulations(v8_state_t *s, int modulation_sc } /*- End of function --------------------------------------------------------*/ +static int report_event(v8_state_t *s) +{ + if (s->result_handler) + s->result_handler(s->result_handler_user_data, &s->result); + return 0; +} +/*- End of function --------------------------------------------------------*/ + static const uint8_t *process_call_function(v8_state_t *s, const uint8_t *p) { s->result.call_function = (*p >> 5) & 0x07; @@ -298,57 +302,64 @@ static const uint8_t *process_call_function(v8_state_t *s, const uint8_t *p) static const uint8_t *process_modulation_mode(v8_state_t *s, const uint8_t *p) { - unsigned int far_end_modulations; + unsigned int modulations; - /* Modulation mode octet */ - far_end_modulations = 0; + /* Modulation mode octets */ + /* We must record the number of bytes of modulation information, so a resulting + JM can be made to have the same number (V.8/8.2.3) */ + modulations = 0; + s->modulation_bytes = 1; if (*p & 0x80) - far_end_modulations |= V8_MOD_V34HALF; + modulations |= V8_MOD_V34HDX; if (*p & 0x40) - far_end_modulations |= V8_MOD_V34; + modulations |= V8_MOD_V34; if (*p & 0x20) - far_end_modulations |= V8_MOD_V90; + modulations |= V8_MOD_V90; + ++p; /* Check for an extension octet */ - if ((*++p & 0x38) == 0x10) + if ((*p & 0x38) == 0x10) { + s->modulation_bytes++; if (*p & 0x80) - far_end_modulations |= V8_MOD_V27TER; + modulations |= V8_MOD_V27TER; if (*p & 0x40) - far_end_modulations |= V8_MOD_V29; + modulations |= V8_MOD_V29; if (*p & 0x04) - far_end_modulations |= V8_MOD_V17; + modulations |= V8_MOD_V17; if (*p & 0x02) - far_end_modulations |= V8_MOD_V22; + modulations |= V8_MOD_V22; if (*p & 0x01) - far_end_modulations |= V8_MOD_V32; + modulations |= V8_MOD_V32; + ++p; /* Check for an extension octet */ - if ((*++p & 0x38) == 0x10) + if ((*p & 0x38) == 0x10) { + s->modulation_bytes++; if (*p & 0x80) - far_end_modulations |= V8_MOD_V21; + modulations |= V8_MOD_V21; if (*p & 0x40) - far_end_modulations |= V8_MOD_V23HALF; + modulations |= V8_MOD_V23HDX; if (*p & 0x04) - far_end_modulations |= V8_MOD_V23; + modulations |= V8_MOD_V23; if (*p & 0x02) - far_end_modulations |= V8_MOD_V26BIS; + modulations |= V8_MOD_V26BIS; if (*p & 0x01) - far_end_modulations |= V8_MOD_V26TER; + modulations |= V8_MOD_V26TER; + ++p; } } - s->far_end_modulations = - s->result.modulations = far_end_modulations; - v8_log_supported_modulations(s, far_end_modulations); - return ++p; + s->result.modulations = modulations; + v8_log_supported_modulations(s, modulations); + return p; } /*- End of function --------------------------------------------------------*/ static const uint8_t *process_protocols(v8_state_t *s, const uint8_t *p) { s->result.protocol = (*p >> 5) & 0x07; - span_log(&s->logging, SPAN_LOG_FLOW | SPAN_LOG_SUPPRESS_LABELLING, "%s\n", v8_protocol_to_str(s->result.protocol)); + span_log(&s->logging, SPAN_LOG_FLOW, "%s\n", v8_protocol_to_str(s->result.protocol)); return ++p; } /*- End of function --------------------------------------------------------*/ @@ -356,7 +367,7 @@ static const uint8_t *process_protocols(v8_state_t *s, const uint8_t *p) static const uint8_t *process_pstn_access(v8_state_t *s, const uint8_t *p) { s->result.pstn_access = (*p >> 5) & 0x07; - span_log(&s->logging, SPAN_LOG_FLOW | SPAN_LOG_SUPPRESS_LABELLING, "%s\n", v8_pstn_access_to_str(s->result.pstn_access)); + span_log(&s->logging, SPAN_LOG_FLOW, "%s\n", v8_pstn_access_to_str(s->result.pstn_access)); return ++p; } /*- End of function --------------------------------------------------------*/ @@ -364,7 +375,7 @@ static const uint8_t *process_pstn_access(v8_state_t *s, const uint8_t *p) static const uint8_t *process_non_standard_facilities(v8_state_t *s, const uint8_t *p) { s->result.nsf = (*p >> 5) & 0x07; - span_log(&s->logging, SPAN_LOG_FLOW | SPAN_LOG_SUPPRESS_LABELLING, "%s\n", v8_nsf_to_str(s->result.nsf)); + span_log(&s->logging, SPAN_LOG_FLOW, "%s\n", v8_nsf_to_str(s->result.nsf)); return p; } /*- End of function --------------------------------------------------------*/ @@ -372,7 +383,7 @@ static const uint8_t *process_non_standard_facilities(v8_state_t *s, const uint8 static const uint8_t *process_pcm_modem_availability(v8_state_t *s, const uint8_t *p) { s->result.pcm_modem_availability = (*p >> 5) & 0x07; - span_log(&s->logging, SPAN_LOG_FLOW | SPAN_LOG_SUPPRESS_LABELLING, "%s\n", v8_pcm_modem_availability_to_str(s->result.pcm_modem_availability)); + span_log(&s->logging, SPAN_LOG_FLOW, "%s\n", v8_pcm_modem_availability_to_str(s->result.pcm_modem_availability)); return ++p; } /*- End of function --------------------------------------------------------*/ @@ -380,7 +391,7 @@ static const uint8_t *process_pcm_modem_availability(v8_state_t *s, const uint8_ static const uint8_t *process_t66(v8_state_t *s, const uint8_t *p) { s->result.t66 = (*p >> 5) & 0x07; - span_log(&s->logging, SPAN_LOG_FLOW | SPAN_LOG_SUPPRESS_LABELLING, "%s\n", v8_t66_to_str(s->result.t66)); + span_log(&s->logging, SPAN_LOG_FLOW, "%s\n", v8_t66_to_str(s->result.t66)); return ++p; } /*- End of function --------------------------------------------------------*/ @@ -639,9 +650,8 @@ static void send_cm_jm(v8_state_t *s) { int val; unsigned int offered_modulations; + int bytes; - offered_modulations = s->parms.modulations & s->far_end_modulations; - /* Send a CM, or a JM as appropriate */ v8_put_preamble(s); v8_put_byte(s, V8_CM_JM_SYNC_OCTET); @@ -649,48 +659,53 @@ static void send_cm_jm(v8_state_t *s) v8_put_byte(s, (s->result.call_function << 5) | V8_CALL_FUNCTION_TAG); /* Supported modulations */ + offered_modulations = s->result.modulations; + bytes = 0; val = 0x05; if (offered_modulations & V8_MOD_V90) val |= 0x20; if (offered_modulations & V8_MOD_V34) val |= 0x40; v8_put_byte(s, val); - - val = 0x10; - if (offered_modulations & V8_MOD_V32) - val |= 0x01; - if (offered_modulations & V8_MOD_V22) - val |= 0x02; - if (offered_modulations & V8_MOD_V17) - val |= 0x04; - if (offered_modulations & V8_MOD_V29) - val |= 0x40; - if (offered_modulations & V8_MOD_V27TER) - val |= 0x80; - v8_put_byte(s, val); - - val = 0x10; - if (offered_modulations & V8_MOD_V26TER) - val |= 0x01; - if (offered_modulations & V8_MOD_V26BIS) - val |= 0x02; - if (offered_modulations & V8_MOD_V23) - val |= 0x04; - if (offered_modulations & V8_MOD_V23HALF) - val |= 0x40; - if (offered_modulations & V8_MOD_V21) - val |= 0x80; - v8_put_byte(s, val); + if (++bytes < s->modulation_bytes) + { + val = 0x10; + if (offered_modulations & V8_MOD_V32) + val |= 0x01; + if (offered_modulations & V8_MOD_V22) + val |= 0x02; + if (offered_modulations & V8_MOD_V17) + val |= 0x04; + if (offered_modulations & V8_MOD_V29) + val |= 0x40; + if (offered_modulations & V8_MOD_V27TER) + val |= 0x80; + v8_put_byte(s, val); + } + if (++bytes < s->modulation_bytes) + { + val = 0x10; + if (offered_modulations & V8_MOD_V26TER) + val |= 0x01; + if (offered_modulations & V8_MOD_V26BIS) + val |= 0x02; + if (offered_modulations & V8_MOD_V23) + val |= 0x04; + if (offered_modulations & V8_MOD_V23HDX) + val |= 0x40; + if (offered_modulations & V8_MOD_V21) + val |= 0x80; + v8_put_byte(s, val); + } if (s->parms.protocol) v8_put_byte(s, (s->parms.protocol << 5) | V8_PROTOCOLS_TAG); - if (s->parms.pcm_modem_availability) - v8_put_byte(s, (s->parms.pcm_modem_availability << 5) | V8_PCM_MODEM_AVAILABILITY_TAG); if (s->parms.pstn_access) v8_put_byte(s, (s->parms.pstn_access << 5) | V8_PSTN_ACCESS_TAG); + if (s->parms.pcm_modem_availability) + v8_put_byte(s, (s->parms.pcm_modem_availability << 5) | V8_PCM_MODEM_AVAILABILITY_TAG); if (s->parms.t66 >= 0) v8_put_byte(s, (s->parms.t66 << 5) | V8_T66_TAG); - /* No NSF */ //v8_put_byte(s, (0 << 5) | V8_NSF_TAG); } @@ -762,7 +777,7 @@ static void handle_modem_connect_tone(v8_state_t *s, int tone) tone == MODEM_CONNECT_TONES_ANSAM_PR) { /* Set the Te interval. The spec. says 500ms is the minimum, - but gives reasons why 1 second is a better value. */ + but gives reasons why 1 second is a better value (V.8/8.1.1). */ s->state = V8_HEARD_ANSAM; s->ci_timer = ms_to_samples(1000); } @@ -772,8 +787,8 @@ static void handle_modem_connect_tone(v8_state_t *s, int tone) indicating V.8 startup, we are not going to do V.8 processing. */ span_log(&s->logging, SPAN_LOG_FLOW, "Non-V.8 modem connect tone detected\n"); s->state = V8_PARKED; - if (s->result_handler) - s->result_handler(s->result_handler_user_data, &s->result); + s->result.status = V8_STATUS_NON_V8_CALL; + report_event(s); } } /*- End of function --------------------------------------------------------*/ @@ -806,7 +821,7 @@ SPAN_DECLARE_NONSTD(int) v8_rx(v8_state_t *s, const int16_t *amp, int len) handle_modem_connect_tone(s, tone); break; } - if (queue_empty(s->tx_queue)) + if (!s->fsk_tx_on) { s->state = V8_CI_OFF; s->ci_timer = ms_to_samples(500); @@ -828,8 +843,8 @@ SPAN_DECLARE_NONSTD(int) v8_rx(v8_state_t *s, const int16_t *amp, int len) /* The spec says we should give up now. */ span_log(&s->logging, SPAN_LOG_FLOW, "Timeout waiting for modem connect tone\n"); s->state = V8_PARKED; - if (s->result_handler) - s->result_handler(s->result_handler_user_data, NULL); + s->result.status = V8_STATUS_FAILED; + report_event(s); } else { @@ -873,8 +888,8 @@ SPAN_DECLARE_NONSTD(int) v8_rx(v8_state_t *s, const int16_t *amp, int len) /* Timeout */ span_log(&s->logging, SPAN_LOG_FLOW, "Timeout waiting for JM\n"); s->state = V8_PARKED; - if (s->result_handler) - s->result_handler(s->result_handler_user_data, NULL); + s->result.status = V8_STATUS_FAILED; + report_event(s); } if (queue_contents(s->tx_queue) < 10) { @@ -884,8 +899,9 @@ SPAN_DECLARE_NONSTD(int) v8_rx(v8_state_t *s, const int16_t *amp, int len) break; case V8_CJ_ON: residual_samples = fsk_rx(&s->v21rx, amp, len); - if (queue_empty(s->tx_queue)) + if (!s->fsk_tx_on) { +#if 0 s->negotiation_timer = ms_to_samples(75); s->state = V8_SIGC; } @@ -893,11 +909,12 @@ SPAN_DECLARE_NONSTD(int) v8_rx(v8_state_t *s, const int16_t *amp, int len) case V8_SIGC: if ((s->negotiation_timer -= len) <= 0) { +#endif /* The V.8 negotiation has succeeded. */ span_log(&s->logging, SPAN_LOG_FLOW, "Negotiation succeeded\n"); s->state = V8_PARKED; - if (s->result_handler) - s->result_handler(s->result_handler_user_data, &s->result); + s->result.status = V8_STATUS_V8_CALL; + report_event(s); } break; case V8_CM_WAIT: @@ -906,7 +923,8 @@ SPAN_DECLARE_NONSTD(int) v8_rx(v8_state_t *s, const int16_t *amp, int len) { span_log(&s->logging, SPAN_LOG_FLOW, "CM recognised\n"); - /* TODO: negotiate if the call function is acceptable */ + s->result.status = V8_STATUS_V8_OFFERED; + report_event(s); /* Stop sending ANSam or ANSam/ and send JM instead */ fsk_tx_init(&s->v21tx, &preset_fsk_specs[FSK_V21CH2], get_bit, s); @@ -923,8 +941,8 @@ SPAN_DECLARE_NONSTD(int) v8_rx(v8_state_t *s, const int16_t *amp, int len) /* Timeout */ span_log(&s->logging, SPAN_LOG_FLOW, "Timeout waiting for CM\n"); s->state = V8_PARKED; - if (s->result_handler) - s->result_handler(s->result_handler_user_data, NULL); + s->result.status = V8_STATUS_FAILED; + report_event(s); } break; case V8_JM_ON: @@ -943,8 +961,8 @@ SPAN_DECLARE_NONSTD(int) v8_rx(v8_state_t *s, const int16_t *amp, int len) /* Timeout */ span_log(&s->logging, SPAN_LOG_FLOW, "Timeout waiting for CJ\n"); s->state = V8_PARKED; - if (s->result_handler) - s->result_handler(s->result_handler_user_data, NULL); + s->result.status = V8_STATUS_FAILED; + report_event(s); break; } if (queue_contents(s->tx_queue) < 10) @@ -954,13 +972,14 @@ SPAN_DECLARE_NONSTD(int) v8_rx(v8_state_t *s, const int16_t *amp, int len) } break; case V8_SIGA: - if ((s->negotiation_timer -= len) <= 0) + if (!s->fsk_tx_on) + //if ((s->negotiation_timer -= len) <= 0) { /* The V.8 negotiation has succeeded. */ span_log(&s->logging, SPAN_LOG_FLOW, "Negotiation succeeded\n"); s->state = V8_PARKED; - if (s->result_handler) - s->result_handler(s->result_handler_user_data, &s->result); + s->result.status = V8_STATUS_V8_CALL; + report_event(s); } break; case V8_PARKED: @@ -977,17 +996,20 @@ SPAN_DECLARE(logging_state_t *) v8_get_logging_state(v8_state_t *s) } /*- End of function --------------------------------------------------------*/ -SPAN_DECLARE(int) v8_restart(v8_state_t *s, - int calling_party, - v8_parms_t *parms) +SPAN_DECLARE(int) v8_restart(v8_state_t *s, int calling_party, v8_parms_t *parms) { memcpy(&s->parms, parms, sizeof(s->parms)); memset(&s->result, 0, sizeof(s->result)); + s->result.status = V8_STATUS_IN_PROGRESS; + s->result.modem_connect_tone = MODEM_CONNECT_TONES_NONE; + s->result.modulations = s->parms.modulations; s->result.call_function = s->parms.call_function; s->result.nsf = -1; s->result.t66 = -1; + s->modulation_bytes = 3; + s->ci_timer = 0; if (calling_party) { @@ -1009,7 +1031,6 @@ SPAN_DECLARE(int) v8_restart(v8_state_t *s, s->negotiation_timer = ms_to_samples(200 + 5000); s->modem_connect_tone_tx_on = ms_to_samples(75) + 1; } - s->result.modem_connect_tone = MODEM_CONNECT_TONES_NONE; if ((s->tx_queue = queue_init(NULL, 1024, 0)) == NULL) return -1; @@ -1035,38 +1056,6 @@ SPAN_DECLARE(v8_state_t *) v8_init(v8_state_t *s, s->result_handler_user_data = user_data; v8_restart(s, calling_party, parms); - - memcpy(&s->parms, parms, sizeof(s->parms)); - - s->result.call_function = s->parms.call_function; - s->result.nsf = -1; - s->result.t66 = -1; - - s->ci_timer = 0; - if (calling_party) - { - s->calling_party = TRUE; - s->state = V8_WAIT_1S; - s->negotiation_timer = ms_to_samples(1000); - s->ci_count = 0; - modem_connect_tones_rx_init(&s->ansam_rx, MODEM_CONNECT_TONES_ANS_PR, NULL, NULL); - fsk_tx_init(&s->v21tx, &preset_fsk_specs[FSK_V21CH1], get_bit, s); - } - else - { - /* Send the ANSam or ANSam/ tone */ - s->calling_party = FALSE; - modem_connect_tones_tx_init(&s->ansam_tx, s->parms.modem_connect_tone); - - v8_decode_init(s); - s->state = V8_CM_WAIT; - s->negotiation_timer = ms_to_samples(200 + 5000); - s->modem_connect_tone_tx_on = ms_to_samples(75) + 1; - } - s->result.modem_connect_tone = MODEM_CONNECT_TONES_NONE; - - if ((s->tx_queue = queue_init(NULL, 1024, 0)) == NULL) - return NULL; return s; } /*- End of function --------------------------------------------------------*/ diff --git a/libs/spandsp/src/vector_float.c b/libs/spandsp/src/vector_float.c index ba14bcfdbc..7b5a7efa69 100644 --- a/libs/spandsp/src/vector_float.c +++ b/libs/spandsp/src/vector_float.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: vector_float.c,v 1.22 2009/07/12 09:23:09 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/src/vector_int.c b/libs/spandsp/src/vector_int.c index db62cecf2b..807b72b2b3 100644 --- a/libs/spandsp/src/vector_int.c +++ b/libs/spandsp/src/vector_int.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: vector_int.c,v 1.26.4.1 2009/12/28 11:54:59 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/test-data/Makefile.am b/libs/spandsp/test-data/Makefile.am index f5797f451c..dab5d61751 100644 --- a/libs/spandsp/test-data/Makefile.am +++ b/libs/spandsp/test-data/Makefile.am @@ -15,8 +15,6 @@ ## You should have received a copy of the GNU Lesser General Public ## License along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -## -## $Id: Makefile.am,v 1.3 2008/07/10 12:44:54 steveu Exp $ SUBDIRS = itu etsi diff --git a/libs/spandsp/test-data/etsi/Makefile.am b/libs/spandsp/test-data/etsi/Makefile.am index f4d26bb780..f220bb29c3 100644 --- a/libs/spandsp/test-data/etsi/Makefile.am +++ b/libs/spandsp/test-data/etsi/Makefile.am @@ -15,8 +15,6 @@ ## You should have received a copy of the GNU Lesser General Public ## License along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -## -## $Id: Makefile.am,v 1.4 2008/07/10 12:44:54 steveu Exp $ SUBDIRS = fax diff --git a/libs/spandsp/test-data/etsi/fax/Makefile.am b/libs/spandsp/test-data/etsi/fax/Makefile.am index 6d2152d8ff..9b31fea137 100644 --- a/libs/spandsp/test-data/etsi/fax/Makefile.am +++ b/libs/spandsp/test-data/etsi/fax/Makefile.am @@ -15,8 +15,6 @@ ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -## -## $Id: Makefile.am,v 1.4 2009/02/25 17:52:51 steveu Exp $ AM_CFLAGS = $(COMP_VENDOR_CFLAGS) diff --git a/libs/spandsp/test-data/etsi/fax/generate_etsi_300_242_pages.c b/libs/spandsp/test-data/etsi/fax/generate_etsi_300_242_pages.c index 95c9db3e30..d7cefc6778 100644 --- a/libs/spandsp/test-data/etsi/fax/generate_etsi_300_242_pages.c +++ b/libs/spandsp/test-data/etsi/fax/generate_etsi_300_242_pages.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: generate_etsi_300_242_pages.c,v 1.5 2009/03/23 14:34:13 steveu Exp $ */ /*! \file */ @@ -274,7 +272,7 @@ static int create_stairstep_page(TIFF *tiff_file) static int create_diago1_page(TIFF *tiff_file) { - uint8_t image_buffer[1728/8]; + uint8_t image_buffer[1728/8 + 1]; int row; /* ETSI ETS 300 242 B.5.1 One dimensional coding test chart - the DIAGO1 page. */ @@ -301,7 +299,7 @@ static int create_diago1_page(TIFF *tiff_file) static int create_diago2_page(TIFF *tiff_file) { - uint8_t image_buffer[1728/8]; + uint8_t image_buffer[1728/8 + 1]; int row; /* ETSI ETS 300 242 B.5.1 One dimensional coding test chart - the DIAGO2 page. */ @@ -396,7 +394,7 @@ static int create_impress_page(TIFF *tiff_file) static int create_duration1_page(TIFF *tiff_file) { - uint8_t image_buffer[1728/8]; + uint8_t image_buffer[1728/8 + 1]; int row; int i; @@ -468,7 +466,7 @@ static int create_duration2_page(TIFF *tiff_file) static int create_error_page(TIFF *tiff_file) { - uint8_t image_buffer[1728/8]; + uint8_t image_buffer[1728/8 + 1]; int row; int start_pixel; int i; diff --git a/libs/spandsp/test-data/itu/Makefile.am b/libs/spandsp/test-data/itu/Makefile.am index eaa3f1afb1..9e262c2d8e 100644 --- a/libs/spandsp/test-data/itu/Makefile.am +++ b/libs/spandsp/test-data/itu/Makefile.am @@ -15,8 +15,6 @@ ## You should have received a copy of the GNU Lesser General Public ## License along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -## -## $Id: Makefile.am,v 1.3 2008/05/03 10:26:15 steveu Exp $ SUBDIRS = fax diff --git a/libs/spandsp/test-data/itu/fax/Makefile.am b/libs/spandsp/test-data/itu/fax/Makefile.am index 25b1ed24a9..595b5f7e93 100644 --- a/libs/spandsp/test-data/itu/fax/Makefile.am +++ b/libs/spandsp/test-data/itu/fax/Makefile.am @@ -15,8 +15,6 @@ ## You should have received a copy of the GNU General Public License ## License along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -## -## $Id: Makefile.am,v 1.5 2009/02/25 17:52:52 steveu Exp $ AM_CFLAGS = $(COMP_VENDOR_CFLAGS) AM_LDFLAGS = $(COMP_VENDOR_LDFLAGS) @@ -99,15 +97,17 @@ EXTRA_DIST = ${ITU_TEST_PAGES_PBM} MAINTAINERCLEANFILES = Makefile.in -nobase_data_DATA = itutests.tif \ - ${ITU_TEST_PAGES} \ +nobase_data_DATA = 100pages.tif \ dithered.tif \ - 100pages.tif \ + itutests.tif \ + ${ITU_TEST_PAGES} \ ${MIXED_SIZE_PAGES} \ - mixed_size_pages.tif + mixed_size_pages.tif \ + striped.tif noinst_PROGRAMS = generate_dithered_tif \ - generate_sized_pages + generate_sized_pages \ + generate_striped_pages generate_dithered_tif_SOURCES = generate_dithered_tif.c generate_dithered_tif_LDADD = -ltiff @@ -115,6 +115,9 @@ generate_dithered_tif_LDADD = -ltiff generate_sized_pages_SOURCES = generate_sized_pages.c generate_sized_pages_LDADD = -ltiff +generate_striped_pages_SOURCES = generate_striped_pages.c +generate_striped_pages_LDADD = -ltiff + clean: rm -f *.tif *.g3 @@ -138,7 +141,7 @@ itutests.tif: ${ITU_TEST_PAGES_G3} .pbm.g3: ${PBM2G3} $*.pbm >$*.g3 - + dithered.tif: generate_dithered_tif$(EXEEXT) ./generate_dithered_tif$(EXEEXT) @@ -147,3 +150,6 @@ ${MIXED_SIZE_PAGES}: generate_sized_pages$(EXEEXT) mixed_size_pages.tif: ${MIXED_SIZE_PAGES} $(TIFFCP) ${MIXED_SIZE_PAGES} $@ + +striped.tif: generate_striped_pages$(EXEEXT) + ./generate_striped_pages$(EXEEXT) diff --git a/libs/spandsp/test-data/itu/fax/generate_dithered_tif.c b/libs/spandsp/test-data/itu/fax/generate_dithered_tif.c index a21bdd0ed4..31c8cb0cc8 100644 --- a/libs/spandsp/test-data/itu/fax/generate_dithered_tif.c +++ b/libs/spandsp/test-data/itu/fax/generate_dithered_tif.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: generate_dithered_tif.c,v 1.2 2008/07/10 13:34:01 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/test-data/itu/fax/generate_sized_pages.c b/libs/spandsp/test-data/itu/fax/generate_sized_pages.c index fe57a2589a..bd7e8cdc91 100644 --- a/libs/spandsp/test-data/itu/fax/generate_sized_pages.c +++ b/libs/spandsp/test-data/itu/fax/generate_sized_pages.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: generate_sized_pages.c,v 1.3 2009/03/01 12:39:02 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/test-data/local/Makefile.am b/libs/spandsp/test-data/local/Makefile.am index 0df6a186eb..5c8ad55a53 100644 --- a/libs/spandsp/test-data/local/Makefile.am +++ b/libs/spandsp/test-data/local/Makefile.am @@ -15,8 +15,6 @@ ## You should have received a copy of the GNU Lesser General Public ## License along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -## -## $Id: Makefile.am,v 1.1 2008/05/03 07:30:19 steveu Exp $ SUBDIRS = @@ -24,6 +22,7 @@ DIST_SUBDIRS = EXTRA_DIST = dam9_lpc55.wav \ dam9.wav \ + lenna-colour.tif \ short_nb_voice.wav \ short_wb_voice.wav diff --git a/libs/spandsp/tests/Makefile.am b/libs/spandsp/tests/Makefile.am index 253d398d31..52769e78d8 100644 --- a/libs/spandsp/tests/Makefile.am +++ b/libs/spandsp/tests/Makefile.am @@ -15,8 +15,6 @@ ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -## -## $Id: Makefile.am,v 1.117 2009/09/22 13:11:04 steveu Exp $ AM_CFLAGS = $(COMP_VENDOR_CFLAGS) AM_LDFLAGS = $(COMP_VENDOR_LDFLAGS) @@ -26,6 +24,7 @@ LIBS += $(TESTLIBS) noinst_DATA = sound_c1_8k.wav sound_c3_8k.wav EXTRA_DIST = regression_tests.sh \ + tsb85_extra_tests.sh \ v42bis_tests.sh \ fax_tests.sh \ tsb85_tests.sh \ @@ -60,6 +59,7 @@ noinst_PROGRAMS = adsi_tests \ bell_mf_tx_tests \ bert_tests \ bit_operations_tests \ + bitstream_tests \ complex_tests \ complex_vector_float_tests \ complex_vector_int_tests \ @@ -80,6 +80,7 @@ noinst_PROGRAMS = adsi_tests \ gsm0610_tests \ hdlc_tests \ ima_adpcm_tests \ + image_translate_tests \ line_model_tests \ logging_tests \ lpc10_tests \ @@ -95,6 +96,7 @@ noinst_PROGRAMS = adsi_tests \ r2_mf_rx_tests \ r2_mf_tx_tests \ rfc2198_sim_tests \ + saturated_tests \ schedule_tests \ sig_tone_tests \ super_tone_rx_tests \ @@ -102,6 +104,7 @@ noinst_PROGRAMS = adsi_tests \ swept_tone_tests \ t4_tests \ t31_tests \ + t38_decode \ t38_core_tests \ t38_gateway_tests \ t38_gateway_to_terminal_tests \ @@ -109,6 +112,7 @@ noinst_PROGRAMS = adsi_tests \ t38_terminal_tests \ t38_terminal_to_gateway_tests \ time_scale_tests \ + timezone_tests \ tone_detect_tests \ tone_generate_tests \ tsb85_tests \ @@ -131,7 +135,9 @@ noinst_HEADERS = echo_monitor.h \ fax_utils.h \ line_model_monitor.h \ media_monitor.h \ - modem_monitor.h + modem_monitor.h \ + pcap_parse.h \ + udptl.h adsi_tests_SOURCES = adsi_tests.c adsi_tests_LDADD = -L$(top_builddir)/spandsp-sim -lspandsp-sim $(LIBDIR) -lspandsp @@ -157,6 +163,9 @@ bert_tests_LDADD = $(LIBDIR) -lspandsp bit_operations_tests_SOURCES = bit_operations_tests.c bit_operations_tests_LDADD = $(LIBDIR) -lspandsp +bitstream_tests_SOURCES = bitstream_tests.c +bitstream_tests_LDADD = $(LIBDIR) -lspandsp + complex_tests_SOURCES = complex_tests.c complex_tests_LDADD = $(LIBDIR) -lspandsp @@ -217,6 +226,9 @@ hdlc_tests_LDADD = $(LIBDIR) -lspandsp ima_adpcm_tests_SOURCES = ima_adpcm_tests.c ima_adpcm_tests_LDADD = -L$(top_builddir)/spandsp-sim -lspandsp-sim $(LIBDIR) -lspandsp +image_translate_tests_SOURCES = image_translate_tests.c +image_translate_tests_LDADD = -L$(top_builddir)/spandsp-sim -lspandsp-sim $(LIBDIR) -lspandsp + line_model_tests_SOURCES = line_model_tests.c line_model_tests_LDADD = -L$(top_builddir)/spandsp-sim -lspandsp-sim $(LIBDIR) -lspandsp @@ -262,6 +274,9 @@ r2_mf_tx_tests_LDADD = -L$(top_builddir)/spandsp-sim -lspandsp-sim $(LIBDIR) -ls rfc2198_sim_tests_SOURCES = rfc2198_sim_tests.c media_monitor.cpp rfc2198_sim_tests_LDADD = -L$(top_builddir)/spandsp-sim -lspandsp-sim $(LIBDIR) -lspandsp +saturated_tests_SOURCES = saturated_tests.c +saturated_tests_LDADD = $(LIBDIR) -lspandsp + schedule_tests_SOURCES = schedule_tests.c schedule_tests_LDADD = $(LIBDIR) -lspandsp @@ -286,6 +301,9 @@ t31_tests_LDADD = -L$(top_builddir)/spandsp-sim -lspandsp-sim $(LIBDIR) -lspands t38_core_tests_SOURCES = t38_core_tests.c t38_core_tests_LDADD = $(LIBDIR) -lspandsp +t38_decode_SOURCES = t38_decode.c fax_utils.c pcap_parse.c udptl.c +t38_decode_LDADD = $(LIBDIR) -lspandsp -lpcap + t38_gateway_tests_SOURCES = t38_gateway_tests.c fax_utils.c media_monitor.cpp t38_gateway_tests_LDADD = -L$(top_builddir)/spandsp-sim -lspandsp-sim $(LIBDIR) -lspandsp @@ -304,6 +322,9 @@ t38_terminal_to_gateway_tests_LDADD = -L$(top_builddir)/spandsp-sim -lspandsp-si time_scale_tests_SOURCES = time_scale_tests.c time_scale_tests_LDADD = $(LIBDIR) -lspandsp +timezone_tests_SOURCES = timezone_tests.c +timezone_tests_LDADD = $(LIBDIR) -lspandsp + tone_detect_tests_SOURCES = tone_detect_tests.c tone_detect_tests_LDADD = $(LIBDIR) -lspandsp diff --git a/libs/spandsp/tests/adsi_tests.c b/libs/spandsp/tests/adsi_tests.c index bf348be4e2..66c2f10707 100644 --- a/libs/spandsp/tests/adsi_tests.c +++ b/libs/spandsp/tests/adsi_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: adsi_tests.c,v 1.57 2009/05/30 15:23:13 steveu Exp $ */ /*! \page adsi_tests_page ADSI tests diff --git a/libs/spandsp/tests/async_tests.c b/libs/spandsp/tests/async_tests.c index 4dcacca3b2..98f3211e58 100644 --- a/libs/spandsp/tests/async_tests.c +++ b/libs/spandsp/tests/async_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: async_tests.c,v 1.19 2009/05/30 15:23:13 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/at_interpreter_tests.c b/libs/spandsp/tests/at_interpreter_tests.c index 2b63863751..84cb4b4f92 100644 --- a/libs/spandsp/tests/at_interpreter_tests.c +++ b/libs/spandsp/tests/at_interpreter_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: at_interpreter_tests.c,v 1.24 2009/10/09 14:53:57 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/awgn_tests.c b/libs/spandsp/tests/awgn_tests.c index 389ef14d4b..bb451c447f 100644 --- a/libs/spandsp/tests/awgn_tests.c +++ b/libs/spandsp/tests/awgn_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: awgn_tests.c,v 1.18 2008/11/30 12:38:27 steveu Exp $ */ /*! \page awgn_tests_page AWGN tests @@ -51,7 +49,7 @@ /* Some simple sanity tests for the Gaussian noise generation routines */ -int main (int argc, char *argv[]) +int main(int argc, char *argv[]) { int i; int j; diff --git a/libs/spandsp/tests/bell_mf_rx_tests.c b/libs/spandsp/tests/bell_mf_rx_tests.c index c1aa73633b..4b0112043d 100644 --- a/libs/spandsp/tests/bell_mf_rx_tests.c +++ b/libs/spandsp/tests/bell_mf_rx_tests.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bell_mf_rx_tests.c,v 1.16 2009/05/30 15:23:13 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/bell_mf_tx_tests.c b/libs/spandsp/tests/bell_mf_tx_tests.c index e9ef383e0b..dd0551f891 100644 --- a/libs/spandsp/tests/bell_mf_tx_tests.c +++ b/libs/spandsp/tests/bell_mf_tx_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bell_mf_tx_tests.c,v 1.15 2009/05/30 15:23:13 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/bert_tests.c b/libs/spandsp/tests/bert_tests.c index 30db9c5307..9db22b565f 100644 --- a/libs/spandsp/tests/bert_tests.c +++ b/libs/spandsp/tests/bert_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bert_tests.c,v 1.28 2009/05/30 15:23:13 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/bit_operations_tests.c b/libs/spandsp/tests/bit_operations_tests.c index 337b057582..53cd997023 100644 --- a/libs/spandsp/tests/bit_operations_tests.c +++ b/libs/spandsp/tests/bit_operations_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: bit_operations_tests.c,v 1.14 2008/05/13 13:17:25 steveu Exp $ */ /*! \page bit_operations_tests_page Bit operations tests diff --git a/libs/spandsp/tests/complex_tests.c b/libs/spandsp/tests/complex_tests.c index 77faef145d..54649f5b4b 100644 --- a/libs/spandsp/tests/complex_tests.c +++ b/libs/spandsp/tests/complex_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: complex_tests.c,v 1.2 2009/01/28 03:41:27 steveu Exp $ */ /*! \page complex_tests_page Complex arithmetic tests diff --git a/libs/spandsp/tests/complex_vector_float_tests.c b/libs/spandsp/tests/complex_vector_float_tests.c index 05449caca3..e32ac07591 100644 --- a/libs/spandsp/tests/complex_vector_float_tests.c +++ b/libs/spandsp/tests/complex_vector_float_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: complex_vector_float_tests.c,v 1.3 2009/04/26 07:00:39 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/tests/complex_vector_int_tests.c b/libs/spandsp/tests/complex_vector_int_tests.c index 5da6a36cee..57fa7a6a58 100644 --- a/libs/spandsp/tests/complex_vector_int_tests.c +++ b/libs/spandsp/tests/complex_vector_int_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: complex_vector_int_tests.c,v 1.2 2009/04/26 07:00:39 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/tests/crc_tests.c b/libs/spandsp/tests/crc_tests.c index a776f59c4e..2227d28805 100644 --- a/libs/spandsp/tests/crc_tests.c +++ b/libs/spandsp/tests/crc_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: crc_tests.c,v 1.6 2008/05/13 13:17:25 steveu Exp $ */ /*! \file */ @@ -73,9 +71,12 @@ static int cook_up_msg(uint8_t *buf) int main(int argc, char *argv[]) { int i; + int j; int len; + uint16_t crc16a; + uint16_t crc16b; - printf("HDLC module tests\n"); + printf("CRC module tests\n"); /* TODO: This doesn't check every function in the module */ @@ -93,6 +94,24 @@ int main(int argc, char *argv[]) } printf("Test passed.\n\n"); + printf("Testing the CRC-16 byte by byte and bit by bit routines\n"); + for (i = 0; i < 100; i++) + { + ref_len = cook_up_msg(buf); + crc16a = 0xFFFF; + crc16a = crc_itu16_calc(buf, ref_len, crc16a); + + crc16b = 0xFFFF; + for (j = 0; j < ref_len; j++) + crc16b = crc_itu16_bits(buf[j], 8, crc16b); + if (crc16a != crc16b) + { + printf("CRC-16 failure\n"); + exit(2); + } + } + printf("Test passed.\n\n"); + printf("Testing the CRC-32 routines\n"); for (i = 0; i < 100; i++) { diff --git a/libs/spandsp/tests/dc_restore_tests.c b/libs/spandsp/tests/dc_restore_tests.c index bc28bb6216..fd91ef9f24 100644 --- a/libs/spandsp/tests/dc_restore_tests.c +++ b/libs/spandsp/tests/dc_restore_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: dc_restore_tests.c,v 1.24 2008/11/30 12:38:27 steveu Exp $ */ /*! \page dc_restore_tests_page DC restoration tests diff --git a/libs/spandsp/tests/dds_tests.c b/libs/spandsp/tests/dds_tests.c index 9e8410f3ea..e3a43d5158 100644 --- a/libs/spandsp/tests/dds_tests.c +++ b/libs/spandsp/tests/dds_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: dds_tests.c,v 1.26 2009/06/02 14:55:36 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/dtmf_rx_tests.c b/libs/spandsp/tests/dtmf_rx_tests.c index 63c74d48a3..d5fb202ca3 100644 --- a/libs/spandsp/tests/dtmf_rx_tests.c +++ b/libs/spandsp/tests/dtmf_rx_tests.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: dtmf_rx_tests.c,v 1.45 2009/05/30 15:23:13 steveu Exp $ */ /* @@ -156,6 +154,9 @@ int callback_ok; int callback_roll; int step; +int max_forward_twist; +int max_reverse_twist; + int use_dialtone_filter = FALSE; char *decode_test_file = NULL; @@ -322,8 +323,8 @@ static void mitel_cm7291_side_1_tests(void) awgn_state_t noise_source; dtmf_state = dtmf_rx_init(NULL, NULL, NULL); - if (use_dialtone_filter) - dtmf_rx_parms(dtmf_state, TRUE, -1, -1, -99); + if (use_dialtone_filter || max_forward_twist >= 0 || max_reverse_twist >= 0) + dtmf_rx_parms(dtmf_state, use_dialtone_filter, max_forward_twist, max_reverse_twist, -99); /* Test 1: Mitel's test 1 isn't really a test. Its a calibration step, which has no meaning here. */ @@ -628,8 +629,8 @@ static void mitel_cm7291_side_2_and_bellcore_tests(void) dtmf_rx_state_t *dtmf_state; dtmf_state = dtmf_rx_init(NULL, NULL, NULL); - if (use_dialtone_filter) - dtmf_rx_parms(dtmf_state, TRUE, -1, -1, -99); + if (use_dialtone_filter || max_forward_twist >= 0 || max_reverse_twist >= 0) + dtmf_rx_parms(dtmf_state, use_dialtone_filter, max_forward_twist, max_reverse_twist, -99); /* The remainder of the Mitel tape is the talk-off test */ /* Here we use the Bellcore test tapes (much tougher), in six @@ -695,8 +696,8 @@ static void dial_tone_tolerance_tests(void) tone_gen_state_t dial_tone; dtmf_state = dtmf_rx_init(NULL, NULL, NULL); - if (use_dialtone_filter) - dtmf_rx_parms(dtmf_state, TRUE, -1, -1, -99); + if (use_dialtone_filter || max_forward_twist >= 0 || max_reverse_twist >= 0) + dtmf_rx_parms(dtmf_state, use_dialtone_filter, max_forward_twist, max_reverse_twist, -99); /* Test dial tone tolerance */ printf("Test: Dial tone tolerance.\n"); @@ -748,8 +749,9 @@ static void callback_function_tests(void) callback_ok = TRUE; callback_roll = 0; dtmf_state = dtmf_rx_init(NULL, digit_delivery, (void *) 0x12345678); - if (use_dialtone_filter) - dtmf_rx_parms(dtmf_state, TRUE, -1, -1, -99); + if (use_dialtone_filter || max_forward_twist >= 0 || max_reverse_twist >= 0) + dtmf_rx_parms(dtmf_state, use_dialtone_filter, max_forward_twist, max_reverse_twist, -99); + my_dtmf_gen_init(0.0f, DEFAULT_DTMF_TX_LEVEL, 0.0f, DEFAULT_DTMF_TX_LEVEL, DEFAULT_DTMF_TX_ON_TIME, DEFAULT_DTMF_TX_OFF_TIME); for (i = 1; i < 10; i++) { @@ -774,8 +776,9 @@ static void callback_function_tests(void) callback_roll = 0; dtmf_rx_init(dtmf_state, NULL, NULL); dtmf_rx_set_realtime_callback(dtmf_state, digit_status, (void *) 0x12345678); - if (use_dialtone_filter) - dtmf_rx_parms(dtmf_state, TRUE, -1, -1, -99); + if (use_dialtone_filter || max_forward_twist >= 0 || max_reverse_twist >= 0) + dtmf_rx_parms(dtmf_state, use_dialtone_filter, max_forward_twist, max_reverse_twist, -99); + my_dtmf_gen_init(0.0f, DEFAULT_DTMF_TX_LEVEL, 0.0f, DEFAULT_DTMF_TX_LEVEL, DEFAULT_DTMF_TX_ON_TIME, DEFAULT_DTMF_TX_OFF_TIME); step = 0; for (i = 1; i < 10; i++) @@ -812,8 +815,8 @@ static void decode_test(const char *test_file) int total; dtmf_state = dtmf_rx_init(NULL, NULL, NULL); - if (use_dialtone_filter) - dtmf_rx_parms(dtmf_state, TRUE, -1, -1, -99); + if (use_dialtone_filter || max_forward_twist >= 0 || max_reverse_twist >= 0) + dtmf_rx_parms(dtmf_state, use_dialtone_filter, max_forward_twist, max_reverse_twist, -99); /* We will decode the audio from a file. */ @@ -847,7 +850,9 @@ int main(int argc, char *argv[]) use_dialtone_filter = FALSE; channel_codec = MUNGE_CODEC_NONE; decode_test_file = NULL; - while ((opt = getopt(argc, argv, "c:d:f")) != -1) + max_forward_twist = -1; + max_reverse_twist = -1; + while ((opt = getopt(argc, argv, "c:d:F:fR:")) != -1) { switch (opt) { @@ -857,9 +862,15 @@ int main(int argc, char *argv[]) case 'd': decode_test_file = optarg; break; + case 'F': + max_forward_twist = atoi(optarg); + break; case 'f': use_dialtone_filter = TRUE; break; + case 'R': + max_reverse_twist = atoi(optarg); + break; default: //usage(); exit(2); diff --git a/libs/spandsp/tests/dtmf_tx_tests.c b/libs/spandsp/tests/dtmf_tx_tests.c index 0d990f0033..c092324972 100644 --- a/libs/spandsp/tests/dtmf_tx_tests.c +++ b/libs/spandsp/tests/dtmf_tx_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: dtmf_tx_tests.c,v 1.23 2009/05/30 15:23:13 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/echo_monitor.cpp b/libs/spandsp/tests/echo_monitor.cpp index 4e7a8241da..8a7f6c3928 100644 --- a/libs/spandsp/tests/echo_monitor.cpp +++ b/libs/spandsp/tests/echo_monitor.cpp @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: echo_monitor.cpp,v 1.13 2008/09/08 16:10:41 steveu Exp $ */ #ifdef HAVE_CONFIG_H diff --git a/libs/spandsp/tests/echo_monitor.h b/libs/spandsp/tests/echo_monitor.h index 0f45a4b4e3..72bc718fb4 100644 --- a/libs/spandsp/tests/echo_monitor.h +++ b/libs/spandsp/tests/echo_monitor.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: echo_monitor.h,v 1.12 2008/04/26 13:39:16 steveu Exp $ */ /*! \page echo_monitor_page Echo canceller performance monitoring diff --git a/libs/spandsp/tests/echo_tests.c b/libs/spandsp/tests/echo_tests.c index 0878bbc67d..1eac4d927d 100644 --- a/libs/spandsp/tests/echo_tests.c +++ b/libs/spandsp/tests/echo_tests.c @@ -24,8 +24,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: echo_tests.c,v 1.39 2009/05/30 15:23:13 steveu Exp $ */ /*! \page echo_can_tests_page Line echo cancellation for voice tests diff --git a/libs/spandsp/tests/fax_decode.c b/libs/spandsp/tests/fax_decode.c index 4b94adf251..d058f329f2 100644 --- a/libs/spandsp/tests/fax_decode.c +++ b/libs/spandsp/tests/fax_decode.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fax_decode.c,v 1.58 2009/11/02 13:25:20 steveu Exp $ */ /*! \page fax_decode_page FAX decoder @@ -109,6 +107,32 @@ int octets_per_ecm_frame = 256; int error_correcting_mode = FALSE; int current_fallback = 0; +static void decode_20digit_msg(const uint8_t *pkt, int len) +{ + int p; + int k; + char msg[T30_MAX_IDENT_LEN + 1]; + + if (len > T30_MAX_IDENT_LEN + 3) + { + fprintf(stderr, "XXX %d %d\n", len, T30_MAX_IDENT_LEN + 1); + msg[0] = '\0'; + return; + } + pkt += 2; + p = len - 2; + /* Strip trailing spaces */ + while (p > 1 && pkt[p - 1] == ' ') + p--; + /* The string is actually backwards in the message */ + k = 0; + while (p > 1) + msg[k++] = pkt[--p]; + msg[k] = '\0'; + fprintf(stderr, "%s is: \"%s\"\n", t30_frametype(pkt[0]), msg); +} +/*- End of function --------------------------------------------------------*/ + static void print_frame(const char *io, const uint8_t *fr, int frlen) { int i; @@ -124,6 +148,8 @@ static void print_frame(const char *io, const uint8_t *fr, int frlen) type = fr[2] & 0xFE; if (type == T30_DIS || type == T30_DTC || type == T30_DCS) t30_decode_dis_dtc_dcs(&t30_dummy, fr, frlen); + if (type == T30_CSI || type == T30_TSI || type == T30_PWD || type == T30_SEP || type == T30_SUB || type == T30_SID) + decode_20digit_msg(fr, frlen); if (type == T30_NSF || type == T30_NSS || type == T30_NSC) { if (t35_decode(&fr[3], frlen - 3, &country, &vendor, &model)) @@ -282,8 +308,6 @@ static void t4_end(void) { t4_stats_t stats; int i; - int j; - int k; if (!t4_up) return; @@ -291,17 +315,14 @@ static void t4_end(void) { for (i = 0; i < 256; i++) { - for (j = 0; j < ecm_len[i]; j++) - { - for (k = 0; k < 8; k++) - t4_rx_put_bit(&t4_state, (ecm_data[i][j] >> k) & 1); - } - fprintf(stderr, "%d", (ecm_len[i] < 0) ? 0 : 1); + if (ecm_len[i] > 0) + t4_rx_put_chunk(&t4_state, ecm_data[i], ecm_len[i]); + fprintf(stderr, "%d", (ecm_len[i] <= 0) ? 0 : 1); } fprintf(stderr, "\n"); } t4_rx_end_page(&t4_state); - t4_get_transfer_statistics(&t4_state, &stats); + t4_rx_get_transfer_statistics(&t4_state, &stats); fprintf(stderr, "Pages = %d\n", stats.pages_transferred); fprintf(stderr, "Image size = %dx%d\n", stats.width, stats.length); fprintf(stderr, "Image resolution = %dx%d\n", stats.x_resolution, stats.y_resolution); @@ -465,12 +486,12 @@ int main(int argc, char *argv[]) } if (info.samplerate != SAMPLE_RATE) { - printf(" Unexpected sample rate in audio file '%s'\n", filename); + fprintf(stderr, " Unexpected sample rate in audio file '%s'\n", filename); exit(2); } if (info.channels != 1) { - printf(" Unexpected number of channels in audio file '%s'\n", filename); + fprintf(stderr, " Unexpected number of channels in audio file '%s'\n", filename); exit(2); } diff --git a/libs/spandsp/tests/fax_tester.c b/libs/spandsp/tests/fax_tester.c index 0a3ccea7aa..ec2237f883 100644 --- a/libs/spandsp/tests/fax_tester.c +++ b/libs/spandsp/tests/fax_tester.c @@ -1,7 +1,7 @@ /* * SpanDSP - a series of DSP components for telephony * - * faxtester_tests.c + * fax_tester.c * * Written by Steve Underwood * @@ -10,19 +10,17 @@ * All rights reserved. * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1, - * as published by the Free Software Foundation. + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. + * GNU General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fax_tester.c,v 1.23 2009/11/02 13:25:20 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/fax_tester.h b/libs/spandsp/tests/fax_tester.h index 39bc2d88d5..9735e0f2a5 100644 --- a/libs/spandsp/tests/fax_tester.h +++ b/libs/spandsp/tests/fax_tester.h @@ -10,19 +10,17 @@ * All rights reserved. * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1, - * as published by the Free Software Foundation. + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. + * GNU General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fax_tester.h,v 1.9 2008/09/12 14:41:55 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/fax_tests.c b/libs/spandsp/tests/fax_tests.c index 6652e121ca..084a2b034f 100644 --- a/libs/spandsp/tests/fax_tests.c +++ b/libs/spandsp/tests/fax_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fax_tests.c,v 1.102 2009/05/30 15:23:13 steveu Exp $ */ /*! \page fax_tests_page FAX tests @@ -206,6 +204,7 @@ int main(int argc, char *argv[]) float signal_scaling; time_t start_time; time_t end_time; + int scan_line_time; char *page_header_info; int opt; t30_state_t *t30; @@ -225,8 +224,9 @@ int main(int argc, char *argv[]) use_page_limits = FALSE; signal_level = 0; noise_level = -99; + scan_line_time = 0; supported_modems = T30_SUPPORT_V27TER | T30_SUPPORT_V29 | T30_SUPPORT_V17; - while ((opt = getopt(argc, argv, "ehH:i:I:lm:n:prRs:tTw:")) != -1) + while ((opt = getopt(argc, argv, "ehH:i:I:lm:n:prRs:S:tTw:")) != -1) { switch (opt) { @@ -266,6 +266,9 @@ int main(int argc, char *argv[]) case 's': signal_level = atoi(optarg); break; + case 'S': + scan_line_time = atoi(optarg); + break; case 't': use_tep = TRUE; break; @@ -340,7 +343,7 @@ int main(int argc, char *argv[]) | T30_SUPPORT_SUB_ADDRESSING); if ((mc->chan & 1)) - t30_set_minimum_scan_line_time(t30, 40); + t30_set_minimum_scan_line_time(t30, scan_line_time); t30_set_supported_image_sizes(t30, T30_SUPPORT_US_LETTER_LENGTH | T30_SUPPORT_US_LEGAL_LENGTH @@ -363,7 +366,11 @@ int main(int argc, char *argv[]) | T30_SUPPORT_600_1200_RESOLUTION); t30_set_supported_modems(t30, supported_modems); if (use_ecm) +#if defined(SPANDSP_SUPPORT_T85) + t30_set_supported_compressions(t30, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION | T30_SUPPORT_T85_COMPRESSION); +#else t30_set_supported_compressions(t30, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION); +#endif if ((mc->chan & 1)) { if (polled_mode) @@ -406,9 +413,16 @@ int main(int argc, char *argv[]) logging = t30_get_logging_state(t30); span_log_set_level(logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME | SPAN_LOG_FLOW); span_log_set_tag(logging, mc->tag); - span_log_set_level(&t30->t4.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME | SPAN_LOG_FLOW); - span_log_set_tag(&t30->t4.logging, mc->tag); - + if ((j & 1)) + { + span_log_set_level(&t30->t4.rx.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME | SPAN_LOG_FLOW); + span_log_set_tag(&t30->t4.rx.logging, mc->tag); + } + else + { + span_log_set_level(&t30->t4.tx.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME | SPAN_LOG_FLOW); + span_log_set_tag(&t30->t4.tx.logging, mc->tag); + } logging = fax_get_logging_state(mc->fax); span_log_set_level(logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME | SPAN_LOG_FLOW); span_log_set_tag(logging, mc->tag); diff --git a/libs/spandsp/tests/fax_tests.sh b/libs/spandsp/tests/fax_tests.sh index 02fb8c7e44..a798ff8a6a 100755 --- a/libs/spandsp/tests/fax_tests.sh +++ b/libs/spandsp/tests/fax_tests.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # # spandsp fax tests # @@ -14,9 +14,6 @@ # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# $Id: fax_tests.sh,v 1.5 2008/03/30 18:33:31 steveu Exp $ -# run_fax_test() { diff --git a/libs/spandsp/tests/fax_utils.c b/libs/spandsp/tests/fax_utils.c index 9903109a6b..7e1a927bb8 100644 --- a/libs/spandsp/tests/fax_utils.c +++ b/libs/spandsp/tests/fax_utils.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fax_utils.c,v 1.3.4.1 2009/12/19 09:47:57 steveu Exp $ */ #if defined(HAVE_CONFIG_H) @@ -91,16 +89,17 @@ void log_transfer_statistics(t30_state_t *s, const char *tag) t30_stats_t t; t30_get_transfer_statistics(s, &t); - printf("%s: bit rate %d\n", tag, t.bit_rate); - printf("%s: ECM %s\n", tag, (t.error_correcting_mode) ? "on" : "off"); printf("%s: tx pages %d, rx pages %d\n", tag, t.pages_tx, t.pages_rx); printf("%s: pages in the file %d\n", tag, t.pages_in_file); + printf("%s: compression type %s (%d)\n", tag, t4_encoding_to_str(t.encoding), t.encoding); + printf("%s: compressed image size %d bytes\n", tag, t.image_size); printf("%s: image size %d pels x %d pels\n", tag, t.width, t.length); printf("%s: image resolution %d pels/m x %d pels/m\n", tag, t.x_resolution, t.y_resolution); + printf("%s: bit rate %d\n", tag, t.bit_rate); + printf("%s: ECM %s\n", tag, (t.error_correcting_mode) ? "on" : "off"); printf("%s: bad rows %d, longest bad row run %d\n", tag, t.bad_rows, t.longest_bad_row_run); printf("%s: bad ECM frames %d\n", tag, t.error_correcting_mode_retries); - printf("%s: compression type %d\n", tag, t.encoding); - printf("%s: image size %d bytes\n", tag, t.image_size); + //printf("%s: RTP events %d. RTN events %d\n", tag, t.rtp_events, t.rtn_events); #if defined(WITH_SPANDSP_INTERNALS) printf("%s: bits per row - min %d, max %d\n", tag, s->t4.min_row_bits, s->t4.max_row_bits); #endif diff --git a/libs/spandsp/tests/fax_utils.h b/libs/spandsp/tests/fax_utils.h index 16ebf630a9..973c63a572 100644 --- a/libs/spandsp/tests/fax_utils.h +++ b/libs/spandsp/tests/fax_utils.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fax_utils.h,v 1.1 2009/02/20 12:34:20 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/fsk_tests.c b/libs/spandsp/tests/fsk_tests.c index a54f0d3bcb..a2fa50ab5a 100644 --- a/libs/spandsp/tests/fsk_tests.c +++ b/libs/spandsp/tests/fsk_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: fsk_tests.c,v 1.59 2009/11/02 13:25:20 steveu Exp $ */ /*! \page fsk_tests_page FSK modem tests @@ -210,7 +208,7 @@ int main(int argc, char *argv[]) modem_under_test_2 = FSK_V21CH2; log_audio = FALSE; modems_set = 0; - while ((opt = getopt(argc, argv, "c:dlm:nr:s:")) != -1) + while ((opt = getopt(argc, argv, "c:d:lm:nr:s:")) != -1) { switch (opt) { @@ -389,7 +387,16 @@ int main(int argc, char *argv[]) bert_set_report(&caller_bert, 100000, reporter, (void *) (intptr_t) 1); bert_init(&answerer_bert, bits_per_test, BERT_PATTERN_ITU_O152_11, test_bps, 20); bert_set_report(&answerer_bert, 100000, reporter, (void *) (intptr_t) 2); - if ((model = both_ways_line_model_init(line_model_no, (float) noise_level, line_model_no, (float) noise_level, channel_codec, rbs_pattern)) == NULL) + if ((model = both_ways_line_model_init(line_model_no, + (float) noise_level, + -15.0f, + -15.0f, + line_model_no, + (float) noise_level, + -15.0f, + -15.0f, + channel_codec, + rbs_pattern)) == NULL) { fprintf(stderr, " Failed to create line model\n"); exit(2); @@ -488,7 +495,16 @@ int main(int argc, char *argv[]) fsk_rx_set_modem_status_handler(caller_rx, rx_status, (void *) &caller_rx); } noise_level++; - if ((model = both_ways_line_model_init(line_model_no, (float) noise_level, line_model_no, noise_level, channel_codec, 0)) == NULL) + if ((model = both_ways_line_model_init(line_model_no, + (float) noise_level, + line_model_no, + -15.0f, + -15.0f, + noise_level, + channel_codec, + -15.0f, + -15.0f, + 0)) == NULL) { fprintf(stderr, " Failed to create line model\n"); exit(2); diff --git a/libs/spandsp/tests/g1050_tests.c b/libs/spandsp/tests/g1050_tests.c index 95a2333e2d..74f8beebac 100644 --- a/libs/spandsp/tests/g1050_tests.c +++ b/libs/spandsp/tests/g1050_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: g1050_tests.c,v 1.18 2009/05/30 15:23:13 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/tests/g168_tests.c b/libs/spandsp/tests/g168_tests.c index 0484aac7d6..61a42ec453 100644 --- a/libs/spandsp/tests/g168_tests.c +++ b/libs/spandsp/tests/g168_tests.c @@ -23,8 +23,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: g168_tests.c,v 1.20 2009/05/30 15:23:13 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/tests/g711_tests.c b/libs/spandsp/tests/g711_tests.c index 134463b3d6..1975bbba11 100644 --- a/libs/spandsp/tests/g711_tests.c +++ b/libs/spandsp/tests/g711_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: g711_tests.c,v 1.17 2009/05/30 15:23:13 steveu Exp $ */ /*! \page g711_tests_page A-law and u-law conversion tests diff --git a/libs/spandsp/tests/g722_tests.c b/libs/spandsp/tests/g722_tests.c index 4b9f61865f..afb2025c38 100644 --- a/libs/spandsp/tests/g722_tests.c +++ b/libs/spandsp/tests/g722_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: g722_tests.c,v 1.32 2009/06/02 14:55:36 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/g726_tests.c b/libs/spandsp/tests/g726_tests.c index abd77435c3..f48607bdc5 100644 --- a/libs/spandsp/tests/g726_tests.c +++ b/libs/spandsp/tests/g726_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: g726_tests.c,v 1.33 2009/05/30 15:23:13 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/gsm0610_tests.c b/libs/spandsp/tests/gsm0610_tests.c index 6d522bf357..2e0bb50853 100644 --- a/libs/spandsp/tests/gsm0610_tests.c +++ b/libs/spandsp/tests/gsm0610_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: gsm0610_tests.c,v 1.25 2009/05/30 15:23:13 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/hdlc_tests.c b/libs/spandsp/tests/hdlc_tests.c index a4dd3e4e3b..bf7a63995d 100644 --- a/libs/spandsp/tests/hdlc_tests.c +++ b/libs/spandsp/tests/hdlc_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: hdlc_tests.c,v 1.48 2008/11/30 05:43:37 steveu Exp $ */ /*! \file */ @@ -817,6 +815,7 @@ static void decode_bitstream(const char *in_file_name) { char buf[1024]; int bit; + int num; hdlc_rx_state_t rx; FILE *in; @@ -829,8 +828,10 @@ static void decode_bitstream(const char *in_file_name) hdlc_rx_init(&rx, FALSE, TRUE, 2, decode_handler, NULL); while (fgets(buf, 1024, in)) { - if (sscanf(buf, "Rx bit %*d - %d", &bit) == 1) + if (sscanf(buf, "Rx bit %d - %d", &num, &bit) == 2) { + //printf("Rx bit %d - %d\n", num, bit); + //printf("Rx bit %d\n", bit); hdlc_rx_put_bit(&rx, bit); } } diff --git a/libs/spandsp/tests/ima_adpcm_tests.c b/libs/spandsp/tests/ima_adpcm_tests.c index 61fdb8142a..53a6314762 100644 --- a/libs/spandsp/tests/ima_adpcm_tests.c +++ b/libs/spandsp/tests/ima_adpcm_tests.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: ima_adpcm_tests.c,v 1.36 2009/05/30 15:23:14 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/line_model_monitor.cpp b/libs/spandsp/tests/line_model_monitor.cpp index 77454727d4..49af1bdc3a 100644 --- a/libs/spandsp/tests/line_model_monitor.cpp +++ b/libs/spandsp/tests/line_model_monitor.cpp @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: line_model_monitor.cpp,v 1.5 2008/09/08 16:10:41 steveu Exp $ */ #ifdef HAVE_CONFIG_H diff --git a/libs/spandsp/tests/line_model_monitor.h b/libs/spandsp/tests/line_model_monitor.h index 7af4e8e97f..96c0074a7d 100644 --- a/libs/spandsp/tests/line_model_monitor.h +++ b/libs/spandsp/tests/line_model_monitor.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: line_model_monitor.h,v 1.7 2008/04/26 13:39:17 steveu Exp $ */ /*! \page line_model_monitor_page Telephone line model monitoring diff --git a/libs/spandsp/tests/line_model_tests.c b/libs/spandsp/tests/line_model_tests.c index 309e2e7890..665781e828 100644 --- a/libs/spandsp/tests/line_model_tests.c +++ b/libs/spandsp/tests/line_model_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: line_model_tests.c,v 1.28 2009/09/23 16:02:59 steveu Exp $ */ /*! \page line_model_tests_page Telephony line model tests @@ -209,7 +207,16 @@ static void test_both_ways_model(int line_model_no, int speech_test) awgn_state_t noise1; awgn_state_t noise2; - if ((model = both_ways_line_model_init(line_model_no, -50, line_model_no + 1, -35, channel_codec, rbs_pattern)) == NULL) + if ((model = both_ways_line_model_init(line_model_no, + -50, + -15.0f, + -15.0f, + line_model_no + 1, + -35, + -15.0f, + -15.0f, + channel_codec, + rbs_pattern)) == NULL) { fprintf(stderr, " Failed to create line model\n"); exit(2); diff --git a/libs/spandsp/tests/logging_tests.c b/libs/spandsp/tests/logging_tests.c index 18351ad091..2159b20f8e 100644 --- a/libs/spandsp/tests/logging_tests.c +++ b/libs/spandsp/tests/logging_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: logging_tests.c,v 1.16 2009/02/12 12:38:39 steveu Exp $ */ /*! \page logging_tests_page Logging tests diff --git a/libs/spandsp/tests/lpc10_tests.c b/libs/spandsp/tests/lpc10_tests.c index 6af57d1b7f..2e9a00f220 100644 --- a/libs/spandsp/tests/lpc10_tests.c +++ b/libs/spandsp/tests/lpc10_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: lpc10_tests.c,v 1.24 2009/05/30 15:23:14 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/make_g168_css.c b/libs/spandsp/tests/make_g168_css.c index e485201f62..e31958ecd5 100644 --- a/libs/spandsp/tests/make_g168_css.c +++ b/libs/spandsp/tests/make_g168_css.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: make_g168_css.c,v 1.18 2009/05/30 15:23:14 steveu Exp $ */ /*! \page makecss_page CSS construction for G.168 testing diff --git a/libs/spandsp/tests/media_monitor.cpp b/libs/spandsp/tests/media_monitor.cpp index f798862ef7..cc7519bc82 100644 --- a/libs/spandsp/tests/media_monitor.cpp +++ b/libs/spandsp/tests/media_monitor.cpp @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: media_monitor.cpp,v 1.5 2008/09/08 16:10:41 steveu Exp $ */ #ifdef HAVE_CONFIG_H diff --git a/libs/spandsp/tests/media_monitor.h b/libs/spandsp/tests/media_monitor.h index 20928df16d..5144913054 100644 --- a/libs/spandsp/tests/media_monitor.h +++ b/libs/spandsp/tests/media_monitor.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: media_monitor.h,v 1.6 2008/04/26 13:39:17 steveu Exp $ */ /*! \page media_monitor_page IP streaming media performance monitoring diff --git a/libs/spandsp/tests/modem_connect_tones_tests.c b/libs/spandsp/tests/modem_connect_tones_tests.c index e2e7b14037..57b937922c 100644 --- a/libs/spandsp/tests/modem_connect_tones_tests.c +++ b/libs/spandsp/tests/modem_connect_tones_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: modem_connect_tones_tests.c,v 1.32 2009/11/02 15:04:15 steveu Exp $ */ /*! \page modem_connect_tones_tests_page Modem connect tones tests diff --git a/libs/spandsp/tests/modem_echo_tests.c b/libs/spandsp/tests/modem_echo_tests.c index 42895eff84..74d77074b0 100644 --- a/libs/spandsp/tests/modem_echo_tests.c +++ b/libs/spandsp/tests/modem_echo_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: modem_echo_tests.c,v 1.32 2009/05/30 15:23:14 steveu Exp $ */ /*! \page modem_echo_can_tests_page Line echo cancellation for modems tests @@ -288,7 +286,7 @@ int main(int argc, char *argv[]) line_model_no = atoi(argv[1]); } time(&now); - ctx = modem_echo_can_create(256); + ctx = modem_echo_can_init(256); awgn_init_dbm0(&far_noise_source, 7162534, -50.0f); signal_load(&local_css, "sound_c1_8k.wav"); diff --git a/libs/spandsp/tests/modem_monitor.cpp b/libs/spandsp/tests/modem_monitor.cpp index 7086013d15..4df0b4e1fd 100644 --- a/libs/spandsp/tests/modem_monitor.cpp +++ b/libs/spandsp/tests/modem_monitor.cpp @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: modem_monitor.cpp,v 1.17 2008/09/04 14:40:05 steveu Exp $ */ #ifdef HAVE_CONFIG_H diff --git a/libs/spandsp/tests/modem_monitor.h b/libs/spandsp/tests/modem_monitor.h index 636ef3f1c5..b1b79fda06 100644 --- a/libs/spandsp/tests/modem_monitor.h +++ b/libs/spandsp/tests/modem_monitor.h @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: modem_monitor.h,v 1.16 2008/09/03 13:41:42 steveu Exp $ */ /*! \page constel_page Modem performance monitoring diff --git a/libs/spandsp/tests/noise_tests.c b/libs/spandsp/tests/noise_tests.c index 34571a35e9..dc0e7bcbf4 100644 --- a/libs/spandsp/tests/noise_tests.c +++ b/libs/spandsp/tests/noise_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: noise_tests.c,v 1.18 2009/05/30 15:23:14 steveu Exp $ */ /*! \page noise_tests_page Noise generator tests diff --git a/libs/spandsp/tests/pcap_parse.c b/libs/spandsp/tests/pcap_parse.c new file mode 100644 index 0000000000..e5e0014826 --- /dev/null +++ b/libs/spandsp/tests/pcap_parse.c @@ -0,0 +1,202 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * pcap_parse.c + * + * Written by Steve Underwood + * + * Copyright (C) 2009 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Some code from SIPP (http://sf.net/projects/sipp) was used as a model + * for how to work with PCAP files. That code was authored by Guillaume + * TEISSIER from FTR&D 02/02/2006, and released under the GPL2 licence. + */ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#if defined(__HPUX) || defined(__CYGWIN) || defined(__FreeBSD__) +#include +#endif +#include +#ifndef __CYGWIN +#include +#endif +#include + +#include +#include +#include +#include + +#include "udptl.h" +#include "spandsp.h" +#include "pcap_parse.h" + +#if defined(__HPUX) || defined(__DARWIN) || defined(__CYGWIN) || defined(__FreeBSD__) + +struct iphdr +{ +#ifdef _HPUX_LI + unsigned int ihl:4; + unsigned int version:4; +#else + unsigned int version:4; + unsigned int ihl:4; +#endif + uint8_t tos; + uint16_t tot_len; + uint16_t id; + uint16_t frag_off; + uint8_t ttl; + uint8_t protocol; + uint16_t check; + uint32_t saddr; + uint32_t daddr; + /*The options start here. */ +}; + +#endif + +/* We define our own structures for Ethernet Header and IPv6 Header as they are not available on CYGWIN. + * We only need the fields, which are necessary to determine the type of the next header. + * we could also define our own structures for UDP and IPv4. We currently use the structures + * made available by the platform, as we had no problems to get them on all supported platforms. + */ + +typedef struct _ether_hdr +{ + char ether_dst[6]; + char ether_src[6]; + u_int16_t ether_type; /* we only need the type, so we can determine, if the next header is IPv4 or IPv6 */ +} ether_hdr; + +typedef struct _ipv6_hdr +{ + char dontcare[6]; + u_int8_t nxt_header; /* we only need the next header, so we can determine, if the next header is UDP or not */ + char dontcare2[33]; +} ipv6_hdr; + +char errbuf[PCAP_ERRBUF_SIZE]; + +int pcap_scan_pkts(const char *file, + uint32_t src_addr, + uint16_t src_port, + uint32_t dest_addr, + uint16_t dest_port, + pcap_timing_update_handler_t *timing_update_handler, + pcap_packet_handler_t *packet_handler, + void *user_data) +{ + pcap_t *pcap; + struct pcap_pkthdr *pkthdr; + uint8_t *pktdata; + const uint8_t *body; + int body_len; + int total_pkts; + uint32_t pktlen; + ether_hdr *ethhdr; + struct iphdr *iphdr; + ipv6_hdr *ip6hdr; + struct udphdr *udphdr; + + total_pkts = 0; + if ((pcap = pcap_open_offline(file, errbuf)) == NULL) + { + fprintf(stderr, "Can't open PCAP file '%s'\n", file); + return -1; + } + pkthdr = NULL; + pktdata = NULL; +#if defined(HAVE_PCAP_NEXT_EX) + while (pcap_next_ex(pcap, &pkthdr, (const uint8_t **) &pktdata) == 1) + { +#else + if ((pkthdr = (struct pcap_pkthdr *) malloc(sizeof(*pkthdr))) == NULL) + { + fprintf(stderr, "Can't allocate memory for pcap pkthdr\n"); + return -1; + } + while ((pktdata = (uint8_t *) pcap_next(pcap, pkthdr)) != NULL) + { +#endif + ethhdr = (ether_hdr *) pktdata; + if (ntohs(ethhdr->ether_type) != 0x0800 /* IPv4 */ + && + ntohs(ethhdr->ether_type) != 0x86dd) /* IPv6 */ + { + continue; + } + iphdr = (struct iphdr *) ((uint8_t *) ethhdr + sizeof(*ethhdr)); + if (iphdr && iphdr->version == 6) + { + /* ipv6 */ + pktlen = (uint32_t) pkthdr->len - sizeof(*ethhdr) - sizeof(*ip6hdr); + ip6hdr = (ipv6_hdr *) (void *) iphdr; + if (ip6hdr->nxt_header != IPPROTO_UDP) + continue; + udphdr = (struct udphdr *) ((uint8_t *) ip6hdr + sizeof(*ip6hdr)); + } + else + { + /* ipv4 */ + if (iphdr->protocol != IPPROTO_UDP) + continue; +#if defined(__DARWIN) || defined(__CYGWIN) || defined(__FreeBSD__) + udphdr = (struct udphdr *) ((uint8_t *) iphdr + (iphdr->ihl << 2) + 4); + pktlen = (uint32_t) ntohs(udphdr->uh_ulen); +#elif defined ( __HPUX) + udphdr = (struct udphdr *) ((uint8_t *) iphdr + (iphdr->ihl << 2)); + pktlen = (uint32_t) pkthdr->len - sizeof(*ethhdr) - sizeof(*iphdr); +#else + udphdr = (struct udphdr *) ((uint8_t *) iphdr + (iphdr->ihl << 2)); + pktlen = (uint32_t) ntohs(udphdr->len); +#endif + } + timing_update_handler(user_data, &pkthdr->ts); + if (src_addr && ntohl(iphdr->saddr) != src_addr) + continue; + if (src_port && ntohs(udphdr->source) != src_port) + continue; + if (dest_addr && ntohl(iphdr->daddr) != dest_addr) + continue; + if (dest_port && ntohs(udphdr->dest) != dest_port) + continue; + + body = (const uint8_t *) udphdr; + body += sizeof(udphdr); + body_len = pktlen - sizeof(udphdr); + packet_handler(user_data, body, body_len); + + total_pkts++; + } + fprintf(stderr, "In pcap %s, npkts %d\n", file, total_pkts); + pcap_close(pcap); + + return 0; +} +/*- End of function --------------------------------------------------------*/ +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/tests/pcap_parse.h b/libs/spandsp/tests/pcap_parse.h new file mode 100644 index 0000000000..eabaf69d83 --- /dev/null +++ b/libs/spandsp/tests/pcap_parse.h @@ -0,0 +1,54 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * pcap_parse.h + * + * Written by Steve Underwood + * + * Copyright (C) 2009 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/*! \file */ + +#if !defined(_SPANDSP_PCAP_PARSE_H_) +#define _SPANDSP_PCAP_PARSE_H_ + +#if defined(__cplusplus) +extern "C" +{ +#endif + +typedef int (pcap_timing_update_handler_t)(void *user_data, struct timeval *ts); +typedef int (pcap_packet_handler_t)(void *user_data, const uint8_t *pkt, int len); + + +int pcap_scan_pkts(const char *file, + uint32_t src_addr, + uint16_t src_port, + uint32_t dest_addr, + uint16_t dest_port, + pcap_timing_update_handler_t *timing_update_handler, + pcap_packet_handler_t *packet_handler, + void *user_data); + +#if defined(__cplusplus) +} +#endif + +#endif +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/tests/playout_tests.c b/libs/spandsp/tests/playout_tests.c index 736b3bd624..8f72469a89 100644 --- a/libs/spandsp/tests/playout_tests.c +++ b/libs/spandsp/tests/playout_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: playout_tests.c,v 1.29 2009/05/30 15:23:14 steveu Exp $ */ /*! \page playout_tests_page Playout (jitter buffering) tests diff --git a/libs/spandsp/tests/plc_tests.c b/libs/spandsp/tests/plc_tests.c index 6d9c21196d..a0703ac99e 100644 --- a/libs/spandsp/tests/plc_tests.c +++ b/libs/spandsp/tests/plc_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: plc_tests.c,v 1.26 2009/05/30 15:23:14 steveu Exp $ */ /*! \page plc_tests_page Packet loss concealment tests diff --git a/libs/spandsp/tests/power_meter_tests.c b/libs/spandsp/tests/power_meter_tests.c index fc4888150b..37ef1b41e1 100644 --- a/libs/spandsp/tests/power_meter_tests.c +++ b/libs/spandsp/tests/power_meter_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: power_meter_tests.c,v 1.24 2009/05/30 15:23:14 steveu Exp $ */ /*! \page power_meter_tests_page Power meter tests diff --git a/libs/spandsp/tests/queue_tests.c b/libs/spandsp/tests/queue_tests.c index 86ff0f4cd5..4bc6a30bc7 100644 --- a/libs/spandsp/tests/queue_tests.c +++ b/libs/spandsp/tests/queue_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: queue_tests.c,v 1.13 2009/04/11 17:43:04 steveu Exp $ */ /* THIS IS A WORK IN PROGRESS. IT IS NOT FINISHED. */ @@ -570,7 +568,7 @@ static void functional_message_tests(void) if (monitored_queue_write_msg(buf, MSG_LEN) != MSG_LEN) break; } - printf("Full at chunk %d (expected %u)\n", i, BUF_LEN/(MSG_LEN + sizeof(uint16_t)) + 1); + printf("Full at chunk %d (expected %lu)\n", i, (unsigned long int) BUF_LEN/(MSG_LEN + sizeof(uint16_t)) + 1); if (i != BUF_LEN/(MSG_LEN + sizeof(uint16_t)) + 1) tests_failed(); if ((len = monitored_queue_write_msg(buf, 5)) == 5) @@ -628,7 +626,7 @@ static void functional_message_tests(void) } printf("Free space = %d (%d)\n", queue_free_space(queue), BUF_LEN - (total_in - total_out)); display_queue_pointers(); - printf("Full at chunk %d (expected %u)\n", i, BUF_LEN/(MSG_LEN + sizeof(uint16_t))); + printf("Full at chunk %d (expected %lu)\n", i, (unsigned long int) BUF_LEN/(MSG_LEN + sizeof(uint16_t))); if (i != BUF_LEN/(MSG_LEN + sizeof(uint16_t))) tests_failed(); display_queue_pointers(); diff --git a/libs/spandsp/tests/r2_mf_rx_tests.c b/libs/spandsp/tests/r2_mf_rx_tests.c index f36aec25d8..6f71965291 100644 --- a/libs/spandsp/tests/r2_mf_rx_tests.c +++ b/libs/spandsp/tests/r2_mf_rx_tests.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: r2_mf_rx_tests.c,v 1.14 2009/05/30 15:23:14 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/r2_mf_tx_tests.c b/libs/spandsp/tests/r2_mf_tx_tests.c index 3988c43b66..8dcee259d1 100644 --- a/libs/spandsp/tests/r2_mf_tx_tests.c +++ b/libs/spandsp/tests/r2_mf_tx_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: r2_mf_tx_tests.c,v 1.16 2009/05/30 15:23:14 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/regression_tests.sh b/libs/spandsp/tests/regression_tests.sh index efd02619fb..56f628fdd3 100755 --- a/libs/spandsp/tests/regression_tests.sh +++ b/libs/spandsp/tests/regression_tests.sh @@ -16,9 +16,6 @@ # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# $Id: regression_tests.sh,v 1.59 2009/09/22 13:28:18 steveu Exp $ -# ITUTESTS_TIF=../test-data/itu/fax/itutests.tif MIXEDSIZES_TIF=../test-data/itu/fax/mixed_size_pages.tif @@ -224,7 +221,7 @@ rm -f fax_tests_1.tif RETVAL=$? if [ $RETVAL != 0 ] then - echo fax_tests failed! + echo fax_tests mixed-sizes failed! exit $RETVAL fi # Now use tiffcmp to check the results. It will return non-zero if any page images differ. The -t @@ -233,7 +230,7 @@ tiffcmp -t ${MIXEDSIZES_TIF} fax_tests_1.tif >/dev/null RETVAL=$? if [ $RETVAL != 0 ] then - echo fax_tests failed! + echo fax_tests mixed-sizes failed! exit $RETVAL fi echo fax_tests completed OK @@ -310,6 +307,15 @@ then fi echo ima_adpcm_tests completed OK +./image_translate_tests >$STDOUT_DEST 2>$STDERR_DEST +RETVAL=$? +if [ $RETVAL != 0 ] +then + echo image_translate_tests failed! + exit $RETVAL +fi +echo image_translate_tests completed OK + ./logging_tests >$STDOUT_DEST 2>$STDERR_DEST RETVAL=$? if [ $RETVAL != 0 ] @@ -429,6 +435,15 @@ echo r2_mf_tx_tests completed OK #fi #echo rfc2198_sim_tests completed OK +./saturated_tests >$STDOUT_DEST 2>$STDERR_DEST +RETVAL=$? +if [ $RETVAL != 0 ] +then + echo saturated_tests failed! + exit $RETVAL +fi +echo saturated_tests completed OK + ./schedule_tests >$STDOUT_DEST 2>$STDERR_DEST RETVAL=$? if [ $RETVAL != 0 ] @@ -666,6 +681,37 @@ then fi echo t4_tests completed OK +#rm -f t4_t6_tests_receive.tif +#./t4_t6_tests >$STDOUT_DEST 2>$STDERR_DEST +#RETVAL=$? +#if [ $RETVAL != 0 ] +#then +# echo t4_t6_tests failed! +# exit $RETVAL +#fi +#echo t4_t6_tests completed OK +#rm -f t81_t82_arith_coding_tests_receive.tif +#./t4_tests >$STDOUT_DEST 2>$STDERR_DEST +#RETVAL=$? +#if [ $RETVAL != 0 ] +#then +# echo t81_t82_arith_coding_tests failed! +# exit $RETVAL +#fi +#echo t81_t82_arith_coding_tests completed OK +echo t81_t82_arith_coding_tests not enabled + +#rm -f t85_tests_receive.tif +#./t4_tests >$STDOUT_DEST 2>$STDERR_DEST +#RETVAL=$? +#if [ $RETVAL != 0 ] +#then +# echo t85_tests failed! +# exit $RETVAL +#fi +#echo t85_tests completed OK +echo t85_tests not enabled + #./time_scale_tests >$STDOUT_DEST 2>$STDERR_DEST #RETVAL=$? #if [ $RETVAL != 0 ] @@ -676,6 +722,15 @@ echo t4_tests completed OK #echo time_scale_tests completed OK echo time_scale_tests not enabled +./timezone_tests >$STDOUT_DEST 2>$STDERR_DEST +RETVAL=$? +if [ $RETVAL != 0 ] +then + echo timezone_tests failed! + exit $RETVAL +fi +echo timezone_tests completed OK + #./tone_detect_tests >$STDOUT_DEST 2>$STDERR_DEST #RETVAL=$? #if [ $RETVAL != 0 ] @@ -782,6 +837,15 @@ then fi echo v29_tests completed OK +#./v32bis_tests -b 14400 -s -42 -n -66 >$STDOUT_DEST 2>$STDERR_DEST +#RETVAL=$? +#if [ $RETVAL != 0 ] +#then +# echo v32bis_tests failed! +# exit $RETVAL +#fi +#echo v32bis_tests completed OK + #./v42_tests >$STDOUT_DEST 2>$STDERR_DEST #RETVAL=$? #if [ $RETVAL != 0 ] @@ -792,14 +856,15 @@ echo v29_tests completed OK #echo v42_tests completed OK echo v42_tests not enabled -./v42bis_tests.sh >/dev/null -RETVAL=$? -if [ $RETVAL != 0 ] -then - echo v42bis_tests failed! - exit $RETVAL -fi -echo v42bis_tests completed OK +#./v42bis_tests.sh >/dev/null +#RETVAL=$? +#if [ $RETVAL != 0 ] +#then +# echo v42bis_tests failed! +# exit $RETVAL +#fi +#echo v42bis_tests completed OK +echo v42bis_tests not enabled ./v8_tests >$STDOUT_DEST 2>$STDERR_DEST RETVAL=$? diff --git a/libs/spandsp/tests/rfc2198_sim_tests.c b/libs/spandsp/tests/rfc2198_sim_tests.c index ecb124048a..34a19ad265 100644 --- a/libs/spandsp/tests/rfc2198_sim_tests.c +++ b/libs/spandsp/tests/rfc2198_sim_tests.c @@ -23,8 +23,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: rfc2198_sim_tests.c,v 1.7 2009/05/30 15:23:14 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/tests/schedule_tests.c b/libs/spandsp/tests/schedule_tests.c index 2255d9181a..576d08a1c4 100644 --- a/libs/spandsp/tests/schedule_tests.c +++ b/libs/spandsp/tests/schedule_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: schedule_tests.c,v 1.20 2008/11/30 05:43:37 steveu Exp $ */ /*! \page schedule_tests_page Event scheduler tests diff --git a/libs/spandsp/tests/sig_tone_tests.c b/libs/spandsp/tests/sig_tone_tests.c index 78da9fb4c6..ac47daaef6 100644 --- a/libs/spandsp/tests/sig_tone_tests.c +++ b/libs/spandsp/tests/sig_tone_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: sig_tone_tests.c,v 1.32 2010/03/11 14:22:30 steveu Exp $ */ /*! \file */ @@ -40,6 +38,7 @@ #endif #include +#include #include #include #include diff --git a/libs/spandsp/tests/super_tone_rx_tests.c b/libs/spandsp/tests/super_tone_rx_tests.c index 5e4e4825e2..32832f11ed 100644 --- a/libs/spandsp/tests/super_tone_rx_tests.c +++ b/libs/spandsp/tests/super_tone_rx_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: super_tone_rx_tests.c,v 1.33 2009/06/02 14:55:36 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/super_tone_tx_tests.c b/libs/spandsp/tests/super_tone_tx_tests.c index 1349bb11b9..5ab6ddcb50 100644 --- a/libs/spandsp/tests/super_tone_tx_tests.c +++ b/libs/spandsp/tests/super_tone_tx_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: super_tone_tx_tests.c,v 1.26 2009/05/30 15:23:14 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/swept_tone_tests.c b/libs/spandsp/tests/swept_tone_tests.c index 010fbcd3d5..f9b4dfb338 100644 --- a/libs/spandsp/tests/swept_tone_tests.c +++ b/libs/spandsp/tests/swept_tone_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: swept_tone_tests.c,v 1.2 2009/09/22 13:28:18 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/t31_tests.c b/libs/spandsp/tests/t31_tests.c index e06f30f559..49919d052d 100644 --- a/libs/spandsp/tests/t31_tests.c +++ b/libs/spandsp/tests/t31_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t31_tests.c,v 1.72 2009/05/30 15:23:14 steveu Exp $ */ /*! \file */ @@ -192,6 +190,74 @@ static const struct command_response_s fax_receive_test_seq[] = EXCHANGE("ATH0\r", "\r\nOK\r\n") }; +static const struct command_response_s v34_fax_send_test_seq[] = +{ + EXCHANGE("ATE0\r", "ATE0\r\r\nOK\r\n"), + EXCHANGE("AT+A8E=3,,\r", "\r\nOK\r\n"), + EXCHANGE("AT+FCLASS=1.0\r", "\r\nOK\r\n"), + EXCHANGE("AT+F34=14,4,2\r", "\r\nOK\r\n"), + EXCHANGE("ATD123456789\r", "\r\n+A8A:1\r\nOK\r\n"), + EXCHANGE("AT+A8M=8185D490\r", "\r\n+A8M:8185D490\r\nOK\r\n"), + EXCHANGE("ATO\r", "\r\n+A8J:1\r\n+F34=14,2\r\nCONNECT\r\n"), + // + RESPONSE("\x10\x6B\x10\x7D\x10\x6F" "\xFF\x13\x80\x00\xEE\xF8\x80\x80\x91\x80\x80\x80\x18\x78\x57\x10\x03"), // For audio FAXing + //RESPONSE("\x10\x6B\x10\x7D\x10\x6F" ""\xFF\x13\x80\x04\xEE\xF8\x80\x80\x91\x80\x80\x80\x18\xE4\xE7\x10\x03"), // For T.38 FAXing + // + // + EXCHANGE("\xFF\x13\x83\x01\xC6\x80\x80\x80\x80\x01\xFD\x13\x10\x03", "\xFF\x13\x84\xEA\x7D\x10\x03"), + EXCHANGE("\x10\x04", "\x10\x04\x10\x7D"), + // + EXCHANGE("\x10\x6B", "\x10\x6B\x10\x79\x10\x6F"), + // + // + // + EXCHANGE("\x10\x03", "\xFF\x13\x8C\xA2\xF1\x10\x03"), + // + EXCHANGE("\xFF\x13\xFB\x10\x03\x10\x04", "\r\nOK\r\n"), + EXCHANGE("ATH\r", "\r\nOK\r\n") +}; + +static const struct command_response_s v34_fax_receive_test_seq[] = +{ + EXCHANGE("ATE0\r", "ATE0\r\r\nOK\r\n"), + EXCHANGE("AT+A8E=,2,\r", "\r\nOK\r\n"), + EXCHANGE("AT+FCLASS=1.0\r", "\r\nOK\r\n"), + EXCHANGE("AT+F34=10\r", "\r\nOK\r\n"), + RESPONSE("\r\nRING\r\n"), + EXCHANGE("ATA\r", "\r\n+A8M:8185D490\r\nOK\r\n"), + EXCHANGE("AT+A8M=8185D490;O\r", "\r\n+A8J:1\r\n+F34:10,1\r\nCONNECT\r\n"), + RESPONSE("\x10\x10\x10"), + EXCHANGE("ATH\r", "\r\nOK\r\n") +}; + +static const struct command_response_s v34_fax_receive_a_test_seq[] = +{ + EXCHANGE("ATE0\r", "ATE0\r\r\nOK\r\n"), + EXCHANGE("AT+A8E=,3,\r", "\r\nOK\r\n"), + EXCHANGE("AT+FCLASS=1.0\r", "\r\nOK\r\n"), + EXCHANGE("AT+F34=10\r", "\r\nOK\r\n"), + RESPONSE("\r\nRING\r\n"), + EXCHANGE("ATA\r", "\r\n+A8C:1\r\n+A8C:1\r\n"), + EXCHANGE("X", "\r\nOK\r\n"), + EXCHANGE("AT+A8E=,2,\r", "\r\n+A8M:8185D490\r\nOK\r\n"), + EXCHANGE("AT+A8M=8185D490\r", "\r\n+A8J:1\r\n+F34:10,1\r\nCONNECT\r\n"), + RESPONSE("\x10\x10\x10"), + EXCHANGE("ATH\r", "\r\nOK\r\n") +}; + +static const struct command_response_s v34_fax_receive_b_test_seq[] = +{ + EXCHANGE("ATE0\r", "ATE0\r\r\nOK\r\n"), + EXCHANGE("AT+A8E=,3,\r", "\r\nOK\r\n"), + EXCHANGE("AT+FCLASS=1.0\r", "\r\nOK\r\n"), + EXCHANGE("AT+F34=10\r", "\r\nOK\r\n"), + RESPONSE("\r\nRING\r\n"), + EXCHANGE("ATA\r", "\r\nA8I:81\r\n"), + RESPONSE("A8I:81\r\n"), + EXCHANGE("X", "\r\nOK\r\n"), + EXCHANGE("AT+A8E=,2,\r", "\r\n+A8M:8185D490\r\nOK\r\n") +}; + char *decode_test_file = NULL; int countdown = 0; int command_response_test_step = -1; @@ -345,7 +411,7 @@ static int at_tx_handler(at_state_t *s, void *user_data, const uint8_t *buf, siz for (i = 0; i < response_buf_ptr; i++) printf("%02x ", response_buf[i] & 0xFF); printf("\n"); -printf("Match %d against %d\n", response_buf_ptr, fax_test_seq[test_seq_ptr].len_response); + printf("Match %d against %d\n", response_buf_ptr, fax_test_seq[test_seq_ptr].len_response); if (response_buf_ptr >= fax_test_seq[test_seq_ptr].len_response && memcmp(fax_test_seq[test_seq_ptr].response, response_buf, fax_test_seq[test_seq_ptr].len_response) == 0) @@ -444,8 +510,9 @@ static int t38_tests(int use_gui, int test_sending, int model_no, int speed_patt span_log_set_tag(logging, "T.31"); t38_core = t31_get_t38_core_state(t31_state); - span_log_set_level(&t38_core->logging, SPAN_LOG_DEBUG | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME); - span_log_set_tag(&t38_core->logging, "T.31"); + logging = t38_core_get_logging_state(t38_core); + span_log_set_level(logging, SPAN_LOG_DEBUG | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME); + span_log_set_tag(logging, "T.31"); span_log_set_level(&t31_state->at_state.logging, SPAN_LOG_DEBUG | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME); span_log_set_tag(&t31_state->at_state.logging, "T.31"); @@ -859,8 +926,12 @@ static int t30_tests(int log_audio, int test_sending) if (fax_rx(fax_state, t31_amp, SAMPLES_PER_CHUNK)) break; - span_log_bump_samples(&fax_state->logging, SAMPLES_PER_CHUNK); - span_log_bump_samples(&t30->logging, SAMPLES_PER_CHUNK); + logging = fax_get_logging_state(fax_state); + span_log_bump_samples(logging, SAMPLES_PER_CHUNK); + logging = t30_get_logging_state(t30); + span_log_bump_samples(logging, SAMPLES_PER_CHUNK); + logging = t31_get_logging_state(t31_state); + span_log_bump_samples(logging, SAMPLES_PER_CHUNK); if (log_audio) { diff --git a/libs/spandsp/tests/t38_core_tests.c b/libs/spandsp/tests/t38_core_tests.c index 57562452e5..1b0fa30b53 100644 --- a/libs/spandsp/tests/t38_core_tests.c +++ b/libs/spandsp/tests/t38_core_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_core_tests.c,v 1.16 2009/07/14 13:54:22 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/t38_decode.c b/libs/spandsp/tests/t38_decode.c new file mode 100644 index 0000000000..39c8ec6b4b --- /dev/null +++ b/libs/spandsp/tests/t38_decode.c @@ -0,0 +1,277 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * pcap-parse.c + * + * Written by Steve Underwood + * + * Copyright (C) 2009 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Some code from SIPP (http://sf.net/projects/sipp) was used as a model + * for how to work with PCAP files. That code was authored by Guillaume + * TEISSIER from FTR&D 02/02/2006, and released under the GPL2 licence. + */ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#if !defined(_WIN32) +#include +#endif + +#include "udptl.h" +#include "spandsp.h" + +#include "fax_utils.h" +#include "pcap_parse.h" + +#define INPUT_FILE_NAME "t38.pcap" +#define OUTPUT_FILE_NAME "t38pcap.tif" + +t38_terminal_state_t *t38_state; + +static int phase_b_handler(t30_state_t *s, void *user_data, int result) +{ + int i; + char tag[20]; + + i = (int) (intptr_t) user_data; + snprintf(tag, sizeof(tag), "%c: Phase B", i); + printf("%c: Phase B handler on channel %c - (0x%X) %s\n", i, i, result, t30_frametype(result)); + log_rx_parameters(s, tag); + return T30_ERR_OK; +} +/*- End of function --------------------------------------------------------*/ + +static int phase_d_handler(t30_state_t *s, void *user_data, int result) +{ + int i; + char tag[20]; + + i = (int) (intptr_t) user_data; + snprintf(tag, sizeof(tag), "%c: Phase D", i); + printf("%c: Phase D handler on channel %c - (0x%X) %s\n", i, i, result, t30_frametype(result)); + log_transfer_statistics(s, tag); + log_tx_parameters(s, tag); + log_rx_parameters(s, tag); + return T30_ERR_OK; +} +/*- End of function --------------------------------------------------------*/ + +static void phase_e_handler(t30_state_t *s, void *user_data, int result) +{ + int i; + t30_stats_t t; + char tag[20]; + + i = (int) (intptr_t) user_data; + snprintf(tag, sizeof(tag), "%c: Phase E", i); + printf("%c: Phase E handler on channel %c - (%d) %s\n", i, i, result, t30_completion_code_to_str(result)); + log_transfer_statistics(s, tag); + log_tx_parameters(s, tag); + log_rx_parameters(s, tag); + t30_get_transfer_statistics(s, &t); +} +/*- End of function --------------------------------------------------------*/ + +static int tx_packet_handler(t38_core_state_t *s, void *user_data, const uint8_t *buf, int len, int count) +{ + return 0; +} +/*- End of function --------------------------------------------------------*/ + +static int timing_update(void *user_data, struct timeval *ts) +{ + t30_state_t *t30; + t38_core_state_t *t38_core; + logging_state_t *logging; + int samples; + static int64_t current = 0; + int64_t when; + int64_t diff; + + when = ts->tv_sec*1000000LL + ts->tv_usec; + if (current == 0) + current = when; + + diff = when - current; + samples = diff/125LL; + if (samples > 0) + { + logging = t38_terminal_get_logging_state(t38_state); + span_log_bump_samples(logging, samples); + t38_core = t38_terminal_get_t38_core_state(t38_state); + logging = t38_core_get_logging_state(t38_core); + span_log_bump_samples(logging, samples); + t30 = t38_terminal_get_t30_state(t38_state); + logging = t30_get_logging_state(t30); + span_log_bump_samples(logging, samples); + + t38_terminal_send_timeout(t38_state, samples); + current = when; + } + return 0; +} +/*- End of function --------------------------------------------------------*/ + +static int ifp_handler(void *user_data, const uint8_t msg[], int len, int seq_no) +{ + t38_core_state_t *t38_core; + int i; + + printf("%5d >>> ", seq_no); + for (i = 0; i < len; i++) + printf("%02X ", msg[i]); + printf("\n"); + + t38_core = t38_terminal_get_t38_core_state(t38_state); + t38_core_rx_ifp_packet(t38_core, msg, len, seq_no); + + return 0; +} +/*- End of function --------------------------------------------------------*/ + +static int process_packet(void *user_data, const uint8_t *pkt, int len) +{ + static udptl_state_t *state = NULL; + + if (state == NULL) + state = udptl_init(NULL, UDPTL_ERROR_CORRECTION_REDUNDANCY, 3, 3, ifp_handler, NULL); + + udptl_rx_packet(state, pkt, len); + return 0; +} +/*- End of function --------------------------------------------------------*/ + +int main(int argc, char *argv[]) +{ + t30_state_t *t30; + t38_core_state_t *t38_core; + logging_state_t *logging; + const char *input_file_name; + int t38_version; + int use_ecm; + int use_tep; + int options; + int supported_modems; + int fill_removal; + int opt; + uint32_t src_addr; + uint16_t src_port; + uint32_t dest_addr; + uint16_t dest_port; + + + use_ecm = FALSE; + t38_version = 1; + input_file_name = INPUT_FILE_NAME; + fill_removal = FALSE; + use_tep = FALSE; + supported_modems = T30_SUPPORT_V27TER | T30_SUPPORT_V29 | T30_SUPPORT_V17; + src_addr = 0; + src_port = 0; + dest_addr = 0; + dest_port = 0; + while ((opt = getopt(argc, argv, "D:d:eFi:m:S:s:tv:")) != -1) + { + switch (opt) + { + case 'D': + dest_addr = atoi(optarg); + break; + case 'd': + dest_port = atoi(optarg); + break; + case 'e': + use_ecm = TRUE; + break; + case 'F': + fill_removal = TRUE; + break; + case 'i': + input_file_name = optarg; + break; + case 'm': + supported_modems = atoi(optarg); + break; + case 'S': + src_addr = atoi(optarg); + break; + case 's': + src_port = atoi(optarg); + break; + case 't': + use_tep = TRUE; + break; + case 'v': + t38_version = atoi(optarg); + break; + default: + //usage(); + exit(2); + break; + } + } + + if ((t38_state = t38_terminal_init(NULL, FALSE, tx_packet_handler, NULL)) == NULL) + { + fprintf(stderr, "Cannot start the T.38 channel\n"); + exit(2); + } + t30 = t38_terminal_get_t30_state(t38_state); + t38_core = t38_terminal_get_t38_core_state(t38_state); + t38_set_t38_version(t38_core, t38_version); + t38_terminal_set_config(t38_state, options); + t38_terminal_set_tep_mode(t38_state, use_tep); + + logging = t38_terminal_get_logging_state(t38_state); + span_log_set_level(logging, SPAN_LOG_DEBUG | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME); + span_log_set_tag(logging, "T.38"); + + logging = t38_core_get_logging_state(t38_core); + span_log_set_level(logging, SPAN_LOG_DEBUG | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME); + span_log_set_tag(logging, "T.38"); + + logging = t30_get_logging_state(t30); + span_log_set_level(logging, SPAN_LOG_DEBUG | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME); + span_log_set_tag(logging, "T.38"); + + t30_set_supported_modems(t30, supported_modems); + t30_set_tx_ident(t30, "11111111"); + t30_set_tx_nsf(t30, (const uint8_t *) "\x50\x00\x00\x00Spandsp\x00", 12); + t30_set_rx_file(t30, OUTPUT_FILE_NAME, -1); + t30_set_phase_b_handler(t30, phase_b_handler, (void *) (intptr_t) 'A'); + t30_set_phase_d_handler(t30, phase_d_handler, (void *) (intptr_t) 'A'); + t30_set_phase_e_handler(t30, phase_e_handler, (void *) (intptr_t) 'A'); + t30_set_ecm_capability(t30, TRUE); + t30_set_supported_compressions(t30, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION | T30_SUPPORT_T85_COMPRESSION); + + if (pcap_scan_pkts(input_file_name, src_addr, src_port, dest_addr, dest_port, timing_update, process_packet, NULL)) + exit(2); +} +/*- End of function --------------------------------------------------------*/ +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/tests/t38_gateway_tests.c b/libs/spandsp/tests/t38_gateway_tests.c index aa7b98e7d2..f15a16ed9a 100644 --- a/libs/spandsp/tests/t38_gateway_tests.c +++ b/libs/spandsp/tests/t38_gateway_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_gateway_tests.c,v 1.82.4.1 2009/12/19 09:47:57 steveu Exp $ */ /*! \file */ @@ -73,10 +71,6 @@ These tests exercise the path #define INPUT_FILE_NAME "../test-data/itu/fax/itutests.tif" #define OUTPUT_FILE_NAME "t38.tif" #define OUTPUT_FILE_NAME_WAVE "t38_gateway.wav" -#define OUTPUT_FILE_NAME_T30A "t38_gateway_t30a.wav" -#define OUTPUT_FILE_NAME_T38A "t38_gateway_t38a.wav" -#define OUTPUT_FILE_NAME_T30B "t38_gateway_t30b.wav" -#define OUTPUT_FILE_NAME_T38B "t38_gateway_t38b.wav" fax_state_t *fax_state_a; t38_gateway_state_t *t38_state_a; @@ -243,14 +237,16 @@ int main(int argc, char *argv[]) const char *input_file_name; int i; int seq_no; - int model_no; - int speed_pattern_no; + int g1050_model_no; + int g1050_speed_pattern_no; double tx_when; double rx_when; int supported_modems; int fill_removal; int use_gui; int opt; + int drop_frame; + int drop_frame_rate; t38_stats_t stats; fax_state_t *fax; t30_state_t *t30; @@ -263,18 +259,24 @@ int main(int argc, char *argv[]) t38_version = 1; input_file_name = INPUT_FILE_NAME; simulate_incrementing_repeats = FALSE; - model_no = 0; - speed_pattern_no = 1; + g1050_model_no = 0; + g1050_speed_pattern_no = 1; fill_removal = FALSE; use_gui = FALSE; use_tep = FALSE; feedback_audio = FALSE; use_transmit_on_idle = TRUE; supported_modems = T30_SUPPORT_V27TER | T30_SUPPORT_V29 | T30_SUPPORT_V17; - while ((opt = getopt(argc, argv, "efFgi:Ilm:M:s:tv:")) != -1) + drop_frame = 0; + drop_frame_rate = 0; + while ((opt = getopt(argc, argv, "D:efFgi:Ilm:M:s:tv:")) != -1) { switch (opt) { + case 'D': + drop_frame_rate = + drop_frame = atoi(optarg); + break; case 'e': use_ecm = TRUE; break; @@ -305,10 +307,10 @@ int main(int argc, char *argv[]) supported_modems = atoi(optarg); break; case 'M': - model_no = optarg[0] - 'A' + 1; + g1050_model_no = optarg[0] - 'A' + 1; break; case 's': - speed_pattern_no = atoi(optarg); + g1050_speed_pattern_no = atoi(optarg); break; case 't': use_tep = TRUE; @@ -339,12 +341,12 @@ int main(int argc, char *argv[]) memset(silence, 0, sizeof(silence)); srand48(0x1234567); - if ((path_a_to_b = g1050_init(model_no, speed_pattern_no, 100, 33)) == NULL) + if ((path_a_to_b = g1050_init(g1050_model_no, g1050_speed_pattern_no, 100, 33)) == NULL) { fprintf(stderr, "Failed to start IP network path model\n"); exit(2); } - if ((path_b_to_a = g1050_init(model_no, speed_pattern_no, 100, 33)) == NULL) + if ((path_b_to_a = g1050_init(g1050_model_no, g1050_speed_pattern_no, 100, 33)) == NULL) { fprintf(stderr, "Failed to start IP network path model\n"); exit(2); @@ -514,8 +516,17 @@ int main(int argc, char *argv[]) t30_amp_a[i] += t38_amp_hist_a[hist_ptr][i] >> 1; memcpy(t38_amp_hist_a[hist_ptr], t38_amp_a, sizeof(int16_t)*SAMPLES_PER_CHUNK); } - if (t38_gateway_rx(t38_state_a, t30_amp_a, t30_len_a)) - break; + if (drop_frame_rate && --drop_frame == 0) + { + drop_frame = drop_frame_rate; + if (t38_gateway_rx_fillin(t38_state_a, t30_len_a)) + break; + } + else + { + if (t38_gateway_rx(t38_state_a, t30_amp_a, t30_len_a)) + break; + } t38_len_a = t38_gateway_tx(t38_state_a, t38_amp_a, SAMPLES_PER_CHUNK); if (!use_transmit_on_idle) @@ -557,8 +568,17 @@ int main(int argc, char *argv[]) t30_amp_b[i] += t38_amp_hist_b[hist_ptr][i] >> 1; memcpy(t38_amp_hist_b[hist_ptr], t38_amp_b, sizeof(int16_t)*SAMPLES_PER_CHUNK); } - if (t38_gateway_rx(t38_state_b, t30_amp_b, t30_len_b)) - break; + if (drop_frame_rate && --drop_frame == 0) + { + drop_frame = drop_frame_rate; + if (t38_gateway_rx_fillin(t38_state_b, t30_len_b)) + break; + } + else + { + if (t38_gateway_rx(t38_state_b, t30_amp_b, t30_len_b)) + break; + } t38_len_b = t38_gateway_tx(t38_state_b, t38_amp_b, SAMPLES_PER_CHUNK); if (!use_transmit_on_idle) diff --git a/libs/spandsp/tests/t38_gateway_to_terminal_tests.c b/libs/spandsp/tests/t38_gateway_to_terminal_tests.c index 8c2e47c2d3..9a27985794 100644 --- a/libs/spandsp/tests/t38_gateway_to_terminal_tests.c +++ b/libs/spandsp/tests/t38_gateway_to_terminal_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_gateway_to_terminal_tests.c,v 1.66.4.1 2009/12/19 09:47:57 steveu Exp $ */ /*! \file */ @@ -88,6 +86,15 @@ int succeeded[2] = {FALSE, FALSE}; int simulate_incrementing_repeats = FALSE; +int t38_version; +int use_ecm; +int use_tep; +int use_transmit_on_idle; +int supported_modems; +int use_gui; +int g1050_model_no; +int g1050_speed_pattern_no; + static int phase_b_handler(t30_state_t *s, void *user_data, int result) { int i; @@ -192,6 +199,179 @@ static int tx_packet_handler_b(t38_core_state_t *s, void *user_data, const uint8 } /*- End of function --------------------------------------------------------*/ +static int decode_test(const char *decode_test_file) +{ + int16_t t38_amp_a[SAMPLES_PER_CHUNK]; + int16_t t30_amp_a[SAMPLES_PER_CHUNK]; + SNDFILE *wave_handle; + t30_state_t *t30; + t38_core_state_t *t38_core; + logging_state_t *logging; + int t38_len_a; + int t30_len_a; + int msg_len; + uint8_t msg[1024]; + int seq_no; + double tx_when; + double rx_when; + + printf("Decode test data file '%s'\n", decode_test_file); + + if ((wave_handle = sf_open_telephony_read(decode_test_file, 1)) == NULL) + { + fprintf(stderr, " Cannot open audio file '%s'\n", decode_test_file); + exit(2); + } + + srand48(0x1234567); + if ((path_a_to_b = g1050_init(g1050_model_no, g1050_speed_pattern_no, 100, 33)) == NULL) + { + fprintf(stderr, "Failed to start IP network path model\n"); + exit(2); + } + if ((path_b_to_a = g1050_init(g1050_model_no, g1050_speed_pattern_no, 100, 33)) == NULL) + { + fprintf(stderr, "Failed to start IP network path model\n"); + exit(2); + } + + memset(t30_amp_a, 0, sizeof(t30_amp_a)); + + if ((t38_state_a = t38_gateway_init(NULL, tx_packet_handler_a, t38_state_b)) == NULL) + { + fprintf(stderr, "Cannot start the T.38 channel\n"); + exit(2); + } + t38_core = t38_gateway_get_t38_core_state(t38_state_a); + t38_gateway_set_transmit_on_idle(t38_state_a, use_transmit_on_idle); + t38_set_t38_version(t38_core, t38_version); + t38_gateway_set_ecm_capability(t38_state_a, use_ecm); + + logging = t38_gateway_get_logging_state(t38_state_a); + span_log_set_level(logging, SPAN_LOG_DEBUG | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME); + span_log_set_tag(logging, "T.38-A"); + + logging = t38_core_get_logging_state(t38_core); + span_log_set_level(logging, SPAN_LOG_DEBUG | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME); + span_log_set_tag(logging, "T.38-A"); + + logging = &t38_state_a->audio.modems.v17_rx.logging; + span_log_set_level(logging, SPAN_LOG_DEBUG | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME); + span_log_set_tag(logging, "V.17-A"); + + memset(t38_amp_a, 0, sizeof(t38_amp_a)); + + if ((t38_state_b = t38_terminal_init(NULL, FALSE, tx_packet_handler_b, t38_state_a)) == NULL) + { + fprintf(stderr, "Cannot start the T.38 channel\n"); + exit(2); + } + t30 = t38_terminal_get_t30_state(t38_state_b); + t38_core = t38_terminal_get_t38_core_state(t38_state_b); + t38_set_t38_version(t38_core, t38_version); + + logging = t38_terminal_get_logging_state(t38_state_b); + span_log_set_level(logging, SPAN_LOG_DEBUG | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME); + span_log_set_tag(logging, "T.38-B"); + + logging = t38_core_get_logging_state(t38_core); + span_log_set_level(logging, SPAN_LOG_DEBUG | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME); + span_log_set_tag(logging, "T.38-B"); + + logging = t30_get_logging_state(t30); + span_log_set_level(logging, SPAN_LOG_DEBUG | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME); + span_log_set_tag(logging, "T.38-B"); + + t30_set_supported_modems(t30, supported_modems); + t30_set_tx_ident(t30, "22222222"); + t30_set_rx_file(t30, OUTPUT_FILE_NAME, -1); + t30_set_phase_b_handler(t30, phase_b_handler, (void *) (intptr_t) 'B'); + t30_set_phase_d_handler(t30, phase_d_handler, (void *) (intptr_t) 'B'); + t30_set_phase_e_handler(t30, phase_e_handler, (void *) (intptr_t) 'B'); + t30_set_ecm_capability(t30, use_ecm); + if (use_ecm) + t30_set_supported_compressions(t30, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION); + +#if defined(ENABLE_GUI) + if (use_gui) + start_media_monitor(); +#endif + for (;;) + { + t30_len_a = sf_readf_short(wave_handle, t30_amp_a, SAMPLES_PER_CHUNK); + + logging = t38_gateway_get_logging_state(t38_state_a); + span_log_bump_samples(logging, t30_len_a); + t38_core = t38_gateway_get_t38_core_state(t38_state_a); + logging = t38_core_get_logging_state(t38_core); + span_log_bump_samples(logging, t30_len_a); + logging = &t38_state_a->audio.modems.v17_rx.logging; + span_log_bump_samples(logging, t30_len_a); + + logging = t38_terminal_get_logging_state(t38_state_b); + span_log_bump_samples(logging, t30_len_a); + t38_core = t38_terminal_get_t38_core_state(t38_state_b); + logging = t38_core_get_logging_state(t38_core); + span_log_bump_samples(logging, t30_len_a); + + t30 = t38_terminal_get_t30_state(t38_state_b); + logging = t30_get_logging_state(t30); + span_log_bump_samples(logging, t30_len_a); + + t38_terminal_send_timeout(t38_state_b, t30_len_a); + + if (t38_gateway_rx(t38_state_a, t30_amp_a, t30_len_a)) + break; + + t38_len_a = t38_gateway_tx(t38_state_a, t38_amp_a, t30_len_a); + if (!use_transmit_on_idle) + { + if (t38_len_a < SAMPLES_PER_CHUNK) + { + memset(t38_amp_a + t38_len_a, 0, sizeof(int16_t)*(t30_len_a - t38_len_a)); + t38_len_a = t30_len_a; + } + } + + when += (float) t30_len_a/(float) SAMPLE_RATE; + + while ((msg_len = g1050_get(path_a_to_b, msg, 1024, when, &seq_no, &tx_when, &rx_when)) >= 0) + { +#if defined(ENABLE_GUI) + if (use_gui) + media_monitor_rx(seq_no, tx_when, rx_when); +#endif + t38_core = t38_terminal_get_t38_core_state(t38_state_b); + t38_core_rx_ifp_packet(t38_core, msg, msg_len, seq_no); + } + while ((msg_len = g1050_get(path_b_to_a, msg, 1024, when, &seq_no, &tx_when, &rx_when)) >= 0) + { +#if defined(ENABLE_GUI) + if (use_gui) + media_monitor_rx(seq_no, tx_when, rx_when); +#endif + t38_core = t38_gateway_get_t38_core_state(t38_state_a); + t38_core_rx_ifp_packet(t38_core, msg, msg_len, seq_no); + } + + if (done[0] && done[1]) + break; +#if defined(ENABLE_GUI) + if (use_gui) + media_monitor_update_display(); +#endif + } + t38_gateway_release(t38_state_a); + t38_terminal_release(t38_state_b); + if (sf_close(wave_handle) != 0) + { + fprintf(stderr, " Cannot close audio file '%s'\n", decode_test_file); + exit(2); + } + return 0; +} +/*- End of function --------------------------------------------------------*/ + int main(int argc, char *argv[]) { int16_t t38_amp_a[SAMPLES_PER_CHUNK]; @@ -203,42 +383,39 @@ int main(int argc, char *argv[]) uint8_t msg[1024]; int log_audio; int outframes; - int t38_version; - int use_ecm; - int use_tep; int feedback_audio; - int use_transmit_on_idle; SNDFILE *wave_handle; const char *input_file_name; int i; int seq_no; - int model_no; - int speed_pattern_no; double tx_when; double rx_when; - int supported_modems; - int use_gui; int opt; t30_state_t *t30; t38_core_state_t *t38_core; logging_state_t *logging; + char *decode_test_file; log_audio = FALSE; t38_version = 1; use_ecm = FALSE; input_file_name = INPUT_FILE_NAME; simulate_incrementing_repeats = FALSE; - model_no = 0; - speed_pattern_no = 1; + g1050_model_no = 0; + g1050_speed_pattern_no = 1; use_gui = FALSE; use_tep = FALSE; feedback_audio = FALSE; use_transmit_on_idle = TRUE; supported_modems = T30_SUPPORT_V27TER | T30_SUPPORT_V29 | T30_SUPPORT_V17; - while ((opt = getopt(argc, argv, "efgi:Ilm:M:s:tv:")) != -1) + decode_test_file = NULL; + while ((opt = getopt(argc, argv, "d:efgi:Ilm:M:s:tv:")) != -1) { switch (opt) { + case 'd': + decode_test_file = optarg; + break; case 'e': use_ecm = TRUE; break; @@ -266,10 +443,10 @@ int main(int argc, char *argv[]) supported_modems = atoi(optarg); break; case 'M': - model_no = optarg[0] - 'A' + 1; + g1050_model_no = optarg[0] - 'A' + 1; break; case 's': - speed_pattern_no = atoi(optarg); + g1050_speed_pattern_no = atoi(optarg); break; case 't': use_tep = TRUE; @@ -288,6 +465,12 @@ int main(int argc, char *argv[]) if (use_ecm) printf("Using ECM\n"); + if (decode_test_file) + { + decode_test(decode_test_file); + return 0; + } + wave_handle = NULL; if (log_audio) { @@ -299,12 +482,12 @@ int main(int argc, char *argv[]) } srand48(0x1234567); - if ((path_a_to_b = g1050_init(model_no, speed_pattern_no, 100, 33)) == NULL) + if ((path_a_to_b = g1050_init(g1050_model_no, g1050_speed_pattern_no, 100, 33)) == NULL) { fprintf(stderr, "Failed to start IP network path model\n"); exit(2); } - if ((path_b_to_a = g1050_init(model_no, speed_pattern_no, 100, 33)) == NULL) + if ((path_b_to_a = g1050_init(g1050_model_no, g1050_speed_pattern_no, 100, 33)) == NULL) { fprintf(stderr, "Failed to start IP network path model\n"); exit(2); @@ -357,6 +540,10 @@ int main(int argc, char *argv[]) span_log_set_level(logging, SPAN_LOG_DEBUG | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME); span_log_set_tag(logging, "T.38-A"); + logging = &t38_state_a->audio.modems.v17_rx.logging; + span_log_set_level(logging, SPAN_LOG_DEBUG | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME); + span_log_set_tag(logging, "V.17-A"); + memset(t38_amp_a, 0, sizeof(t38_amp_a)); if ((t38_state_b = t38_terminal_init(NULL, FALSE, tx_packet_handler_b, t38_state_a)) == NULL) @@ -401,11 +588,15 @@ int main(int argc, char *argv[]) t30 = fax_get_t30_state(fax_state_a); logging = t30_get_logging_state(t30); span_log_bump_samples(logging, SAMPLES_PER_CHUNK); + logging = t38_gateway_get_logging_state(t38_state_a); span_log_bump_samples(logging, SAMPLES_PER_CHUNK); t38_core = t38_gateway_get_t38_core_state(t38_state_a); logging = t38_core_get_logging_state(t38_core); span_log_bump_samples(logging, SAMPLES_PER_CHUNK); + logging = &t38_state_a->audio.modems.v17_rx.logging; + span_log_bump_samples(logging, t30_len_a); + logging = t38_terminal_get_logging_state(t38_state_b); span_log_bump_samples(logging, SAMPLES_PER_CHUNK); t38_core = t38_terminal_get_t38_core_state(t38_state_b); @@ -495,6 +686,7 @@ int main(int argc, char *argv[]) #endif } fax_release(fax_state_a); + t38_gateway_release(t38_state_a); t38_terminal_release(t38_state_b); if (log_audio) { diff --git a/libs/spandsp/tests/t38_non_ecm_buffer_tests.c b/libs/spandsp/tests/t38_non_ecm_buffer_tests.c index e8384c1f8c..64d81f71ac 100644 --- a/libs/spandsp/tests/t38_non_ecm_buffer_tests.c +++ b/libs/spandsp/tests/t38_non_ecm_buffer_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_non_ecm_buffer_tests.c,v 1.5.4.1 2009/12/19 06:43:28 steveu Exp $ */ /*! \file */ diff --git a/libs/spandsp/tests/t38_terminal_tests.c b/libs/spandsp/tests/t38_terminal_tests.c index 9dbece39a7..f0bda0b7f0 100644 --- a/libs/spandsp/tests/t38_terminal_tests.c +++ b/libs/spandsp/tests/t38_terminal_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_terminal_tests.c,v 1.67.4.1 2009/12/19 09:47:57 steveu Exp $ */ /*! \file */ @@ -199,10 +197,10 @@ int main(int argc, char *argv[]) int t38_version; int seq_no; int use_ecm; - int without_pacing; + int options; int use_tep; - int model_no; - int speed_pattern_no; + int g1050_model_no; + int g1050_speed_pattern_no; const char *input_file_name; double tx_when; double rx_when; @@ -214,16 +212,16 @@ int main(int argc, char *argv[]) logging_state_t *logging; t38_version = 1; - without_pacing = FALSE; + options = 0; use_tep = FALSE; input_file_name = INPUT_FILE_NAME; use_ecm = FALSE; simulate_incrementing_repeats = FALSE; - model_no = 0; - speed_pattern_no = 1; + g1050_model_no = 0; + g1050_speed_pattern_no = 1; use_gui = FALSE; supported_modems = T30_SUPPORT_V27TER | T30_SUPPORT_V29 | T30_SUPPORT_V17; - while ((opt = getopt(argc, argv, "efgi:Im:M:ps:tv:")) != -1) + while ((opt = getopt(argc, argv, "efgi:Im:M:o:s:tv:")) != -1) { switch (opt) { @@ -248,13 +246,13 @@ int main(int argc, char *argv[]) supported_modems = atoi(optarg); break; case 'M': - model_no = optarg[0] - 'A' + 1; + g1050_model_no = optarg[0] - 'A' + 1; break; - case 'p': - without_pacing = TRUE; + case 'o': + options = atoi(optarg); break; case 's': - speed_pattern_no = atoi(optarg); + g1050_speed_pattern_no = atoi(optarg); break; case 't': use_tep = TRUE; @@ -274,12 +272,12 @@ int main(int argc, char *argv[]) printf("Using ECM\n"); srand48(0x1234567); - if ((path_a_to_b = g1050_init(model_no, speed_pattern_no, 100, 33)) == NULL) + if ((path_a_to_b = g1050_init(g1050_model_no, g1050_speed_pattern_no, 100, 33)) == NULL) { fprintf(stderr, "Failed to start IP network path model\n"); exit(2); } - if ((path_b_to_a = g1050_init(model_no, speed_pattern_no, 100, 33)) == NULL) + if ((path_b_to_a = g1050_init(g1050_model_no, g1050_speed_pattern_no, 100, 33)) == NULL) { fprintf(stderr, "Failed to start IP network path model\n"); exit(2); @@ -293,7 +291,7 @@ int main(int argc, char *argv[]) t30 = t38_terminal_get_t30_state(t38_state_a); t38_core = t38_terminal_get_t38_core_state(t38_state_a); t38_set_t38_version(t38_core, t38_version); - t38_terminal_set_config(t38_state_a, without_pacing); + t38_terminal_set_config(t38_state_a, options); t38_terminal_set_tep_mode(t38_state_a, use_tep); logging = t38_terminal_get_logging_state(t38_state_a); @@ -317,7 +315,7 @@ int main(int argc, char *argv[]) t30_set_phase_e_handler(t30, phase_e_handler, (void *) (intptr_t) 'A'); t30_set_ecm_capability(t30, use_ecm); if (use_ecm) - t30_set_supported_compressions(t30, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION); + t30_set_supported_compressions(t30, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION | T30_SUPPORT_T85_COMPRESSION); if ((t38_state_b = t38_terminal_init(NULL, FALSE, tx_packet_handler_b, t38_state_a)) == NULL) { @@ -327,7 +325,7 @@ int main(int argc, char *argv[]) t30 = t38_terminal_get_t30_state(t38_state_b); t38_core = t38_terminal_get_t38_core_state(t38_state_b); t38_set_t38_version(t38_core, t38_version); - t38_terminal_set_config(t38_state_b, without_pacing); + t38_terminal_set_config(t38_state_b, options); t38_terminal_set_tep_mode(t38_state_b, use_tep); logging = t38_terminal_get_logging_state(t38_state_b); @@ -351,7 +349,7 @@ int main(int argc, char *argv[]) t30_set_phase_e_handler(t30, phase_e_handler, (void *) (intptr_t) 'B'); t30_set_ecm_capability(t30, use_ecm); if (use_ecm) - t30_set_supported_compressions(t30, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION); + t30_set_supported_compressions(t30, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION | T30_SUPPORT_T85_COMPRESSION); #if defined(ENABLE_GUI) if (use_gui) diff --git a/libs/spandsp/tests/t38_terminal_to_gateway_tests.c b/libs/spandsp/tests/t38_terminal_to_gateway_tests.c index f982f90926..d9484a0660 100644 --- a/libs/spandsp/tests/t38_terminal_to_gateway_tests.c +++ b/libs/spandsp/tests/t38_terminal_to_gateway_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t38_terminal_to_gateway_tests.c,v 1.65.4.1 2009/12/19 09:47:57 steveu Exp $ */ /*! \file */ @@ -212,8 +210,8 @@ int main(int argc, char *argv[]) const char *input_file_name; int i; int seq_no; - int model_no; - int speed_pattern_no; + int g1050_model_no; + int g1050_speed_pattern_no; double tx_when; double rx_when; int use_gui; @@ -228,8 +226,8 @@ int main(int argc, char *argv[]) use_ecm = FALSE; input_file_name = INPUT_FILE_NAME; simulate_incrementing_repeats = FALSE; - model_no = 0; - speed_pattern_no = 1; + g1050_model_no = 0; + g1050_speed_pattern_no = 1; use_gui = FALSE; use_tep = FALSE; feedback_audio = FALSE; @@ -266,10 +264,10 @@ int main(int argc, char *argv[]) supported_modems = atoi(optarg); break; case 'M': - model_no = optarg[0] - 'A' + 1; + g1050_model_no = optarg[0] - 'A' + 1; break; case 's': - speed_pattern_no = atoi(optarg); + g1050_speed_pattern_no = atoi(optarg); break; case 't': use_tep = TRUE; @@ -299,12 +297,12 @@ int main(int argc, char *argv[]) } srand48(0x1234567); - if ((path_a_to_b = g1050_init(model_no, speed_pattern_no, 100, 33)) == NULL) + if ((path_a_to_b = g1050_init(g1050_model_no, g1050_speed_pattern_no, 100, 33)) == NULL) { fprintf(stderr, "Failed to start IP network path model\n"); exit(2); } - if ((path_b_to_a = g1050_init(model_no, speed_pattern_no, 100, 33)) == NULL) + if ((path_b_to_a = g1050_init(g1050_model_no, g1050_speed_pattern_no, 100, 33)) == NULL) { fprintf(stderr, "Failed to start IP network path model\n"); exit(2); diff --git a/libs/spandsp/tests/t4_tests.c b/libs/spandsp/tests/t4_tests.c index 6d6830e9de..3b3188dd08 100644 --- a/libs/spandsp/tests/t4_tests.c +++ b/libs/spandsp/tests/t4_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t4_tests.c,v 1.69.4.1 2009/12/19 09:47:57 steveu Exp $ */ /*! \file */ @@ -99,6 +97,9 @@ static const char t4_test_patterns[][1728 + 1] = /* Line end codes to V(0) H(7,0). */ }; +int rows_written = 0; +int rows_read = 0; + static void dump_image_as_xxx(t4_state_t *state) { uint8_t *s; @@ -114,9 +115,7 @@ static void dump_image_as_xxx(t4_state_t *state) for (j = 0; j < state->bytes_per_row; j++) { for (k = 0; k < 8; k++) - { printf((state->image_buffer[i*state->bytes_per_row + j] & (0x80 >> k)) ? "X" : " "); - } } printf("\n"); } @@ -127,8 +126,10 @@ static void display_page_stats(t4_state_t *s) { t4_stats_t stats; - t4_get_transfer_statistics(s, &stats); + t4_rx_get_transfer_statistics(s, &stats); printf("Pages = %d\n", stats.pages_transferred); + printf("Compression = %s\n", t4_encoding_to_str(stats.encoding)); + printf("Compressed size = %d\n", stats.line_image_size); printf("Image size = %d pels x %d pels\n", stats.width, stats.length); printf("Image resolution = %d pels/m x %d pels/m\n", stats.x_resolution, stats.y_resolution); printf("Bad rows = %d\n", stats.bad_rows); @@ -142,12 +143,11 @@ static int row_read_handler(void *user_data, uint8_t buf[], size_t len) int i; int j; const char *s; - static int row = 0; /* Send the test pattern. */ - s = t4_test_patterns[row++]; - if (row >= 16) + if (rows_read >= 16) return 0; + s = t4_test_patterns[rows_read++]; memset(buf, 0, len); for (i = 0; i < len; i++) { @@ -158,7 +158,7 @@ static int row_read_handler(void *user_data, uint8_t buf[], size_t len) } } if (*s) - printf("Oops - '%c' at end of row %d\n", *s, row); + printf("Oops - '%c' at end of row %d\n", *s, rows_read); return len; } /*- End of function --------------------------------------------------------*/ @@ -168,15 +168,12 @@ static int row_write_handler(void *user_data, const uint8_t buf[], size_t len) int i; int j; const char *s; - static int row = 0; uint8_t ref[8192]; /* Verify that what is received matches the test pattern. */ if (len == 0) return 0; - s = t4_test_patterns[row++]; - if (row >= 16) - row = 0; + s = t4_test_patterns[rows_written++]; memset(ref, 0, len); for (i = 0; i < len; i++) { @@ -187,13 +184,13 @@ static int row_write_handler(void *user_data, const uint8_t buf[], size_t len) } } if (*s) - printf("Oops - '%c' at end of row %d\n", *s, row); + printf("Oops - '%c' at end of row %d\n", *s, rows_written); if (memcmp(buf, ref, len)) { - printf("Test failed at row %d\n", row); + printf("Test failed at row %d\n", rows_written); exit(2); } - return len; + return 0; } /*- End of function --------------------------------------------------------*/ @@ -223,7 +220,7 @@ static int detect_page_end(int bit, int page_ended) eol_zeros = 11; eol_ones = (page_ended == T4_COMPRESSION_ITU_T4_2D) ? 2 : 1; expected_eols = (page_ended == T4_COMPRESSION_ITU_T6) ? 2 : 6; - return FALSE; + return 0; } /* Monitor whether the EOLs are there in the correct amount */ @@ -286,11 +283,15 @@ int main(int argc, char *argv[]) T4_COMPRESSION_ITU_T4_1D, T4_COMPRESSION_ITU_T4_2D, T4_COMPRESSION_ITU_T6, - //T4_COMPRESSION_ITU_T85, +#if defined(SPANDSP_SUPPORT_T85) + T4_COMPRESSION_ITU_T85, + T4_COMPRESSION_ITU_T85_L0, +#endif //T4_COMPRESSION_ITU_T43, //T4_COMPRESSION_ITU_T45, //T4_COMPRESSION_ITU_T81, - //T4_COMPRESSION_ITU_SYCC_T81 + //T4_COMPRESSION_ITU_SYCC_T81, + -1 }; int sends; int page_no; @@ -301,6 +302,7 @@ int main(int argc, char *argv[]) int compression; int compression_step; int add_page_headers; + int overlay_page_headers; int min_row_bits; int restart_pages; int block_size; @@ -308,6 +310,7 @@ int main(int argc, char *argv[]) uint8_t block[1024]; const char *in_file_name; const char *decode_file_name; + const char *page_header_tz; int opt; int i; int bit_error_rate; @@ -322,16 +325,18 @@ int main(int argc, char *argv[]) compression = -1; compression_step = 0; add_page_headers = FALSE; + overlay_page_headers = FALSE; restart_pages = FALSE; in_file_name = IN_FILE_NAME; decode_file_name = NULL; + page_header_tz = NULL; /* Use a non-zero default minimum row length to ensure we test the consecutive EOLs part properly. */ min_row_bits = 50; - block_size = 0; + block_size = 1; bit_error_rate = 0; dump_as_xxx = FALSE; - while ((opt = getopt(argc, argv, "126b:d:ehri:m:x")) != -1) + while ((opt = getopt(argc, argv, "1268b:d:ehHri:m:t:x")) != -1) { switch (opt) { @@ -347,6 +352,12 @@ int main(int argc, char *argv[]) compression = T4_COMPRESSION_ITU_T6; compression_step = -1; break; +#if defined(SPANDSP_SUPPORT_T85) + case '8': + compression = T4_COMPRESSION_ITU_T85; + compression_step = -1; + break; +#endif case 'b': block_size = atoi(optarg); if (block_size > 1024) @@ -360,6 +371,11 @@ int main(int argc, char *argv[]) break; case 'h': add_page_headers = TRUE; + overlay_page_headers = FALSE; + break; + case 'H': + add_page_headers = TRUE; + overlay_page_headers = TRUE; break; case 'r': restart_pages = TRUE; @@ -370,6 +386,9 @@ int main(int argc, char *argv[]) case 'm': min_row_bits = atoi(optarg); break; + case 't': + page_header_tz = optarg; + break; case 'x': dump_as_xxx = TRUE; break; @@ -394,7 +413,7 @@ int main(int argc, char *argv[]) printf("Failed to init T.4 rx\n"); exit(2); } - span_log_set_level(&receive_state.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME | SPAN_LOG_FLOW); + span_log_set_level(&receive_state.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_FLOW); t4_rx_set_rx_encoding(&receive_state, compression); t4_rx_set_x_resolution(&receive_state, T4_X_RESOLUTION_R8); //t4_rx_set_y_resolution(&receive_state, T4_Y_RESOLUTION_FINE); @@ -444,6 +463,32 @@ int main(int argc, char *argv[]) break; } } + else if (strlen(buf) > 2 && sscanf(buf, "T.30 Rx: %x %x", (unsigned int *) &bit, (unsigned int *) &bit) == 2) + { + /* Useful for breaking up ECM logs */ + if (pkt_no != last_pkt_no + 1) + printf("Packet %u\n", pkt_no); + last_pkt_no = pkt_no; + for (i = 0; i < 256; i++) + { + if (sscanf(&buf[22 + 3*i], "%x", (unsigned int *) &bit) != 1) + break; + bit = bit_reverse8(bit); + if ((end_of_page = t4_rx_put_byte(&receive_state, bit))) + break; + } + } + else if (sscanf(buf, "%04x %02x %02x %02x", (unsigned int *) &bit, (unsigned int *) &bit, (unsigned int *) &bit, (unsigned int *) &bit) == 4) + { + for (i = 0; i < 16; i++) + { + if (sscanf(&buf[6 + 3*i], "%x", (unsigned int *) &bit) != 1) + break; + bit = bit_reverse8(bit); + if ((end_of_page = t4_rx_put_byte(&receive_state, bit))) + break; + } + } else if (sscanf(buf, "%08x %02x %02x %02x", (unsigned int *) &bit, (unsigned int *) &bit, (unsigned int *) &bit, (unsigned int *) &bit) == 4) { for (i = 0; i < 16; i++) @@ -481,9 +526,9 @@ int main(int argc, char *argv[]) printf("Failed to init T.4 tx\n"); exit(2); } - span_log_set_level(&send_state.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME | SPAN_LOG_FLOW); + span_log_set_level(&send_state.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_FLOW); t4_tx_set_row_read_handler(&send_state, row_read_handler, NULL); - t4_tx_set_min_row_bits(&send_state, min_row_bits); + t4_tx_set_min_bits_per_row(&send_state, min_row_bits); t4_tx_set_local_ident(&send_state, "111 2222 3333"); /* Receive end puts TIFF to a function. */ @@ -492,7 +537,7 @@ int main(int argc, char *argv[]) printf("Failed to init T.4 rx\n"); exit(2); } - span_log_set_level(&receive_state.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME | SPAN_LOG_FLOW); + span_log_set_level(&receive_state.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_FLOW); t4_rx_set_row_write_handler(&receive_state, row_write_handler, NULL); t4_rx_set_image_width(&receive_state, t4_tx_get_image_width(&send_state)); t4_rx_set_x_resolution(&receive_state, t4_tx_get_x_resolution(&send_state)); @@ -509,32 +554,86 @@ int main(int argc, char *argv[]) if (compression_step >= 0) { compression = compression_sequence[compression_step++]; - if (compression_step > 3) + if (compression < 0) break; } t4_tx_set_tx_encoding(&send_state, compression); t4_rx_set_rx_encoding(&receive_state, compression); + rows_read = 0; + rows_written = 0; if (t4_tx_start_page(&send_state)) break; - t4_rx_start_page(&receive_state); - do + if (t4_rx_start_page(&receive_state)) + break; + switch (block_size) { - bit = t4_tx_get_bit(&send_state); - if (bit == SIG_STATUS_END_OF_DATA) + case 0: + do { - if (++end_marks > 50) + bit = t4_tx_get_bit(&send_state); + if (bit == SIG_STATUS_END_OF_DATA) { - printf("Receiver missed the end of page mark\n"); - tests_failed++; - break; + if (++end_marks > 50) + { + printf("Receiver missed the end of page mark\n"); + tests_failed++; + break; + } + } + end_of_page = t4_rx_put_bit(&receive_state, bit & 1); + } + while (!end_of_page); + break; + case 1: + do + { + bit = t4_tx_get_byte(&send_state); + if ((bit & 0x100)) + { + if (++end_marks > 50) + { + printf("Receiver missed the end of page mark\n"); + tests_failed++; + break; + } + } + end_of_page = t4_rx_put_byte(&receive_state, bit & 0xFF); + } + while (!end_of_page); + if ((t4_tx_get_byte(&send_state) & 0x100) == 0) + { + printf("Page ended, but source is not reporting end of data\n"); + tests_failed++; + } + break; + default: + do + { + bit = t4_tx_get_chunk(&send_state, block, block_size); + if (bit > 0) + end_of_page = t4_rx_put_chunk(&receive_state, block, bit); + if (bit < block_size) + { + if (++end_marks > 50) + { + printf("Receiver missed the end of page mark\n"); + tests_failed++; + break; + } } } - end_of_page = t4_rx_put_bit(&receive_state, bit & 1); + while (!end_of_page); + break; } - while (!end_of_page); + display_page_stats(&receive_state); t4_tx_end_page(&send_state); t4_rx_end_page(&receive_state); + if (rows_read != (15 + 1) || rows_written != (15 + 1)) + { + printf("Test failed: %d rows read, %d rows written\n", rows_read, rows_written); + exit(2); + } if (compression_step < 0) break; } @@ -549,8 +648,8 @@ int main(int argc, char *argv[]) printf("Failed to init T.4 send\n"); exit(2); } - span_log_set_level(&send_state.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME | SPAN_LOG_FLOW); - t4_tx_set_min_row_bits(&send_state, min_row_bits); + span_log_set_level(&send_state.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_FLOW); + t4_tx_set_min_bits_per_row(&send_state, min_row_bits); t4_tx_set_local_ident(&send_state, "111 2222 3333"); /* Receive end puts TIFF to a new file. */ @@ -559,7 +658,7 @@ int main(int argc, char *argv[]) printf("Failed to init T.4 rx for '%s'\n", OUT_FILE_NAME); exit(2); } - span_log_set_level(&receive_state.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME | SPAN_LOG_FLOW); + span_log_set_level(&receive_state.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_FLOW); t4_rx_set_x_resolution(&receive_state, t4_tx_get_x_resolution(&send_state)); t4_rx_set_y_resolution(&receive_state, t4_tx_get_y_resolution(&send_state)); t4_rx_set_image_width(&receive_state, t4_tx_get_image_width(&send_state)); @@ -578,6 +677,9 @@ int main(int argc, char *argv[]) t4_tx_set_header_info(&send_state, "Header"); else t4_tx_set_header_info(&send_state, NULL); + if (page_header_tz && page_header_tz[0]) + t4_tx_set_header_tz(&send_state, page_header_tz); + //t4_tx_set_header_overlays_image(&send_state, overlay_page_headers); if (restart_pages && (sends & 1)) { /* Use restart, to send the page a second time */ @@ -589,8 +691,11 @@ int main(int argc, char *argv[]) if (compression_step >= 0) { compression = compression_sequence[compression_step++]; - if (compression_step > 2) + if (compression < 0) + { compression_step = 0; + compression = compression_sequence[compression_step++]; + } } t4_tx_set_tx_encoding(&send_state, compression); t4_rx_set_rx_encoding(&receive_state, compression); @@ -601,8 +706,9 @@ int main(int argc, char *argv[]) t4_rx_start_page(&receive_state); detect_page_end(-1000000, compression); page_ended = FALSE; - if (block_size == 0) + switch (block_size) { + case 0: for (;;) { bit = t4_tx_get_bit(&send_state); @@ -629,9 +735,8 @@ int main(int argc, char *argv[]) { t4_rx_put_bit(&receive_state, (rand() >> 10) & 1); } - } - else if (block_size == 1) - { + break; + case 1: do { bit = t4_tx_get_byte(&send_state); @@ -647,9 +752,13 @@ int main(int argc, char *argv[]) end_of_page = t4_rx_put_byte(&receive_state, bit & 0xFF); } while (!end_of_page); - } - else - { + if ((t4_tx_get_byte(&send_state) & 0x100) == 0) + { + printf("Page ended, but source is not reporting end of data\n"); + tests_failed++; + } + break; + default: do { bit = t4_tx_get_chunk(&send_state, block, block_size); @@ -666,6 +775,7 @@ int main(int argc, char *argv[]) } } while (!end_of_page); + break; } if (dump_as_xxx) dump_image_as_xxx(&receive_state); diff --git a/libs/spandsp/tests/testadsi.c b/libs/spandsp/tests/testadsi.c index d98fa19de1..dc578a6ecd 100644 --- a/libs/spandsp/tests/testadsi.c +++ b/libs/spandsp/tests/testadsi.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: testadsi.c,v 1.23 2009/05/30 15:23:14 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/tests/testfax.c b/libs/spandsp/tests/testfax.c index 2e4a75d082..e484ee898c 100644 --- a/libs/spandsp/tests/testfax.c +++ b/libs/spandsp/tests/testfax.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: testfax.c,v 1.33 2009/05/30 15:23:14 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/tests/time_scale_tests.c b/libs/spandsp/tests/time_scale_tests.c index 3f66e9a813..b642b0c72e 100644 --- a/libs/spandsp/tests/time_scale_tests.c +++ b/libs/spandsp/tests/time_scale_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: time_scale_tests.c,v 1.24 2009/05/30 15:23:14 steveu Exp $ */ /*! \page time_scale_tests_page Time scaling tests diff --git a/libs/spandsp/tests/tone_detect_tests.c b/libs/spandsp/tests/tone_detect_tests.c index 4ae6c703f9..9375f157a2 100644 --- a/libs/spandsp/tests/tone_detect_tests.c +++ b/libs/spandsp/tests/tone_detect_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: tone_detect_tests.c,v 1.12 2009/05/30 15:23:14 steveu Exp $ */ /*! \page tone_detect_tests_page Tone detection tests diff --git a/libs/spandsp/tests/tone_generate_tests.c b/libs/spandsp/tests/tone_generate_tests.c index 1e5035510f..d1614f1626 100644 --- a/libs/spandsp/tests/tone_generate_tests.c +++ b/libs/spandsp/tests/tone_generate_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: tone_generate_tests.c,v 1.23 2010/05/22 13:20:18 steveu Exp $ */ /*! \page tone_generate_tests_page Tone generation tests diff --git a/libs/spandsp/tests/tsb85_tests.c b/libs/spandsp/tests/tsb85_tests.c index d8b5da7c96..ffab4e7737 100644 --- a/libs/spandsp/tests/tsb85_tests.c +++ b/libs/spandsp/tests/tsb85_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: tsb85_tests.c,v 1.32 2009/05/30 15:23:14 steveu Exp $ */ /*! \file */ @@ -449,16 +447,16 @@ static int string_to_msg(uint8_t msg[], uint8_t mask[], const char buf[]) while (*t) { /* Skip white space */ - while (isspace(*t)) + while (isspace((int) *t)) t++; /* If we find ... we allow arbitrary addition info beyond this point in the message */ if (t[0] == '.' && t[1] == '.' && t[2] == '.') { return -i; } - else if (isxdigit(*t)) + else if (isxdigit((int) *t)) { - for ( ; isxdigit(*t); t++) + for ( ; isxdigit((int) *t); t++) { x = *t; if (x >= 'a') @@ -474,7 +472,7 @@ static int string_to_msg(uint8_t msg[], uint8_t mask[], const char buf[]) { /* There is a mask following the byte */ mask[i] = 0; - for (t++; isxdigit(*t); t++) + for (t++; isxdigit((int) *t); t++) { x = *t; if (x >= 'a') @@ -486,7 +484,7 @@ static int string_to_msg(uint8_t msg[], uint8_t mask[], const char buf[]) mask[i] = (mask[i] << 4) | x; } } - if (*t && !isspace(*t)) + if (*t && !isspace((int) *t)) { /* Bad string */ return 0; @@ -557,12 +555,12 @@ static void corrupt_image(faxtester_state_t *s, uint8_t image[], int len, const t = bad_rows; while (*t) { - while (isspace(*t)) + while (isspace((int) *t)) t++; if (sscanf(t, "%d", &list[x]) < 1) break; x++; - while (isdigit(*t)) + while (isdigit((int) *t)) t++; if (*t == ',') t++; @@ -630,7 +628,7 @@ static int next_step(faxtester_state_t *s) int compression_type; int timer; int len; - t4_state_t t4_state; + t4_state_t t4_tx_state; t30_state_t *t30; if (s->cur == NULL) @@ -966,14 +964,14 @@ printf("Push '%s'\n", next_tx_file); /* A non-ECM page */ min_row_bits = (min_bits) ? atoi((const char *) min_bits) : 0; sprintf(path, "%s/%s", image_path, (const char *) value); - if (t4_tx_init(&t4_state, path, -1, -1) == NULL) + if (t4_tx_init(&t4_tx_state, path, -1, -1) == NULL) { span_log(&s->logging, SPAN_LOG_FLOW, "Failed to init T.4 send\n"); printf("Test failed\n"); exit(2); } - t4_tx_set_min_row_bits(&t4_state, min_row_bits); - t4_tx_set_header_info(&t4_state, NULL); + t4_tx_set_min_bits_per_row(&t4_tx_state, min_row_bits); + t4_tx_set_header_info(&t4_tx_state, NULL); compression_type = T4_COMPRESSION_ITU_T4_1D; if (compression) { @@ -982,20 +980,20 @@ printf("Push '%s'\n", next_tx_file); else if (strcasecmp((const char *) compression, "T.6") == 0) compression_type = T4_COMPRESSION_ITU_T6; } - t4_tx_set_tx_encoding(&t4_state, compression_type); - if (t4_tx_start_page(&t4_state)) + t4_tx_set_tx_encoding(&t4_tx_state, compression_type); + if (t4_tx_start_page(&t4_tx_state)) { span_log(&s->logging, SPAN_LOG_FLOW, "Failed to start T.4 send\n"); printf("Test failed\n"); exit(2); } - len = t4_tx_get_chunk(&t4_state, image, sizeof(image)); + len = t4_tx_get_chunk(&t4_tx_state, image, sizeof(image)); if (bad_rows) { span_log(&s->logging, SPAN_LOG_FLOW, "We need to corrupt the image\n"); corrupt_image(s, image, len, (const char *) bad_rows); } - t4_tx_release(&t4_state); + t4_tx_release(&t4_tx_state); span_log(&s->logging, SPAN_LOG_FLOW, "Non-ECM image is %d bytes\n", len); faxtester_set_non_ecm_image_buffer(s, image, len); } @@ -1006,14 +1004,14 @@ printf("Push '%s'\n", next_tx_file); ecm_frame_size = (frame_size) ? atoi((const char *) frame_size) : 64; i = (crc_error) ? atoi((const char *) crc_error) : -1; sprintf(path, "%s/%s", image_path, (const char *) value); - if (t4_tx_init(&t4_state, path, -1, -1) == NULL) + if (t4_tx_init(&t4_tx_state, path, -1, -1) == NULL) { span_log(&s->logging, SPAN_LOG_FLOW, "Failed to init T.4 send\n"); printf("Test failed\n"); exit(2); } - t4_tx_set_min_row_bits(&t4_state, min_row_bits); - t4_tx_set_header_info(&t4_state, NULL); + t4_tx_set_min_bits_per_row(&t4_tx_state, min_row_bits); + t4_tx_set_header_info(&t4_tx_state, NULL); compression_type = T4_COMPRESSION_ITU_T4_1D; if (compression) { @@ -1022,22 +1020,22 @@ printf("Push '%s'\n", next_tx_file); else if (strcasecmp((const char *) compression, "T.6") == 0) compression_type = T4_COMPRESSION_ITU_T6; } - t4_tx_set_tx_encoding(&t4_state, compression_type); - if (t4_tx_start_page(&t4_state)) + t4_tx_set_tx_encoding(&t4_tx_state, compression_type); + if (t4_tx_start_page(&t4_tx_state)) { span_log(&s->logging, SPAN_LOG_FLOW, "Failed to start T.4 send\n"); printf("Test failed\n"); exit(2); } /*endif*/ - len = t4_tx_get_chunk(&t4_state, image, sizeof(image)); + len = t4_tx_get_chunk(&t4_tx_state, image, sizeof(image)); if (bad_rows) { span_log(&s->logging, SPAN_LOG_FLOW, "We need to corrupt the image\n"); corrupt_image(s, image, len, (const char *) bad_rows); } /*endif*/ - t4_tx_release(&t4_state); + t4_tx_release(&t4_tx_state); span_log(&s->logging, SPAN_LOG_FLOW, "ECM image is %d bytes\n", len); faxtester_set_ecm_image_buffer(s, image, len, ecm_block, ecm_frame_size, i); } @@ -1287,20 +1285,40 @@ static int get_test_set(faxtester_state_t *s, const char *test_file, const char int main(int argc, char *argv[]) { + const char *xml_file_name; const char *test_name; + int opt; - //string_test(); +#if 0 + string_test(); +#endif + xml_file_name = "../spandsp/tsb85.xml"; test_name = "MRGN01"; - if (argc > 1) - test_name = argv[1]; + while ((opt = getopt(argc, argv, "x:")) != -1) + { + switch (opt) + { + case 'x': + xml_file_name = optarg; + break; + default: + //usage(); + exit(2); + break; + } + } + argc -= optind; + argv += optind; + if (argc > 0) + test_name = argv[0]; strcpy(image_path, "."); faxtester_init(&state, TRUE); memset(&expected_rx_info, 0, sizeof(expected_rx_info)); span_log_set_level(&state.logging, SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_SHOW_TAG | SPAN_LOG_SHOW_SAMPLE_TIME | SPAN_LOG_FLOW); span_log_set_tag(&state.logging, "B"); - get_test_set(&state, "../spandsp/tsb85.xml", test_name); + get_test_set(&state, xml_file_name, test_name); printf("Done\n"); return 0; } diff --git a/libs/spandsp/tests/tsb85_tests.sh b/libs/spandsp/tests/tsb85_tests.sh index 31cf6aedae..adb0e53a84 100755 --- a/libs/spandsp/tests/tsb85_tests.sh +++ b/libs/spandsp/tests/tsb85_tests.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # # spandsp fax tests # @@ -14,9 +14,6 @@ # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# $Id: tsb85_tests.sh,v 1.8 2009/05/24 07:18:36 steveu Exp $ -# run_tsb85_test() { diff --git a/libs/spandsp/tests/udptl.c b/libs/spandsp/tests/udptl.c new file mode 100644 index 0000000000..553eba20e7 --- /dev/null +++ b/libs/spandsp/tests/udptl.c @@ -0,0 +1,592 @@ +//#define UDPTL_DEBUG +/* + * SpanDSP - a series of DSP components for telephony + * + * udptl.c + * + * Written by Steve Underwood + * + * Copyright (C) 2009 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +#include "udptl.h" + +#define FALSE 0 +#define TRUE (!FALSE) + +static int decode_length(const uint8_t *buf, int limit, int *len, int *pvalue) +{ + if (*len >= limit) + return -1; + if ((buf[*len] & 0x80) == 0) + { + *pvalue = buf[(*len)++]; + return 0; + } + if ((buf[*len] & 0x40) == 0) + { + if (*len >= limit - 1) + return -1; + *pvalue = (buf[(*len)++] & 0x3F) << 8; + *pvalue |= buf[(*len)++]; + return 0; + } + *pvalue = (buf[(*len)++] & 0x3F) << 14; + /* Indicate we have a fragment */ + return 1; +} +/*- End of function --------------------------------------------------------*/ + +static int decode_open_type(const uint8_t *buf, int limit, int *len, const uint8_t ** p_object, int *p_num_octets) +{ + int octet_cnt; + int octet_idx; + int stat; + int i; + const uint8_t **pbuf; + + for (octet_idx = 0, *p_num_octets = 0;; octet_idx += octet_cnt) + { + if ((stat = decode_length(buf, limit, len, &octet_cnt)) < 0) + return -1; + if (octet_cnt > 0) + { + *p_num_octets += octet_cnt; + + pbuf = &p_object[octet_idx]; + i = 0; + /* Make sure the buffer contains at least the number of bits requested */ + if ((*len + octet_cnt) > limit) + return -1; + + *pbuf = &buf[*len]; + *len += octet_cnt; + } + if (stat == 0) + break; + } + return 0; +} +/*- End of function --------------------------------------------------------*/ + +static int encode_length(uint8_t *buf, int *len, int value) +{ + int multiplier; + + if (value < 0x80) + { + /* 1 octet */ + buf[(*len)++] = value; + return value; + } + if (value < 0x4000) + { + /* 2 octets */ + /* Set the first bit of the first octet */ + buf[(*len)++] = ((0x8000 | value) >> 8) & 0xFF; + buf[(*len)++] = value & 0xFF; + return value; + } + /* Fragmentation */ + multiplier = (value < 0x10000) ? (value >> 14) : 4; + /* Set the first 2 bits of the octet */ + buf[(*len)++] = 0xC0 | multiplier; + return multiplier << 14; +} +/*- End of function --------------------------------------------------------*/ + +static int encode_open_type(uint8_t *buf, int *len, const uint8_t *data, int num_octets) +{ + int enclen; + int octet_idx; + uint8_t zero_byte; + + /* If open type is of zero length, add a single zero byte (10.1) */ + if (num_octets == 0) + { + zero_byte = 0; + data = &zero_byte; + num_octets = 1; + } + /* Encode the open type */ + for (octet_idx = 0;; num_octets -= enclen, octet_idx += enclen) + { + if ((enclen = encode_length(buf, len, num_octets)) < 0) + return -1; + if (enclen > 0) + { + memcpy(&buf[*len], &data[octet_idx], enclen); + *len += enclen; + } + if (enclen >= num_octets) + break; + } + + return 0; +} +/*- End of function --------------------------------------------------------*/ + +int udptl_rx_packet(udptl_state_t *s, const uint8_t buf[], int len) +{ + int stat; + int stat2; + int i; + int j; + int k; + int l; + int m; + int x; + int limit; + int which; + int ptr; + int count; + int total_count; + int seq_no; + const uint8_t *msg; + const uint8_t *data; + int msg_len; + int repaired[16]; + const uint8_t *bufs[16]; + int lengths[16]; + int span; + int entries; + + ptr = 0; + /* Decode seq_number */ + if (ptr + 2 > len) + return -1; + seq_no = (buf[0] << 8) | buf[1]; + ptr += 2; + /* Break out the primary packet */ + if ((stat = decode_open_type(buf, len, &ptr, &msg, &msg_len)) != 0) + return -1; + /* Decode error_recovery */ + if (ptr + 1 > len) + return -1; + /* Our buffers cannot tolerate overlength packets */ + if (msg_len > LOCAL_FAX_MAX_DATAGRAM) + return -1; + /* Update any missed slots in the buffer */ + for (i = s->rx_seq_no; seq_no > i; i++) + { + x = i & UDPTL_BUF_MASK; + s->rx[x].buf_len = -1; + s->rx[x].fec_len[0] = 0; + s->rx[x].fec_span = 0; + s->rx[x].fec_entries = 0; + } + /* Save the new packet. Pure redundancy mode won't use this, but some systems will switch + into FEC mode after sending some redundant packets. */ + x = seq_no & UDPTL_BUF_MASK; + memcpy(s->rx[x].buf, msg, msg_len); + s->rx[x].buf_len = msg_len; + s->rx[x].fec_len[0] = 0; + s->rx[x].fec_span = 0; + s->rx[x].fec_entries = 0; + if ((buf[ptr++] & 0x80) == 0) + { + /* Secondary packet mode for error recovery */ + /* We might have the packet we want, but we need to check through + the redundant stuff, and verify the integrity of the UDPTL. + This greatly reduces our chances of accepting garbage. */ + total_count = 0; + do + { + if ((stat2 = decode_length(buf, len, &ptr, &count)) < 0) + return -1; + for (i = 0; i < count; i++) + { + if ((stat = decode_open_type(buf, len, &ptr, &bufs[total_count + i], &lengths[total_count + i])) != 0) + return -1; + } + total_count += count; + } + while (stat2 > 0); + /* We should now be exactly at the end of the packet. If not, this is a fault. */ + if (ptr != len) + return -1; + if (seq_no > s->rx_seq_no) + { + /* We received a later packet than we expected, so we need to check if we can fill in the gap from the + secondary packets. */ + /* Step through in reverse order, so we go oldest to newest */ + for (i = total_count; i > 0; i--) + { + if (seq_no - i >= s->rx_seq_no) + { + /* This one wasn't seen before */ + /* Decode the secondary packet */ +#if defined(UDPTL_DEBUG) + fprintf(stderr, "Secondary %d, len %d\n", seq_no - i, lengths[i - 1]); +#endif + /* Save the new packet. Redundancy mode won't use this, but some systems will switch into + FEC mode after sending some redundant packets, and this may then be important. */ + x = (seq_no - i) & UDPTL_BUF_MASK; + memcpy(s->rx[x].buf, bufs[i - 1], lengths[i - 1]); + s->rx[x].buf_len = lengths[i - 1]; + s->rx[x].fec_len[0] = 0; + s->rx[x].fec_span = 0; + s->rx[x].fec_entries = 0; + if (s->rx_packet_handler(s->user_data, bufs[i - 1], lengths[i - 1], seq_no - i) < 0) + fprintf(stderr, "Bad IFP\n"); + } + } + } + } + else + { + /* FEC mode for error recovery */ + + /* Decode the FEC packets */ + /* The span is defined as an unconstrained integer, but will never be more + than a small value. */ + if (ptr + 2 > len) + return -1; + if (buf[ptr++] != 1) + return -1; + span = buf[ptr++]; + + x = seq_no & UDPTL_BUF_MASK; + + s->rx[x].fec_span = span; + + memset(repaired, 0, sizeof(repaired)); + repaired[x] = TRUE; + + /* The number of entries is defined as a length, but will only ever be a small + value. Treat it as such. */ + if (ptr + 1 > len) + return -1; + entries = buf[ptr++]; + s->rx[x].fec_entries = entries; + + /* Decode the elements */ + for (i = 0; i < entries; i++) + { + if ((stat = decode_open_type(buf, len, &ptr, &data, &s->rx[x].fec_len[i])) != 0) + return -1; + if (s->rx[x].fec_len[i] > LOCAL_FAX_MAX_DATAGRAM) + return -1; + + /* Save the new FEC data */ + memcpy(s->rx[x].fec[i], data, s->rx[x].fec_len[i]); +#if 0 + fprintf(stderr, "FEC: "); + for (j = 0; j < s->rx[x].fec_len[i]; j++) + fprintf(stderr, "%02X ", data[j]); + fprintf(stderr, "\n"); +#endif + } + /* We should now be exactly at the end of the packet. If not, this is a fault. */ + if (ptr != len) + return -1; + /* See if we can reconstruct anything which is missing */ + /* TODO: this does not comprehensively hunt back and repair everything that is possible */ + for (l = x; l != ((x - (16 - span * entries)) & UDPTL_BUF_MASK); l = (l - 1) & UDPTL_BUF_MASK) + { + if (s->rx[l].fec_len[0] <= 0) + continue; + for (m = 0; m < s->rx[l].fec_entries; m++) + { + limit = (l + m) & UDPTL_BUF_MASK; + for (which = -1, k = (limit - s->rx[l].fec_span * s->rx[l].fec_entries) & UDPTL_BUF_MASK; k != limit; + k = (k + s->rx[l].fec_entries) & UDPTL_BUF_MASK) + { + if (s->rx[k].buf_len <= 0) + which = (which == -1) ? k : -2; + } + if (which >= 0) + { + /* Repairable */ + for (j = 0; j < s->rx[l].fec_len[m]; j++) + { + s->rx[which].buf[j] = s->rx[l].fec[m][j]; + for (k = (limit - s->rx[l].fec_span * s->rx[l].fec_entries) & UDPTL_BUF_MASK; k != limit; + k = (k + s->rx[l].fec_entries) & UDPTL_BUF_MASK) + s->rx[which].buf[j] ^= (s->rx[k].buf_len > j) ? s->rx[k].buf[j] : 0; + } + s->rx[which].buf_len = s->rx[l].fec_len[m]; + repaired[which] = TRUE; + } + } + } + /* Now play any new packets forwards in time */ + for (l = (x + 1) & UDPTL_BUF_MASK, j = seq_no - UDPTL_BUF_MASK; l != x; l = (l + 1) & UDPTL_BUF_MASK, j++) + { + if (repaired[l]) + { +#if defined(UDPTL_DEBUG) + fprintf(stderr, "Fixed packet %d, len %d\n", j, l); +#endif + if (s->rx_packet_handler(s->user_data, s->rx[l].buf, s->rx[l].buf_len, j) < 0) + fprintf(stderr, "Bad IFP\n"); + } + } + } + /* If packets are received out of sequence, we may have already processed this packet from the error + recovery information in a packet already received. */ + if (seq_no >= s->rx_seq_no) + { + /* Decode the primary packet */ +#if defined(UDPTL_DEBUG) + fprintf(stderr, "Primary packet %d, len %d\n", seq_no, msg_len); +#endif + if (s->rx_packet_handler(s->user_data, msg, msg_len, seq_no) < 0) + fprintf(stderr, "Bad IFP\n"); + } + + s->rx_seq_no = (seq_no + 1) & 0xFFFF; + return 0; +} +/*- End of function --------------------------------------------------------*/ + +int udptl_build_packet(udptl_state_t *s, uint8_t buf[], const uint8_t msg[], int msg_len) +{ + uint8_t fec[LOCAL_FAX_MAX_DATAGRAM]; + int i; + int j; + int seq; + int entry; + int entries; + int span; + int m; + int len; + int limit; + int high_tide; + + /* UDPTL cannot cope with zero length messages, and our buffering for redundancy limits their + maximum length. */ + if (msg_len < 1 || msg_len > LOCAL_FAX_MAX_DATAGRAM) + return -1; + seq = s->tx_seq_no & 0xFFFF; + + /* Map the sequence number to an entry in the circular buffer */ + entry = seq & UDPTL_BUF_MASK; + + /* We save the message in a circular buffer, for generating FEC or + redundancy sets later on. */ + s->tx[entry].buf_len = msg_len; + memcpy(s->tx[entry].buf, msg, msg_len); + + /* Build the UDPTL packet */ + + len = 0; + /* Encode the sequence number */ + buf[len++] = (seq >> 8) & 0xFF; + buf[len++] = seq & 0xFF; + + /* Encode the primary packet */ + if (encode_open_type(buf, &len, msg, msg_len) < 0) + return -1; + + /* Encode the appropriate type of error recovery information */ + switch (s->error_correction_scheme) + { + case UDPTL_ERROR_CORRECTION_NONE: + /* Encode the error recovery type */ + buf[len++] = 0x00; + /* The number of entries will always be zero, so it is pointless allowing + for the fragmented case here. */ + if (encode_length(buf, &len, 0) < 0) + return -1; + break; + case UDPTL_ERROR_CORRECTION_REDUNDANCY: + /* Encode the error recovery type */ + buf[len++] = 0x00; + if (s->tx_seq_no > s->error_correction_entries) + entries = s->error_correction_entries; + else + entries = s->tx_seq_no; + /* The number of entries will always be small, so it is pointless allowing + for the fragmented case here. */ + if (encode_length(buf, &len, entries) < 0) + return -1; + /* Encode the elements */ + for (i = 0; i < entries; i++) + { + j = (entry - i - 1) & UDPTL_BUF_MASK; + if (encode_open_type(buf, &len, s->tx[j].buf, s->tx[j].buf_len) < 0) + return -1; + } + break; + case UDPTL_ERROR_CORRECTION_FEC: + span = s->error_correction_span; + entries = s->error_correction_entries; + if (seq < s->error_correction_span * s->error_correction_entries) + { + /* In the initial stages, wind up the FEC smoothly */ + entries = seq / s->error_correction_span; + if (seq < s->error_correction_span) + span = 0; + } + /* Encode the error recovery type */ + buf[len++] = 0x80; + /* Span is defined as an inconstrained integer, which it dumb. It will only + ever be a small value. Treat it as such. */ + buf[len++] = 1; + buf[len++] = span; + /* The number of entries is defined as a length, but will only ever be a small + value. Treat it as such. */ + buf[len++] = entries; + for (m = 0; m < entries; m++) + { + /* Make an XOR'ed entry the maximum length */ + limit = (entry + m) & UDPTL_BUF_MASK; + high_tide = 0; + for (i = (limit - span * entries) & UDPTL_BUF_MASK; i != limit; i = (i + entries) & UDPTL_BUF_MASK) + { + if (high_tide < s->tx[i].buf_len) + { + for (j = 0; j < high_tide; j++) + fec[j] ^= s->tx[i].buf[j]; + for (; j < s->tx[i].buf_len; j++) + fec[j] = s->tx[i].buf[j]; + high_tide = s->tx[i].buf_len; + } + else + { + for (j = 0; j < s->tx[i].buf_len; j++) + fec[j] ^= s->tx[i].buf[j]; + } + } + if (encode_open_type(buf, &len, fec, high_tide) < 0) + return -1; + } + break; + } + + if (s->verbose) + fprintf(stderr, "\n"); + s->tx_seq_no++; + return len; +} +/*- End of function --------------------------------------------------------*/ + +int udptl_set_error_correction(udptl_state_t *s, int ec_scheme, int span, int entries) +{ + switch (ec_scheme) + { + case UDPTL_ERROR_CORRECTION_FEC: + case UDPTL_ERROR_CORRECTION_REDUNDANCY: + case UDPTL_ERROR_CORRECTION_NONE: + s->error_correction_scheme = ec_scheme; + break; + case -1: + /* Just don't change the scheme */ + break; + default: + return -1; + } + if (span >= 0) + s->error_correction_span = span; + if (entries >= 0) + s->error_correction_entries = entries; + return 0; +} +/*- End of function --------------------------------------------------------*/ + +int udptl_get_error_correction(udptl_state_t *s, int *ec_scheme, int *span, int *entries) +{ + if (ec_scheme) + *ec_scheme = s->error_correction_scheme; + if (span) + *span = s->error_correction_span; + if (entries) + *entries = s->error_correction_entries; + return 0; +} +/*- End of function --------------------------------------------------------*/ + +int udptl_set_local_max_datagram(udptl_state_t *s, int max_datagram) +{ + s->local_max_datagram_size = max_datagram; + return 0; +} +/*- End of function --------------------------------------------------------*/ + +int udptl_get_local_max_datagram(udptl_state_t *s) +{ + return s->local_max_datagram_size; +} +/*- End of function --------------------------------------------------------*/ + +int udptl_set_far_max_datagram(udptl_state_t *s, int max_datagram) +{ + s->far_max_datagram_size = max_datagram; + return 0; +} +/*- End of function --------------------------------------------------------*/ + +int udptl_get_far_max_datagram(udptl_state_t *s) +{ + return s->far_max_datagram_size; +} +/*- End of function --------------------------------------------------------*/ + +udptl_state_t *udptl_init(udptl_state_t *s, int ec_scheme, int span, int entries, udptl_rx_packet_handler_t rx_packet_handler, void *user_data) +{ + int i; + + if (rx_packet_handler == NULL) + return NULL; + + if (s == NULL) + { + if ((s = (udptl_state_t *) malloc(sizeof(*s))) == NULL) + return NULL; + } + memset(s, 0, sizeof(*s)); + + s->error_correction_scheme = ec_scheme; + s->error_correction_span = span; + s->error_correction_entries = entries; + + s->far_max_datagram_size = LOCAL_FAX_MAX_DATAGRAM; + s->local_max_datagram_size = LOCAL_FAX_MAX_DATAGRAM; + + memset(&s->rx, 0, sizeof(s->rx)); + memset(&s->tx, 0, sizeof(s->tx)); + for (i = 0; i <= UDPTL_BUF_MASK; i++) + { + s->rx[i].buf_len = -1; + s->tx[i].buf_len = -1; + } + + s->rx_packet_handler = rx_packet_handler; + s->user_data = user_data; + + return s; +} +/*- End of function --------------------------------------------------------*/ + +int udptl_release(udptl_state_t *s) +{ + return 0; +} +/*- End of function --------------------------------------------------------*/ +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/tests/udptl.h b/libs/spandsp/tests/udptl.h new file mode 100644 index 0000000000..23563ad484 --- /dev/null +++ b/libs/spandsp/tests/udptl.h @@ -0,0 +1,158 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * udptl.c + * + * Written by Steve Underwood + * + * Copyright (C) 2009 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(_SPANDSP_UDPTL_H_) +#define _SPANDSP_UDPTL_H_ + +#define LOCAL_FAX_MAX_DATAGRAM 400 +#define LOCAL_FAX_MAX_FEC_PACKETS 5 + +#define UDPTL_BUF_MASK 15 + +typedef int (udptl_rx_packet_handler_t) (void *user_data, const uint8_t msg[], int len, int seq_no); + +typedef struct +{ + int buf_len; + uint8_t buf[LOCAL_FAX_MAX_DATAGRAM]; +} udptl_fec_tx_buffer_t; + +typedef struct +{ + int buf_len; + uint8_t buf[LOCAL_FAX_MAX_DATAGRAM]; + int fec_len[LOCAL_FAX_MAX_FEC_PACKETS]; + uint8_t fec[LOCAL_FAX_MAX_FEC_PACKETS][LOCAL_FAX_MAX_DATAGRAM]; + int fec_span; + int fec_entries; +} udptl_fec_rx_buffer_t; + +struct udptl_state_s +{ + udptl_rx_packet_handler_t *rx_packet_handler; + void *user_data; + + /*! This option indicates the error correction scheme used in transmitted UDPTL + packets. */ + int error_correction_scheme; + + /*! This option indicates the number of error correction entries transmitted in + UDPTL packets. */ + int error_correction_entries; + + /*! This option indicates the span of the error correction entries in transmitted + UDPTL packets (FEC only). */ + int error_correction_span; + + /*! This option indicates the maximum size of a datagram that can be accepted by + the remote device. */ + int far_max_datagram_size; + + /*! This option indicates the maximum size of a datagram that we are prepared to + accept. */ + int local_max_datagram_size; + + int verbose; + + int tx_seq_no; + int rx_seq_no; + int rx_expected_seq_no; + + udptl_fec_tx_buffer_t tx[UDPTL_BUF_MASK + 1]; + udptl_fec_rx_buffer_t rx[UDPTL_BUF_MASK + 1]; +}; + +enum +{ + UDPTL_ERROR_CORRECTION_NONE, + UDPTL_ERROR_CORRECTION_FEC, + UDPTL_ERROR_CORRECTION_REDUNDANCY +}; + +typedef struct udptl_state_s udptl_state_t; + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! \brief Process an arriving UDPTL packet. + \param s The UDPTL context. + \param buf The UDPTL packet buffer. + \param len The length of the packet. + \return 0 for OK. */ +int udptl_rx_packet(udptl_state_t *s, const uint8_t buf[], int len); + +/*! \brief Construct a UDPTL packet, ready for transmission. + \param s The UDPTL context. + \param buf The UDPTL packet buffer. + \param msg The primary packet. + \param len The length of the primary packet. + \return The length of the constructed UDPTL packet. */ +int udptl_build_packet(udptl_state_t *s, uint8_t buf[], const uint8_t msg[], int msg_len); + +/*! \brief Change the error correction settings of a UDPTL context. + \param s The UDPTL context. + \param ec_scheme One of the optional error correction schemes. + \param span The packet span over which error correction should be applied. + \param entries The number of error correction entries to include in packets. + \return 0 for OK. */ +int udptl_set_error_correction(udptl_state_t *s, int ec_scheme, int span, int entries); + +/*! \brief Check the error correction settings of a UDPTL context. + \param s The UDPTL context. + \param ec_scheme One of the optional error correction schemes. + \param span The packet span over which error correction is being applied. + \param entries The number of error correction being included in packets. + \return 0 for OK. */ +int udptl_get_error_correction(udptl_state_t *s, int *ec_scheme, int *span, int *entries); + +int udptl_set_local_max_datagram(udptl_state_t *s, int max_datagram); + +int udptl_get_local_max_datagram(udptl_state_t *s); + +int udptl_set_far_max_datagram(udptl_state_t *s, int max_datagram); + +int udptl_get_far_max_datagram(udptl_state_t *s); + +/*! \brief Initialise a UDPTL context. + \param s The UDPTL context. + \param ec_scheme One of the optional error correction schemes. + \param span The packet span over which error correction should be applied. + \param entries The number of error correction entries to include in packets. + \param rx_packet_handler The callback function, used to report arriving IFP packets. + \param user_data An opaque pointer supplied to rx_packet_handler. + \return A pointer to the UDPTL context, or NULL if there was a problem. */ +udptl_state_t *udptl_init(udptl_state_t *s, int ec_scheme, int span, int entries, udptl_rx_packet_handler_t rx_packet_handler, void *user_data); + +/*! \brief Release a UDPTL context. + \param s The UDPTL context. + \return 0 for OK. */ +int udptl_release(udptl_state_t *s); + +#if defined(__cplusplus) +} +#endif +#endif +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/tests/v17_tests.c b/libs/spandsp/tests/v17_tests.c index ec9b901866..22d793c2df 100644 --- a/libs/spandsp/tests/v17_tests.c +++ b/libs/spandsp/tests/v17_tests.c @@ -22,8 +22,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v17_tests.c,v 1.104 2009/07/09 13:52:09 steveu Exp $ */ /*! \page v17_tests_page V.17 modem tests @@ -63,6 +61,10 @@ display of modem status is maintained. #include #include #include +#include +#if defined(HAVE_FENV_H) +#include +#endif //#if defined(WITH_SPANDSP_INTERNALS) #define SPANDSP_EXPOSE_INTERNAL_STRUCTURES @@ -219,6 +221,64 @@ static void qam_report(void *user_data, const complexf_t *constel, const complex } /*- End of function --------------------------------------------------------*/ +#if defined(HAVE_FENV_H) +static void sigfpe_handler(int sig_num, siginfo_t *info, void *data) +{ + switch (sig_num) + { + case SIGFPE: + switch (info->si_code) + { + case FPE_INTDIV: + fprintf(stderr, "integer divide by zero at %p\n", info->si_addr); + break; + case FPE_INTOVF: + fprintf(stderr, "integer overflow at %p\n", info->si_addr); + break; + case FPE_FLTDIV: + fprintf(stderr, "FP divide by zero at %p\n", info->si_addr); + break; + case FPE_FLTOVF: + fprintf(stderr, "FP overflow at %p\n", info->si_addr); + break; + case FPE_FLTUND: + fprintf(stderr, "FP underflow at %p\n", info->si_addr); + break; + case FPE_FLTRES: + fprintf(stderr, "FP inexact result at %p\n", info->si_addr); + break; + case FPE_FLTINV: + fprintf(stderr, "FP invalid operation at %p\n", info->si_addr); + break; + case FPE_FLTSUB: + fprintf(stderr, "subscript out of range at %p\n", info->si_addr); + break; + } + break; + default: + fprintf(stderr, "Unexpected signal %d\n", sig_num); + break; + } + exit(2); +} +/*- End of function --------------------------------------------------------*/ + +static void fpe_trap_setup(void) +{ + struct sigaction trap; + + sigemptyset(&trap.sa_mask); + trap.sa_flags = SA_SIGINFO; + trap.sa_sigaction = sigfpe_handler; + + sigaction(SIGFPE, &trap, NULL); + //feenableexcept(FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW); + //feenableexcept(FE_ALL_EXCEPT); + feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW); +} +/*- End of function --------------------------------------------------------*/ +#endif + int main(int argc, char *argv[]) { v17_rx_state_t *rx; @@ -259,8 +319,17 @@ int main(int argc, char *argv[]) { case 'b': test_bps = atoi(optarg); - if (test_bps != 14400 && test_bps != 12000 && test_bps != 9600 && test_bps != 7200) + if (test_bps != 14400 + && + test_bps != 12000 + && + test_bps != 9600 + && + test_bps != 7200 + && + test_bps != 4800) { + /* 4800 is an extension of V.17, to provide full coverage of the V.32bis modes */ fprintf(stderr, "Invalid bit rate specified\n"); exit(2); } @@ -309,6 +378,10 @@ int main(int argc, char *argv[]) inhandle = NULL; outhandle = NULL; +#if defined(HAVE_FENV_H) + fpe_trap_setup(); +#endif + if (log_audio) { if ((outhandle = sf_open_telephony_write(OUT_FILE_NAME, 1)) == NULL) @@ -401,7 +474,7 @@ int main(int argc, char *argv[]) printf("Restarting on zero output\n"); /* Push a little silence through, to ensure all the data bits get out of the buffers */ - memset(amp, 0, BLOCK_LEN*sizeof(int16_t)); + vec_zeroi16(amp, BLOCK_LEN); v17_rx(rx, amp, BLOCK_LEN); /* Note that we might get a few bad bits as the carrier shuts down. */ diff --git a/libs/spandsp/tests/v18_tests.c b/libs/spandsp/tests/v18_tests.c index 7cd498ac20..f1dcff1d83 100644 --- a/libs/spandsp/tests/v18_tests.c +++ b/libs/spandsp/tests/v18_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v18_tests.c,v 1.8 2009/05/30 15:23:14 steveu Exp $ */ /*! \page v18_tests_page V.18 tests diff --git a/libs/spandsp/tests/v22bis_tests.c b/libs/spandsp/tests/v22bis_tests.c index 74c4347dbe..603f35df30 100644 --- a/libs/spandsp/tests/v22bis_tests.c +++ b/libs/spandsp/tests/v22bis_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v22bis_tests.c,v 1.63 2009/07/09 13:52:09 steveu Exp $ */ /*! \page v22bis_tests_page V.22bis modem tests @@ -127,7 +125,7 @@ static void v22bis_putbit(void *user_data, int bit) switch (bit) { case SIG_STATUS_TRAINING_SUCCEEDED: - bit_rate = v22bis_current_bit_rate(s->v22bis); + bit_rate = v22bis_get_current_bit_rate(s->v22bis); printf("Negotiated bit rate: %d\n", bit_rate); len = v22bis_rx_equalizer_state(s->v22bis, &coeffs); printf("Equalizer:\n"); @@ -225,9 +223,11 @@ int main(int argc, char *argv[]) int signal_level; int log_audio; int channel_codec; + int rbs_pattern; int opt; channel_codec = MUNGE_CODEC_NONE; + rbs_pattern = 0; test_bps = 2400; line_model_no = 0; decode_test_file = NULL; @@ -235,7 +235,7 @@ int main(int argc, char *argv[]) signal_level = -13; bits_per_test = 50000; log_audio = FALSE; - while ((opt = getopt(argc, argv, "b:B:c:d:glm:n:s:")) != -1) + while ((opt = getopt(argc, argv, "b:B:c:d:glm:n:r:s:")) != -1) { switch (opt) { @@ -273,6 +273,9 @@ int main(int argc, char *argv[]) case 'n': noise_level = atoi(optarg); break; + case 'r': + rbs_pattern = atoi(optarg); + break; case 's': signal_level = atoi(optarg); break; @@ -328,7 +331,16 @@ int main(int argc, char *argv[]) endpoint[1].qam_monitor = qam_monitor_init(6.0f, "Answering modem"); } #endif - if ((model = both_ways_line_model_init(line_model_no, (float) noise_level, line_model_no, (float) noise_level, channel_codec, 0)) == NULL) + if ((model = both_ways_line_model_init(line_model_no, + (float) noise_level, + -15.0f, + -15.0f, + line_model_no, + (float) noise_level, + -15.0f, + -15.0f, + channel_codec, + rbs_pattern)) == NULL) { fprintf(stderr, " Failed to create line model\n"); exit(2); diff --git a/libs/spandsp/tests/v27ter_tests.c b/libs/spandsp/tests/v27ter_tests.c index 6fa3e4b307..dc2053c692 100644 --- a/libs/spandsp/tests/v27ter_tests.c +++ b/libs/spandsp/tests/v27ter_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v27ter_tests.c,v 1.106 2009/07/09 13:52:09 steveu Exp $ */ /*! \page v27ter_tests_page V.27ter modem tests @@ -62,6 +60,10 @@ display of modem status is maintained. #include #include #include +#include +#if defined(HAVE_FENV_H) +#include +#endif //#if defined(WITH_SPANDSP_INTERNALS) #define SPANDSP_EXPOSE_INTERNAL_STRUCTURES @@ -218,6 +220,64 @@ static void qam_report(void *user_data, const complexf_t *constel, const complex } /*- End of function --------------------------------------------------------*/ +#if defined(HAVE_FENV_H) +static void sigfpe_handler(int sig_num, siginfo_t *info, void *data) +{ + switch (sig_num) + { + case SIGFPE: + switch (info->si_code) + { + case FPE_INTDIV: + fprintf(stderr, "integer divide by zero at %p\n", info->si_addr); + break; + case FPE_INTOVF: + fprintf(stderr, "integer overflow at %p\n", info->si_addr); + break; + case FPE_FLTDIV: + fprintf(stderr, "FP divide by zero at %p\n", info->si_addr); + break; + case FPE_FLTOVF: + fprintf(stderr, "FP overflow at %p\n", info->si_addr); + break; + case FPE_FLTUND: + fprintf(stderr, "FP underflow at %p\n", info->si_addr); + break; + case FPE_FLTRES: + fprintf(stderr, "FP inexact result at %p\n", info->si_addr); + break; + case FPE_FLTINV: + fprintf(stderr, "FP invalid operation at %p\n", info->si_addr); + break; + case FPE_FLTSUB: + fprintf(stderr, "subscript out of range at %p\n", info->si_addr); + break; + } + break; + default: + fprintf(stderr, "Unexpected signal %d\n", sig_num); + break; + } + exit(2); +} +/*- End of function --------------------------------------------------------*/ + +static void fpe_trap_setup(void) +{ + struct sigaction trap; + + sigemptyset(&trap.sa_mask); + trap.sa_flags = SA_SIGINFO; + trap.sa_sigaction = sigfpe_handler; + + sigaction(SIGFPE, &trap, NULL); + //feenableexcept(FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW); + //feenableexcept(FE_ALL_EXCEPT); + feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW); +} +/*- End of function --------------------------------------------------------*/ +#endif + int main(int argc, char *argv[]) { v27ter_rx_state_t *rx; @@ -309,6 +369,10 @@ int main(int argc, char *argv[]) inhandle = NULL; outhandle = NULL; +#if defined(HAVE_FENV_H) + fpe_trap_setup(); +#endif + if (log_audio) { if ((outhandle = sf_open_telephony_write(OUT_FILE_NAME, 1)) == NULL) @@ -392,7 +456,7 @@ int main(int argc, char *argv[]) printf("Restarting on zero output\n"); /* Push a little silence through, to ensure all the data bits get out of the buffers */ - memset(amp, 0, BLOCK_LEN*sizeof(int16_t)); + vec_zeroi16(amp, BLOCK_LEN); v27ter_rx(rx, amp, BLOCK_LEN); v27ter_rx(rx, amp, BLOCK_LEN); v27ter_rx(rx, amp, BLOCK_LEN); diff --git a/libs/spandsp/tests/v29_tests.c b/libs/spandsp/tests/v29_tests.c index fc9ee96711..8644ac286d 100644 --- a/libs/spandsp/tests/v29_tests.c +++ b/libs/spandsp/tests/v29_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v29_tests.c,v 1.120 2009/07/09 13:52:09 steveu Exp $ */ /*! \page v29_tests_page V.29 modem tests @@ -62,6 +60,10 @@ display of modem status is maintained. #include #include #include +#include +#if defined(HAVE_FENV_H) +#include +#endif //#if defined(WITH_SPANDSP_INTERNALS) #define SPANDSP_EXPOSE_INTERNAL_STRUCTURES @@ -241,6 +243,64 @@ static void qam_report(void *user_data, const complexf_t *constel, const complex } /*- End of function --------------------------------------------------------*/ +#if defined(HAVE_FENV_H) +static void sigfpe_handler(int sig_num, siginfo_t *info, void *data) +{ + switch (sig_num) + { + case SIGFPE: + switch (info->si_code) + { + case FPE_INTDIV: + fprintf(stderr, "integer divide by zero at %p\n", info->si_addr); + break; + case FPE_INTOVF: + fprintf(stderr, "integer overflow at %p\n", info->si_addr); + break; + case FPE_FLTDIV: + fprintf(stderr, "FP divide by zero at %p\n", info->si_addr); + break; + case FPE_FLTOVF: + fprintf(stderr, "FP overflow at %p\n", info->si_addr); + break; + case FPE_FLTUND: + fprintf(stderr, "FP underflow at %p\n", info->si_addr); + break; + case FPE_FLTRES: + fprintf(stderr, "FP inexact result at %p\n", info->si_addr); + break; + case FPE_FLTINV: + fprintf(stderr, "FP invalid operation at %p\n", info->si_addr); + break; + case FPE_FLTSUB: + fprintf(stderr, "subscript out of range at %p\n", info->si_addr); + break; + } + break; + default: + fprintf(stderr, "Unexpected signal %d\n", sig_num); + break; + } + exit(2); +} +/*- End of function --------------------------------------------------------*/ + +static void fpe_trap_setup(void) +{ + struct sigaction trap; + + sigemptyset(&trap.sa_mask); + trap.sa_flags = SA_SIGINFO; + trap.sa_sigaction = sigfpe_handler; + + sigaction(SIGFPE, &trap, NULL); + //feenableexcept(FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW); + //feenableexcept(FE_ALL_EXCEPT); + feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW); +} +/*- End of function --------------------------------------------------------*/ +#endif + int main(int argc, char *argv[]) { v29_rx_state_t *rx; @@ -332,6 +392,10 @@ int main(int argc, char *argv[]) inhandle = NULL; outhandle = NULL; +#if defined(HAVE_FENV_H) + fpe_trap_setup(); +#endif + if (log_audio) { if ((outhandle = sf_open_telephony_write(OUT_FILE_NAME, 1)) == NULL) @@ -420,7 +484,7 @@ int main(int argc, char *argv[]) if (samples == 0) { /* Push a little silence through, to ensure all the data bits get out of the buffers */ - memset(amp, 0, BLOCK_LEN*sizeof(int16_t)); + vec_zeroi16(amp, BLOCK_LEN); v29_rx(rx, amp, BLOCK_LEN); /* Note that we might get a few bad bits as the carrier shuts down. */ diff --git a/libs/spandsp/tests/v42_tests.c b/libs/spandsp/tests/v42_tests.c index 468d27ad95..7968ff6199 100644 --- a/libs/spandsp/tests/v42_tests.c +++ b/libs/spandsp/tests/v42_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v42_tests.c,v 1.28 2008/11/30 10:17:31 steveu Exp $ */ /* THIS IS A WORK IN PROGRESS. IT IS NOT FINISHED. */ diff --git a/libs/spandsp/tests/v42bis_tests.c b/libs/spandsp/tests/v42bis_tests.c index d77e1b475c..2218d1a94b 100644 --- a/libs/spandsp/tests/v42bis_tests.c +++ b/libs/spandsp/tests/v42bis_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v42bis_tests.c,v 1.24 2008/11/15 14:43:08 steveu Exp $ */ /* THIS IS A WORK IN PROGRESS. IT IS NOT FINISHED. */ diff --git a/libs/spandsp/tests/v42bis_tests.sh b/libs/spandsp/tests/v42bis_tests.sh index 626158a3ba..39ae75e0df 100755 --- a/libs/spandsp/tests/v42bis_tests.sh +++ b/libs/spandsp/tests/v42bis_tests.sh @@ -14,9 +14,6 @@ # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# $Id: v42bis_tests.sh,v 1.5 2008/05/03 09:34:26 steveu Exp $ -# BASE=../test-data/itu/v56ter diff --git a/libs/spandsp/tests/v8_tests.c b/libs/spandsp/tests/v8_tests.c index ca8a972cc2..f88ff212fb 100644 --- a/libs/spandsp/tests/v8_tests.c +++ b/libs/spandsp/tests/v8_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v8_tests.c,v 1.36.4.1 2009/12/28 12:32:53 steveu Exp $ */ /*! \page v8_tests_page V.8 tests @@ -56,63 +54,108 @@ int negotiations_ok = 0; +#if 0 static int select_modulation(int mask) { /* Select the fastest data modem available */ if (mask & V8_MOD_V90) return V8_MOD_V90; + /*endif*/ if (mask & V8_MOD_V34) return V8_MOD_V34; + /*endif*/ if (mask & V8_MOD_V32) return V8_MOD_V32; + /*endif*/ if (mask & V8_MOD_V23) return V8_MOD_V23; + /*endif*/ if (mask & V8_MOD_V21) return V8_MOD_V21; - return V8_MOD_FAILED; + /*endif*/ + return -1; } /*- End of function --------------------------------------------------------*/ +#endif static void handler(void *user_data, v8_parms_t *result) { const char *s; s = (const char *) user_data; - - if (result == NULL) + + printf("%s ", s); + switch (result->status) { - printf("%s V.8 negotiation failed\n", s); + case V8_STATUS_IN_PROGRESS: + printf("V.8 negotiation in progress\n"); return; + break; + case V8_STATUS_V8_OFFERED: + printf("V.8 offered by the other party\n"); + break; + case V8_STATUS_V8_CALL: + printf("V.8 call negotiation successful\n"); + break; + case V8_STATUS_NON_V8_CALL: + printf("Non-V.8 call negotiation successful\n"); + break; + case V8_STATUS_FAILED: + printf("V.8 call negotiation failed\n"); + return; + default: + printf("Unexpected V.8 status %d\n", result->status); + break; } - if (result->modem_connect_tone == MODEM_CONNECT_TONES_ANSAM - || - result->modem_connect_tone == MODEM_CONNECT_TONES_ANSAM_PR - || - result->modem_connect_tone == MODEM_CONNECT_TONES_NONE) + /*endswitch*/ + + printf(" Modem connect tone '%s' (%d)\n", modem_connect_tone_to_str(result->modem_connect_tone), result->modem_connect_tone); + printf(" Call function '%s' (%d)\n", v8_call_function_to_str(result->call_function), result->call_function); + printf(" Far end modulations 0x%X\n", result->modulations); + printf(" Protocol '%s' (%d)\n", v8_protocol_to_str(result->protocol), result->protocol); + printf(" PSTN access '%s' (%d)\n", v8_pstn_access_to_str(result->pstn_access), result->pstn_access); + printf(" PCM modem availability '%s' (%d)\n", v8_pcm_modem_availability_to_str(result->pcm_modem_availability), result->pcm_modem_availability); + if (result->t66 >= 0) + printf(" T.66 '%s' (%d)\n", v8_t66_to_str(result->t66), result->t66); + /*endif*/ + if (result->nsf >= 0) + printf(" NSF %d\n", result->nsf); + /*endif*/ + + switch (result->status) { - printf("%s V.8 negotiation result:\n", s); - printf(" Modem connect tone '%s' (%d)\n", modem_connect_tone_to_str(result->modem_connect_tone), result->modem_connect_tone); - printf(" Call function '%s' (%d)\n", v8_call_function_to_str(result->call_function), result->call_function); - printf(" Far end modulations 0x%X\n", result->modulations); - printf(" Protocol '%s' (%d)\n", v8_protocol_to_str(result->protocol), result->protocol); - printf(" PSTN access '%s' (%d)\n", v8_pstn_access_to_str(result->pstn_access), result->pstn_access); - printf(" PCM modem availability '%s' (%d)\n", v8_pcm_modem_availability_to_str(result->pcm_modem_availability), result->pcm_modem_availability); - if (result->t66 >= 0) - printf(" T.66 '%s' (%d)\n", v8_t66_to_str(result->t66), result->t66); - if (result->nsf >= 0) - printf(" NSF %d\n", result->nsf); + case V8_STATUS_V8_OFFERED: + /* Edit the result information appropriately */ + //result->call_function = V8_CALL_T30_TX; + result->modulations &= (V8_MOD_V17 + | V8_MOD_V21 + //| V8_MOD_V22 + //| V8_MOD_V23HDX + //| V8_MOD_V23 + //| V8_MOD_V26BIS + //| V8_MOD_V26TER + | V8_MOD_V27TER + | V8_MOD_V29 + //| V8_MOD_V32 + | V8_MOD_V34HDX + //| V8_MOD_V34 + //| V8_MOD_V90 + | V8_MOD_V92); + break; + case V8_STATUS_V8_CALL: if (result->call_function == V8_CALL_V_SERIES && result->protocol == V8_PROTOCOL_LAPM_V42) { negotiations_ok++; } + /*endif*/ + break; + case V8_STATUS_NON_V8_CALL: + negotiations_ok = 42; + break; } - else - { - printf("%s V.8 negotiation result:\n", s); - printf(" Modem connect tone '%s' (%d)\n", modem_connect_tone_to_str(result->modem_connect_tone), result->modem_connect_tone); - } + /*endswitch*/ } /*- End of function --------------------------------------------------------*/ @@ -136,28 +179,28 @@ static int v8_calls_v8_tests(SNDFILE *outhandle) caller_available_modulations = V8_MOD_V17 | V8_MOD_V21 | V8_MOD_V22 - | V8_MOD_V23HALF + | V8_MOD_V23HDX | V8_MOD_V23 | V8_MOD_V26BIS | V8_MOD_V26TER | V8_MOD_V27TER | V8_MOD_V29 | V8_MOD_V32 - | V8_MOD_V34HALF + | V8_MOD_V34HDX | V8_MOD_V34 | V8_MOD_V90 | V8_MOD_V92; answerer_available_modulations = V8_MOD_V17 | V8_MOD_V21 | V8_MOD_V22 - | V8_MOD_V23HALF + | V8_MOD_V23HDX | V8_MOD_V23 | V8_MOD_V26BIS | V8_MOD_V26TER | V8_MOD_V27TER | V8_MOD_V29 | V8_MOD_V32 - | V8_MOD_V34HALF + | V8_MOD_V34HDX | V8_MOD_V34 | V8_MOD_V90 | V8_MOD_V92; @@ -200,33 +243,44 @@ static int v8_calls_v8_tests(SNDFILE *outhandle) samples = v8_tx(v8_caller, amp, SAMPLES_PER_CHUNK); if (samples < SAMPLES_PER_CHUNK) { - memset(amp + samples, 0, sizeof(int16_t)*(SAMPLES_PER_CHUNK - samples)); + vec_zeroi16(amp + samples, SAMPLES_PER_CHUNK - samples); samples = SAMPLES_PER_CHUNK; } + /*endif*/ span_log_bump_samples(caller_logging, samples); remnant = v8_rx(v8_answerer, amp, samples); for (i = 0; i < samples; i++) out_amp[2*i] = amp[i]; - + /*endfor*/ + samples = v8_tx(v8_answerer, amp, SAMPLES_PER_CHUNK); if (samples < SAMPLES_PER_CHUNK) { - memset(amp + samples, 0, sizeof(int16_t)*(SAMPLES_PER_CHUNK - samples)); + vec_zeroi16(amp + samples, SAMPLES_PER_CHUNK - samples); samples = SAMPLES_PER_CHUNK; } + /*endif*/ span_log_bump_samples(answerer_logging, samples); if (v8_rx(v8_caller, amp, samples) && remnant) break; + /*endif*/ for (i = 0; i < samples; i++) out_amp[2*i + 1] = amp[i]; + /*endfor*/ - outframes = sf_writef_short(outhandle, out_amp, samples); - if (outframes != samples) + if (outhandle) { - fprintf(stderr, " Error writing audio file\n"); - exit(2); + outframes = sf_writef_short(outhandle, out_amp, samples); + if (outframes != samples) + { + fprintf(stderr, " Error writing audio file\n"); + exit(2); + } + /*endif*/ } + /*endif*/ } + /*endfor*/ v8_free(v8_caller); v8_free(v8_answerer); @@ -235,6 +289,7 @@ static int v8_calls_v8_tests(SNDFILE *outhandle) printf("Tests failed.\n"); exit(2); } + /*endif*/ return 0; } /*- End of function --------------------------------------------------------*/ @@ -258,14 +313,14 @@ static int non_v8_calls_v8_tests(SNDFILE *outhandle) answerer_available_modulations = V8_MOD_V17 | V8_MOD_V21 | V8_MOD_V22 - | V8_MOD_V23HALF + | V8_MOD_V23HDX | V8_MOD_V23 | V8_MOD_V26BIS | V8_MOD_V26TER | V8_MOD_V27TER | V8_MOD_V29 | V8_MOD_V32 - | V8_MOD_V34HALF + | V8_MOD_V34HDX | V8_MOD_V34 | V8_MOD_V90 | V8_MOD_V92; @@ -295,21 +350,25 @@ static int non_v8_calls_v8_tests(SNDFILE *outhandle) samples = silence_gen(non_v8_caller_tx, amp, SAMPLES_PER_CHUNK); if (samples < SAMPLES_PER_CHUNK) { - memset(amp + samples, 0, sizeof(int16_t)*(SAMPLES_PER_CHUNK - samples)); + vec_zeroi16(amp + samples, SAMPLES_PER_CHUNK - samples); samples = SAMPLES_PER_CHUNK; } + /*endif*/ remnant = v8_rx(v8_answerer, amp, samples); if (remnant) break; + /*endif*/ for (i = 0; i < samples; i++) out_amp[2*i] = amp[i]; - + /*endfor*/ + samples = v8_tx(v8_answerer, amp, SAMPLES_PER_CHUNK); if (samples < SAMPLES_PER_CHUNK) { - memset(amp + samples, 0, sizeof(int16_t)*(SAMPLES_PER_CHUNK - samples)); + vec_zeroi16(amp + samples, SAMPLES_PER_CHUNK - samples); samples = SAMPLES_PER_CHUNK; } + /*endif*/ span_log_bump_samples(answerer_logging, samples); modem_connect_tones_rx(non_v8_caller_rx, amp, samples); if ((tone = modem_connect_tones_rx_get(non_v8_caller_rx)) != MODEM_CONNECT_TONES_NONE) @@ -317,17 +376,26 @@ static int non_v8_calls_v8_tests(SNDFILE *outhandle) printf("Detected %s (%d)\n", modem_connect_tone_to_str(tone), tone); if (tone == MODEM_CONNECT_TONES_ANSAM_PR) negotiations_ok++; + /*endif*/ } + /*endif*/ for (i = 0; i < samples; i++) out_amp[2*i + 1] = amp[i]; + /*endfor*/ - outframes = sf_writef_short(outhandle, out_amp, samples); - if (outframes != samples) + if (outhandle) { - fprintf(stderr, " Error writing audio file\n"); - exit(2); + outframes = sf_writef_short(outhandle, out_amp, samples); + if (outframes != samples) + { + fprintf(stderr, " Error writing audio file\n"); + exit(2); + } + /*endif*/ } + /*endif*/ } + /*endfor*/ silence_gen_free(non_v8_caller_tx); modem_connect_tones_rx_free(non_v8_caller_rx); v8_free(v8_answerer); @@ -337,6 +405,7 @@ static int non_v8_calls_v8_tests(SNDFILE *outhandle) printf("Tests failed.\n"); exit(2); } + /*endif*/ return 0; } /*- End of function --------------------------------------------------------*/ @@ -357,14 +426,14 @@ static int v8_calls_non_v8_tests(SNDFILE *outhandle) caller_available_modulations = V8_MOD_V17 | V8_MOD_V21 | V8_MOD_V22 - | V8_MOD_V23HALF + | V8_MOD_V23HDX | V8_MOD_V23 | V8_MOD_V26BIS | V8_MOD_V26TER | V8_MOD_V27TER | V8_MOD_V29 | V8_MOD_V32 - | V8_MOD_V34HALF + | V8_MOD_V34HDX | V8_MOD_V34 | V8_MOD_V90 | V8_MOD_V92; @@ -392,41 +461,51 @@ static int v8_calls_non_v8_tests(SNDFILE *outhandle) samples = v8_tx(v8_caller, amp, SAMPLES_PER_CHUNK); if (samples < SAMPLES_PER_CHUNK) { - memset(amp + samples, 0, sizeof(int16_t)*(SAMPLES_PER_CHUNK - samples)); + vec_zeroi16(amp + samples, SAMPLES_PER_CHUNK - samples); samples = SAMPLES_PER_CHUNK; } + /*endif*/ span_log_bump_samples(caller_logging, samples); for (i = 0; i < samples; i++) out_amp[2*i] = amp[i]; - + /*endfor*/ + samples = modem_connect_tones_tx(non_v8_answerer_tx, amp, SAMPLES_PER_CHUNK); if (samples < SAMPLES_PER_CHUNK) { - memset(amp + samples, 0, sizeof(int16_t)*(SAMPLES_PER_CHUNK - samples)); + vec_zeroi16(amp + samples, SAMPLES_PER_CHUNK - samples); samples = SAMPLES_PER_CHUNK; } + /*endif*/ if (v8_rx(v8_caller, amp, samples)) break; + /*endif*/ for (i = 0; i < samples; i++) out_amp[2*i + 1] = amp[i]; + /*endfor*/ - outframes = sf_writef_short(outhandle, out_amp, samples); - if (outframes != samples) + if (outhandle) { - fprintf(stderr, " Error writing audio file\n"); - exit(2); + outframes = sf_writef_short(outhandle, out_amp, samples); + if (outframes != samples) + { + fprintf(stderr, " Error writing audio file\n"); + exit(2); + } + /*endif*/ } + /*endif*/ } + /*endfor*/ v8_free(v8_caller); modem_connect_tones_tx_free(non_v8_answerer_tx); -#if 0 - if (negotiations_ok != 1) + if (negotiations_ok != 42) { printf("Tests failed.\n"); exit(2); } -#endif + /*endif*/ return 0; } /*- End of function --------------------------------------------------------*/ @@ -441,6 +520,7 @@ int main(int argc, char *argv[]) SNDFILE *inhandle; SNDFILE *outhandle; int opt; + int log_audio; char *decode_test_file; v8_state_t *v8_caller; v8_state_t *v8_answerer; @@ -449,13 +529,17 @@ int main(int argc, char *argv[]) logging_state_t *logging; decode_test_file = NULL; - while ((opt = getopt(argc, argv, "d:")) != -1) + log_audio = FALSE; + while ((opt = getopt(argc, argv, "d:l")) != -1) { switch (opt) { case 'd': decode_test_file = optarg; break; + case 'l': + log_audio = TRUE; + break; default: //usage(); exit(2); @@ -463,62 +547,37 @@ int main(int argc, char *argv[]) } } - caller_available_modulations = V8_MOD_V17 - | V8_MOD_V21 - | V8_MOD_V22 - | V8_MOD_V23HALF - | V8_MOD_V23 - | V8_MOD_V26BIS - | V8_MOD_V26TER - | V8_MOD_V27TER - | V8_MOD_V29 - | V8_MOD_V32 - | V8_MOD_V34HALF - | V8_MOD_V34 - | V8_MOD_V90 - | V8_MOD_V92; - answerer_available_modulations = V8_MOD_V17 - | V8_MOD_V21 - | V8_MOD_V22 - | V8_MOD_V23HALF - | V8_MOD_V23 - | V8_MOD_V26BIS - | V8_MOD_V26TER - | V8_MOD_V27TER - | V8_MOD_V29 - | V8_MOD_V32 - | V8_MOD_V34HALF - | V8_MOD_V34 - | V8_MOD_V90 - | V8_MOD_V92; - - if (decode_test_file == NULL) + if (decode_test_file) { - if ((outhandle = sf_open_telephony_write(OUTPUT_FILE_NAME, 2)) == NULL) - { - fprintf(stderr, " Cannot create audio file '%s'\n", OUTPUT_FILE_NAME); - exit(2); - } + caller_available_modulations = V8_MOD_V17 + | V8_MOD_V21 + | V8_MOD_V22 + | V8_MOD_V23HDX + | V8_MOD_V23 + | V8_MOD_V26BIS + | V8_MOD_V26TER + | V8_MOD_V27TER + | V8_MOD_V29 + | V8_MOD_V32 + | V8_MOD_V34HDX + | V8_MOD_V34 + | V8_MOD_V90 + | V8_MOD_V92; + answerer_available_modulations = V8_MOD_V17 + | V8_MOD_V21 + | V8_MOD_V22 + | V8_MOD_V23HDX + | V8_MOD_V23 + | V8_MOD_V26BIS + | V8_MOD_V26TER + | V8_MOD_V27TER + | V8_MOD_V29 + | V8_MOD_V32 + | V8_MOD_V34HDX + | V8_MOD_V34 + | V8_MOD_V90 + | V8_MOD_V92; - printf("Test 1: V.8 terminal calls V.8 terminal\n"); - v8_calls_v8_tests(outhandle); - - printf("Test 2: non-V.8 terminal calls V.8 terminal\n"); - non_v8_calls_v8_tests(outhandle); - - printf("Test 3: V.8 terminal calls non-V.8 terminal\n"); - v8_calls_non_v8_tests(outhandle); - - if (sf_close(outhandle)) - { - fprintf(stderr, " Cannot close audio file '%s'\n", OUTPUT_FILE_NAME); - exit(2); - } - - printf("Tests passed.\n"); - } - else - { printf("Decode file '%s'\n", decode_test_file); v8_call_parms.modem_connect_tone = MODEM_CONNECT_TONES_NONE; v8_call_parms.call_function = V8_CALL_V_SERIES; @@ -579,7 +638,43 @@ int main(int argc, char *argv[]) } /*endif*/ } - return 0; + else + { + outhandle = NULL; + if (log_audio) + { + if ((outhandle = sf_open_telephony_write(OUTPUT_FILE_NAME, 2)) == NULL) + { + fprintf(stderr, " Cannot create audio file '%s'\n", OUTPUT_FILE_NAME); + exit(2); + } + /*endif*/ + } + /*endif*/ + + printf("Test 1: V.8 terminal calls V.8 terminal\n"); + v8_calls_v8_tests(outhandle); + + printf("Test 2: non-V.8 terminal calls V.8 terminal\n"); + non_v8_calls_v8_tests(outhandle); + + printf("Test 3: V.8 terminal calls non-V.8 terminal\n"); + v8_calls_non_v8_tests(outhandle); + + if (outhandle) + { + if (sf_close(outhandle)) + { + fprintf(stderr, " Cannot close audio file '%s'\n", OUTPUT_FILE_NAME); + exit(2); + } + /*endif*/ + } + /*endif*/ + + printf("Tests passed.\n"); + } + return 0; } /*- End of function --------------------------------------------------------*/ /*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/tests/vector_float_tests.c b/libs/spandsp/tests/vector_float_tests.c index ec578bef41..2d388fc9dc 100644 --- a/libs/spandsp/tests/vector_float_tests.c +++ b/libs/spandsp/tests/vector_float_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: vector_float_tests.c,v 1.13 2009/04/26 07:00:39 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/tests/vector_int_tests.c b/libs/spandsp/tests/vector_int_tests.c index f8c147e955..53f0b07949 100644 --- a/libs/spandsp/tests/vector_int_tests.c +++ b/libs/spandsp/tests/vector_int_tests.c @@ -21,8 +21,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: vector_int_tests.c,v 1.11 2009/04/26 07:00:39 steveu Exp $ */ #if defined(HAVE_CONFIG_H) diff --git a/libs/spandsp/unpack_g722_data.sh b/libs/spandsp/unpack_g722_data.sh index 695e0fc7a7..a73c345a3b 100755 --- a/libs/spandsp/unpack_g722_data.sh +++ b/libs/spandsp/unpack_g722_data.sh @@ -16,9 +16,6 @@ # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# $Id: unpack_g722_data.sh,v 1.5 2008/05/03 07:55:04 steveu Exp $ -# ITUDATA="../../../T-REC-G.722-198703-I!AppII!ZPF-E.zip" diff --git a/libs/spandsp/unpack_g726_data.sh b/libs/spandsp/unpack_g726_data.sh index c4b9062f9f..8e3bbf3d6b 100755 --- a/libs/spandsp/unpack_g726_data.sh +++ b/libs/spandsp/unpack_g726_data.sh @@ -16,9 +16,6 @@ # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# $Id: unpack_g726_data.sh,v 1.6 2008/05/03 07:55:04 steveu Exp $ -# ITUDATA="../../../T-REC-G.726-199103-I!AppII!SOFT-ZST-E.zip" diff --git a/libs/spandsp/unpack_gsm0610_data.sh b/libs/spandsp/unpack_gsm0610_data.sh index a1f889ec2b..d1f8b92a23 100755 --- a/libs/spandsp/unpack_gsm0610_data.sh +++ b/libs/spandsp/unpack_gsm0610_data.sh @@ -16,9 +16,6 @@ # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# $Id: unpack_gsm0610_data.sh,v 1.7 2008/05/03 10:59:44 steveu Exp $ -# # The ETSI distribution file extracts to 5 ZIP files, called DISK1.ZIP to DISK5.ZIP # These were originally the contents of 5 floppy disks. Disks 1 to 3 contain data @@ -167,11 +164,47 @@ then # to make the .EXE files actually executable. chmod 755 *.EXE ./FR_HOM_A.EXE >/dev/null + RETVAL=$? + if [ $RETVAL != 0 ] + then + echo Cannot run ./FR_HOM_A.EXE + exit $RETVAL + fi ./FR_SYN_A.EXE >/dev/null + RETVAL=$? + if [ $RETVAL != 0 ] + then + echo Cannot run ./FR_HOM_A.EXE + exit $RETVAL + fi ./FR_A.EXE >/dev/null + RETVAL=$? + if [ $RETVAL != 0 ] + then + echo Cannot run ./FR_HOM_A.EXE + exit $RETVAL + fi ./FR_HOM_U.EXE >/dev/null + RETVAL=$? + if [ $RETVAL != 0 ] + then + echo Cannot run ./FR_HOM_A.EXE + exit $RETVAL + fi ./FR_SYN_U.EXE >/dev/null + RETVAL=$? + if [ $RETVAL != 0 ] + then + echo Cannot run ./FR_HOM_A.EXE + exit $RETVAL + fi ./FR_U.EXE >/dev/null + RETVAL=$? + if [ $RETVAL != 0 ] + then + echo Cannot run ./FR_HOM_A.EXE + exit $RETVAL + fi rm -rf READ_FRA.TXT fi diff --git a/libs/spandsp/unpack_v56ter_data.sh b/libs/spandsp/unpack_v56ter_data.sh index c5f38ec957..28b8276679 100755 --- a/libs/spandsp/unpack_v56ter_data.sh +++ b/libs/spandsp/unpack_v56ter_data.sh @@ -16,9 +16,6 @@ # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# $Id: unpack_v56ter_data.sh,v 1.5 2008/05/03 07:55:04 steveu Exp $ -# ITUDATA="../../../T-REC-V.56ter-199608-I!!ZPF-E.zip" From ccbee2564196752b535ba92a61e3222484fed621 Mon Sep 17 00:00:00 2001 From: Steve Underwood Date: Sun, 25 Jul 2010 03:43:53 +0800 Subject: [PATCH 048/161] Added some new files for spandsp --- libs/spandsp/spandsp/fax-tests.xml | 96 ++ libs/spandsp/src/image_translate.c | 466 ++++++++++ libs/spandsp/src/spandsp/image_translate.h | 108 +++ .../src/spandsp/private/image_translate.h | 52 ++ .../src/spandsp/private/t4_t6_decode.h | 101 +++ .../src/spandsp/private/t4_t6_encode.h | 59 ++ libs/spandsp/src/spandsp/private/timezone.h | 90 ++ libs/spandsp/src/spandsp/t4_t6_decode.h | 53 ++ libs/spandsp/src/spandsp/t4_t6_encode.h | 42 + libs/spandsp/src/spandsp/timezone.h | 88 ++ libs/spandsp/src/timezone.c | 822 ++++++++++++++++++ .../itu/fax/generate_striped_pages.c | 123 +++ libs/spandsp/test-data/local/lenna-colour.tif | Bin 0 -> 793564 bytes libs/spandsp/tests/bitstream_tests.c | 189 ++++ libs/spandsp/tests/image_translate_tests.c | 452 ++++++++++ libs/spandsp/tests/saturated_tests.c | 311 +++++++ libs/spandsp/tests/timezone_tests.c | 86 ++ libs/spandsp/tests/tsb85_extra_tests.sh | 33 + 18 files changed, 3171 insertions(+) create mode 100644 libs/spandsp/spandsp/fax-tests.xml create mode 100644 libs/spandsp/src/image_translate.c create mode 100644 libs/spandsp/src/spandsp/image_translate.h create mode 100644 libs/spandsp/src/spandsp/private/image_translate.h create mode 100644 libs/spandsp/src/spandsp/private/t4_t6_decode.h create mode 100644 libs/spandsp/src/spandsp/private/t4_t6_encode.h create mode 100644 libs/spandsp/src/spandsp/private/timezone.h create mode 100644 libs/spandsp/src/spandsp/t4_t6_decode.h create mode 100644 libs/spandsp/src/spandsp/t4_t6_encode.h create mode 100644 libs/spandsp/src/spandsp/timezone.h create mode 100644 libs/spandsp/src/timezone.c create mode 100644 libs/spandsp/test-data/itu/fax/generate_striped_pages.c create mode 100644 libs/spandsp/test-data/local/lenna-colour.tif create mode 100644 libs/spandsp/tests/bitstream_tests.c create mode 100644 libs/spandsp/tests/image_translate_tests.c create mode 100644 libs/spandsp/tests/saturated_tests.c create mode 100644 libs/spandsp/tests/timezone_tests.c create mode 100755 libs/spandsp/tests/tsb85_extra_tests.sh diff --git a/libs/spandsp/spandsp/fax-tests.xml b/libs/spandsp/spandsp/fax-tests.xml new file mode 100644 index 0000000000..e770e244b8 --- /dev/null +++ b/libs/spandsp/spandsp/fax-tests.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/spandsp/src/image_translate.c b/libs/spandsp/src/image_translate.c new file mode 100644 index 0000000000..9221a9afa7 --- /dev/null +++ b/libs/spandsp/src/image_translate.c @@ -0,0 +1,466 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * image_translate.c - Image translation routines for reworking colour + * and gray scale images to be bi-level images of an + * appropriate size to be FAX compatible. + * + * Written by Steve Underwood + * + * Copyright (C) 2009 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/*! \file */ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if defined(HAVE_TGMATH_H) +#include +#endif +#if defined(HAVE_MATH_H) +#include +#endif +#include "floating_fudge.h" +#include +#include + +#include "spandsp/telephony.h" +#include "spandsp/fast_convert.h" +#include "spandsp/logging.h" +#include "spandsp/saturated.h" +#include "spandsp/t4_rx.h" +#include "spandsp/t4_tx.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/t81_t82_arith_coding.h" +#include "spandsp/t85.h" +#endif +#include "spandsp/t4_t6_decode.h" +#include "spandsp/t4_t6_encode.h" +#include "spandsp/image_translate.h" + +#include "spandsp/private/logging.h" +#if defined(SPANDSP_SUPPORT_T85) +#include "spandsp/private/t81_t82_arith_coding.h" +#include "spandsp/private/t85.h" +#endif +#include "spandsp/private/t4_t6_decode.h" +#include "spandsp/private/t4_t6_encode.h" +#include "spandsp/private/t4_rx.h" +#include "spandsp/private/t4_tx.h" +#include "spandsp/private/image_translate.h" + +static int image_colour16_to_gray8_row(uint8_t mono[], uint16_t colour[], int pixels) +{ + int i; + uint32_t gray; + + for (i = 0; i < pixels; i++) + { + gray = colour[3*i]*19595 + colour[3*i + 1]*38469 + colour[3*i + 2]*7472; + mono[i] = saturateu8(gray >> 24); + } + return pixels; +} +/*- End of function --------------------------------------------------------*/ + +static int image_colour8_to_gray8_row(uint8_t mono[], uint8_t colour[], int pixels) +{ + int i; + uint32_t gray; + + for (i = 0; i < pixels; i++) + { + gray = colour[3*i]*19595 + colour[3*i + 1]*38469 + colour[3*i + 2]*7472; + mono[i] = saturateu8(gray >> 16); + } + return pixels; +} +/*- End of function --------------------------------------------------------*/ + +static int image_gray16_to_gray8_row(uint8_t mono[], uint16_t gray[], int pixels) +{ + int i; + + for (i = 0; i < pixels; i++) + mono[i] = gray[i] >> 8; + return pixels; +} +/*- End of function --------------------------------------------------------*/ + +static int get_and_scrunch_row(image_translate_state_t *s, uint8_t buf[], size_t len) +{ + int row_len; + + row_len = (*s->row_read_handler)(s->row_read_user_data, buf, s->input_width*s->bytes_per_pixel); + if (row_len != s->input_width*s->bytes_per_pixel) + return 0; + /* Scrunch colour down to gray, and scrunch 16 bit pixels down to 8 bit pixels */ + switch (s->input_format) + { + case IMAGE_TRANSLATE_FROM_GRAY_16: + image_gray16_to_gray8_row(buf, (uint16_t *) buf, s->input_width); + break; + case IMAGE_TRANSLATE_FROM_COLOUR_16: + image_colour16_to_gray8_row(buf, (uint16_t *) buf, s->input_width); + break; + case IMAGE_TRANSLATE_FROM_COLOUR_8: + image_colour8_to_gray8_row(buf, buf, s->input_width); + break; + } + return row_len; +} +/*- End of function --------------------------------------------------------*/ + +static int image_resize_row(image_translate_state_t *s, uint8_t buf[], size_t len) +{ + int i; + int output_width; + int output_length; + int input_width; + int input_length; + double c1; + double c2; + double int_part; + int x; +#if defined(SPANDSP_USE_FIXED_POINT) + int frac_row; + int frac_col; +#else + double frac_row; + double frac_col; +#endif + int row_len; + int skip; + uint8_t *p; + + if (s->raw_output_row < 0) + return 0; + output_width = s->output_width - 1; + output_length = s->output_length - 1; + input_width = s->input_width - 1; + input_length = s->input_length - 1; + + skip = s->raw_output_row*input_length/output_length; + if (skip >= s->raw_input_row) + { + skip++; + while (skip >= s->raw_input_row) + { + if (s->raw_input_row >= s->input_length) + { + s->raw_output_row = -1; + break; + } + row_len = get_and_scrunch_row(s, s->raw_pixel_row[0], s->input_width*s->bytes_per_pixel); + if (row_len != s->input_width*s->bytes_per_pixel) + { + s->raw_output_row = -1; + return 0; + } + s->raw_input_row++; + p = s->raw_pixel_row[0]; + s->raw_pixel_row[0] = s->raw_pixel_row[1]; + s->raw_pixel_row[1] = p; + } + } + +#if defined(SPANDSP_USE_FIXED_POINT) + frac_row = s->raw_output_row*input_length/output_length; + frac_row = s->raw_output_row*input_length - frac_row*output_length; + for (i = 0; i < output_width; i++) + { + x = i*input_width/output_width; + frac_col = x - x*output_width; + c1 = s->raw_pixel_row[0][x] + (s->raw_pixel_row[0][x + 1] - s->raw_pixel_row[0][x])*frac_col; + c1 = s->raw_pixel_row[1][x] + (s->raw_pixel_row[1][x + 1] - s->raw_pixel_row[1][x])*frac_col; + buf[i] = saturateu8(c1 + (c2 - c1)*frac_row); + } +#else + frac_row = modf((double) s->raw_output_row*input_length/output_length, &int_part); + for (i = 0; i < output_width; i++) + { + frac_col = modf((double) i*input_width/output_width, &int_part); + x = int_part; + c1 = s->raw_pixel_row[0][x] + (s->raw_pixel_row[0][x + 1] - s->raw_pixel_row[0][x])*frac_col; + c2 = s->raw_pixel_row[1][x] + (s->raw_pixel_row[1][x + 1] - s->raw_pixel_row[1][x])*frac_col; + buf[i] = saturateu8(c1 + (c2 - c1)*frac_row); + } +#endif + if (++s->raw_output_row >= s->output_length) + s->raw_output_row = -1; + return len; +} +/*- End of function --------------------------------------------------------*/ + +static __inline__ uint8_t find_closest_palette_color(int in) +{ + return (in >= 128) ? 255 : 0; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(int) image_translate_row(image_translate_state_t *s, uint8_t buf[], size_t len) +{ + int x; + int y; + int i; + int j; + int limit; + int old_pixel; + int new_pixel; + int quant_error; + uint8_t *p; + uint8_t xx; + + if (s->output_row < 0) + return 0; + y = s->output_row++; + /* This algorithm works over two rows, and outputs the earlier of the two. To + make this work: + - At row 0 we grab and scrunch two rows. + - From row 1 up to the last row we grab one new additional row each time. + - At the last row we dither and output, without getting an extra row in. */ + for (i = (y == 0) ? 0 : 1; i < 2; i++) + { + p = s->pixel_row[0]; + s->pixel_row[0] = s->pixel_row[1]; + s->pixel_row[1] = p; + + /* If this is the end of the image just ignore that there is now rubbish in pixel_row[1]. + Mark that the end has occurred. This row will be properly output, and the next one + will fail, with the end of image condition (i.e. returning zero length) */ + if (s->resize) + { + if (image_resize_row(s, s->pixel_row[1], s->output_width*s->bytes_per_pixel) != s->output_width*s->bytes_per_pixel) + s->output_row = -1; + } + else + { + if (get_and_scrunch_row(s, s->pixel_row[1], s->output_width*s->bytes_per_pixel) != s->output_width*s->bytes_per_pixel) + s->output_row = -1; + } + } + /* Apply Floyd-Steinberg dithering to the 8 bit pixels, using a bustrophodontic + scan, to reduce the grayscale image to pure black and white */ + /* The first and last pixels in each row need special treatment, so we do not + step outside the row. */ + if ((y & 1)) + { + x = s->output_width - 1; + old_pixel = s->pixel_row[0][x]; + new_pixel = find_closest_palette_color(old_pixel); + quant_error = old_pixel - new_pixel; + s->pixel_row[0][x + 0] = new_pixel; + s->pixel_row[0][x - 1] = saturateu8(s->pixel_row[0][x - 1] + (7*quant_error)/16); + s->pixel_row[1][x + 0] = saturateu8(s->pixel_row[1][x + 0] + (5*quant_error)/16); + s->pixel_row[1][x - 1] = saturateu8(s->pixel_row[1][x - 1] + (1*quant_error)/16); + for ( ; x > 0; x--) + { + old_pixel = s->pixel_row[0][x]; + new_pixel = find_closest_palette_color(old_pixel); + quant_error = old_pixel - new_pixel; + s->pixel_row[0][x + 0] = new_pixel; + s->pixel_row[0][x - 1] = saturateu8(s->pixel_row[0][x - 1] + (7*quant_error)/16); + s->pixel_row[1][x + 1] = saturateu8(s->pixel_row[1][x + 1] + (3*quant_error)/16); + s->pixel_row[1][x + 0] = saturateu8(s->pixel_row[1][x + 0] + (5*quant_error)/16); + s->pixel_row[1][x - 1] = saturateu8(s->pixel_row[1][x - 1] + (1*quant_error)/16); + } + old_pixel = s->pixel_row[0][x]; + new_pixel = find_closest_palette_color(old_pixel); + quant_error = old_pixel - new_pixel; + s->pixel_row[0][x + 0] = new_pixel; + s->pixel_row[1][x + 1] = saturateu8(s->pixel_row[1][x + 1] + (3*quant_error)/16); + s->pixel_row[1][x + 0] = saturateu8(s->pixel_row[1][x + 0] + (5*quant_error)/16); + } + else + { + x = 0; + old_pixel = s->pixel_row[0][x]; + new_pixel = find_closest_palette_color(old_pixel); + quant_error = old_pixel - new_pixel; + s->pixel_row[0][x + 0] = new_pixel; + s->pixel_row[0][x + 1] = saturateu8(s->pixel_row[0][x + 1] + (7*quant_error)/16); + s->pixel_row[1][x + 0] = saturateu8(s->pixel_row[1][x + 0] + (5*quant_error)/16); + s->pixel_row[1][x + 1] = saturateu8(s->pixel_row[1][x + 1] + (1*quant_error)/16); + for ( ; x < s->output_width - 1; x++) + { + old_pixel = s->pixel_row[0][x]; + new_pixel = find_closest_palette_color(old_pixel); + quant_error = old_pixel - new_pixel; + s->pixel_row[0][x + 0] = new_pixel; + s->pixel_row[0][x + 1] = saturateu8(s->pixel_row[0][x + 1] + (7*quant_error)/16); + s->pixel_row[1][x - 1] = saturateu8(s->pixel_row[1][x - 1] + (3*quant_error)/16); + s->pixel_row[1][x + 0] = saturateu8(s->pixel_row[1][x + 0] + (5*quant_error)/16); + s->pixel_row[1][x + 1] = saturateu8(s->pixel_row[1][x + 1] + (1*quant_error)/16); + } + old_pixel = s->pixel_row[0][x]; + new_pixel = find_closest_palette_color(old_pixel); + quant_error = old_pixel - new_pixel; + s->pixel_row[0][x + 0] = new_pixel; + s->pixel_row[1][x - 1] = saturateu8(s->pixel_row[1][x - 1] + (3*quant_error)/16); + s->pixel_row[1][x + 0] = saturateu8(s->pixel_row[1][x + 0] + (5*quant_error)/16); + } + /* Now bit pack the pixel per byte row into a pixel per bit row. */ + for (i = 0, x = 0; x < s->output_width; i++, x += 8) + { + xx = 0; + /* Allow for the possibility that the width is not a multiple of 8 */ + limit = (8 <= s->output_width - x) ? 8 : (s->output_width - x); + for (j = 0; j < limit; j++) + { + if (s->pixel_row[0][x + j] <= 128) + xx |= (1 << (7 - j)); + } + buf[i] = xx; + } + return i; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(int) image_translate_get_output_width(image_translate_state_t *s) +{ + return s->output_width; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(int) image_translate_get_output_length(image_translate_state_t *s) +{ + return s->output_length; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(image_translate_state_t *) image_translate_init(image_translate_state_t *s, + int input_format, + int input_width, + int input_length, + int output_width, + t4_row_read_handler_t row_read_handler, + void *row_read_user_data) +{ + int i; + + if (s == NULL) + { + if ((s = (image_translate_state_t *) malloc(sizeof(*s))) == NULL) + return NULL; + } + memset(s, 0, sizeof(*s)); + + s->input_format = input_format; + + s->input_width = input_width; + s->input_length = input_length; + + s->resize = (output_width > 0); + s->output_width = (s->resize) ? output_width : s->input_width; + s->output_length = (s->resize) ? s->input_length*s->output_width/s->input_width : s->input_length; + + switch (s->input_format) + { + case IMAGE_TRANSLATE_FROM_GRAY_8: + s->bytes_per_pixel = 1; + break; + case IMAGE_TRANSLATE_FROM_GRAY_16: + s->bytes_per_pixel = 2; + break; + case IMAGE_TRANSLATE_FROM_COLOUR_8: + s->bytes_per_pixel = 3; + break; + case IMAGE_TRANSLATE_FROM_COLOUR_16: + s->bytes_per_pixel = 6; + break; + default: + s->bytes_per_pixel = 1; + break; + } + + /* Allocate the two row buffers we need, using the space requirements we now have */ + if (s->resize) + { + for (i = 0; i < 2; i++) + { + if ((s->raw_pixel_row[i] = (uint8_t *) malloc(s->input_width*s->bytes_per_pixel)) == NULL) + return NULL; + memset(s->raw_pixel_row[i], 0, s->input_width*s->bytes_per_pixel); + if ((s->pixel_row[i] = (uint8_t *) malloc(s->output_width*sizeof(uint8_t))) == NULL) + return NULL; + memset(s->pixel_row[i], 0, s->output_width*sizeof(uint8_t)); + } + } + else + { + for (i = 0; i < 2; i++) + { + if ((s->pixel_row[i] = (uint8_t *) malloc(s->output_width*s->bytes_per_pixel)) == NULL) + return NULL; + memset(s->pixel_row[i], 0, s->output_width*s->bytes_per_pixel); + } + } + + s->row_read_handler = row_read_handler; + s->row_read_user_data = row_read_user_data; + + s->raw_input_row = 0; + s->raw_output_row = 0; + s->output_row = 0; + + return s; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(int) image_translate_release(image_translate_state_t *s) +{ + int i; + + for (i = 0; i < 2; i++) + { + if (s->raw_pixel_row[i]) + { + free(s->raw_pixel_row[i]); + s->raw_pixel_row[i] = NULL; + } + if (s->pixel_row[i]) + { + free(s->pixel_row[i]); + s->pixel_row[i] = NULL; + } + } + return 0; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(int) image_translate_free(image_translate_state_t *s) +{ + int res; + + res = image_translate_release(s); + free(s); + return res; +} +/*- End of function --------------------------------------------------------*/ +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/spandsp/image_translate.h b/libs/spandsp/src/spandsp/image_translate.h new file mode 100644 index 0000000000..b795c705af --- /dev/null +++ b/libs/spandsp/src/spandsp/image_translate.h @@ -0,0 +1,108 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * image_translate.h - Image translation routines for reworking colour + * and gray scale images to be bi-level images of an + * appropriate size to be FAX compatible. + * + * Written by Steve Underwood + * + * Copyright (C) 2009 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/*! \file */ + +#if !defined(_SPANDSP_IMAGE_TRANSLATE_H_) +#define _SPANDSP_IMAGE_TRANSLATE_H_ + +/*! \page image_translate_page Image translation +\section image_translate_page_sec_1 What does it do? + +\section image_translate_page_sec_2 How does it work? + +\section image_translate_page_sec_3 How do I use it? +*/ + +typedef struct image_translate_state_s image_translate_state_t; + +enum +{ + IMAGE_TRANSLATE_FROM_MONO = 1, + IMAGE_TRANSLATE_FROM_GRAY_8 = 2, + IMAGE_TRANSLATE_FROM_GRAY_16 = 3, + IMAGE_TRANSLATE_FROM_COLOUR_8 = 4, + IMAGE_TRANSLATE_FROM_COLOUR_16 = 5 +}; + +#if defined(__cplusplus) +extern "C" +{ +#endif + +/*! \brief Get the next row of a translated image. + \param s The image translation context. + \return the length of the row buffer, in bytes */ +SPAN_DECLARE(int) image_translate_row(image_translate_state_t *s, uint8_t buf[], size_t len); + +/*! \brief Get the width of the image being produced by an image translation context. + \param s The image translation context. + \return The width of the output image, in pixel. */ +SPAN_DECLARE(int) image_translate_get_output_width(image_translate_state_t *s); + +/*! \brief Get the length of the image being produced by an image translation context. + \param s The image translation context. + \return The length of the output image, in pixel. */ +SPAN_DECLARE(int) image_translate_get_output_length(image_translate_state_t *s); + +/*! \brief Initialise an image translation context for rescaling and squashing a gray scale + or colour image to a bi-level FAX type image. + \param s The image translation context. + \param input_format x + \param input_width The width of the source image, in pixels. + \param input_length The length of the source image, in pixels. + \param output_width The width of the output image, in pixels. The length of the output image + will be derived automatically from this and the source image dimension, to main the + geometry of the original image. + \param row_read_handler A callback routine used to pull rows of pixels from the source image + into the translation process. + \param row_read_user_data An opaque point passed to read_row_handler + \return A pointer to the context, or NULL if there was a problem. */ +SPAN_DECLARE(image_translate_state_t *) image_translate_init(image_translate_state_t *s, + int input_format, + int input_width, + int input_length, + int output_width, + t4_row_read_handler_t row_read_handler, + void *row_read_user_data); + +/*! \brief Release the resources associated with an image translation context. + \param s The image translation context. + \return 0 for success, otherwise -1. */ +SPAN_DECLARE(int) image_translate_release(image_translate_state_t *s); + +/*! \brief Free the resources associated with an image translation context. + \param s The image translation context. + \return 0 for success, otherwise -1. */ +SPAN_DECLARE(int) image_translate_free(image_translate_state_t *s); + +#if defined(__cplusplus) +} +#endif + +#endif +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/spandsp/private/image_translate.h b/libs/spandsp/src/spandsp/private/image_translate.h new file mode 100644 index 0000000000..a4f7daa81f --- /dev/null +++ b/libs/spandsp/src/spandsp/private/image_translate.h @@ -0,0 +1,52 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * private/image_translate.c - Image translation routines for reworking colour + * and gray scale images to be bi-level images of an + * appropriate size to be FAX compatible. + * + * Written by Steve Underwood + * + * Copyright (C) 2009 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(_SPANDSP_PRIVATE_IMAGE_TRANSLATE_H_) +#define _SPANDSP_PRIVATE_IMAGE_TRANSLATE_H_ + +struct image_translate_state_s +{ + int input_format; + int input_width; + int input_length; + int output_width; + int output_length; + int resize; + int bytes_per_pixel; + int raw_input_row; + int raw_output_row; + int output_row; + + uint8_t *raw_pixel_row[2]; + uint8_t *pixel_row[2]; + + t4_row_read_handler_t row_read_handler; + void *row_read_user_data; +}; + +#endif +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/spandsp/private/t4_t6_decode.h b/libs/spandsp/src/spandsp/private/t4_t6_decode.h new file mode 100644 index 0000000000..1b15fc7f61 --- /dev/null +++ b/libs/spandsp/src/spandsp/private/t4_t6_decode.h @@ -0,0 +1,101 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * private/t4_t6_decode.h - definitions for T.4/T.6 fax decoding + * + * Written by Steve Underwood + * + * Copyright (C) 2003, 2009 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(_SPANDSP_PRIVATE_T4_T6_DECODE_H_) +#define _SPANDSP_PRIVATE_T4_T6_DECODE_H_ + +/*! + T.4 1D, T4 2D and T6 decompressor state. +*/ +struct t4_t6_decode_state_s +{ + /*! \brief The type of compression used between the FAX machines. */ + //int encoding; + /*! \brief Width of the current page, in pixels. */ + //int image_width; + + /*! \brief Callback function to write a row of pixels to the image destination. */ + t4_row_write_handler_t row_write_handler; + /*! \brief Opaque pointer passed to row_write_handler. */ + void *row_write_user_data; + + /*! \brief A pointer into the image buffer indicating where the last row begins */ + int last_row_starts_at; + + /*! \brief This variable is used to count the consecutive EOLS we have seen. If it + reaches six, this is the end of the image. It is initially set to -1 for + 1D and 2D decoding, as an indicator that we must wait for the first EOL, + before decoding any image data. */ + int consecutive_eols; + + /*! \brief The reference or starting changing element on the coding line. At the + start of the coding line, a0 is set on an imaginary white changing element + situated just before the first element on the line. During the coding of + the coding line, the position of a0 is defined by the previous coding mode. + (See T.4/4.2.1.3.2.). */ + int a0; + /*! \brief The first changing element on the reference line to the right of a0 and of + opposite colour to a0. */ + int b1; + /*! \brief The length of the in-progress run of black or white. */ + int run_length; + /*! \brief 2D horizontal mode control. */ + int black_white; + /*! \brief TRUE if the current run is black */ + int its_black; + + /*! \brief The current step into the current row run-lengths buffer. */ + int a_cursor; + /*! \brief The current step into the reference row run-lengths buffer. */ + int b_cursor; + + /*! \brief Incoming bit buffer for decompression. */ + uint32_t rx_bitstream; + /*! \brief The number of bits currently in rx_bitstream. */ + int rx_bits; + /*! \brief The number of bits to be skipped before trying to match the next code word. */ + int rx_skip_bits; + + /*! \brief Decoded pixel buffer. */ + //uint32_t pixel_stream; + /*! \brief The number of bits currently in pixel_stream. */ + //int tx_bits; + + /*! \brief Current pixel row number. */ + //int row; + + /*! \brief The current number of consecutive bad rows. */ + int curr_bad_row_run; + /*! \brief The longest run of consecutive bad rows seen in the current page. */ + int longest_bad_row_run; + /*! \brief The total number of bad rows in the current page. */ + int bad_rows; + + /*! \brief Error and flow logging control */ + //logging_state_t logging; +}; + +#endif +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/spandsp/private/t4_t6_encode.h b/libs/spandsp/src/spandsp/private/t4_t6_encode.h new file mode 100644 index 0000000000..40d750b732 --- /dev/null +++ b/libs/spandsp/src/spandsp/private/t4_t6_encode.h @@ -0,0 +1,59 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * private/t4_t6_encode.h - definitions for T.4/T.6 fax compression + * + * Written by Steve Underwood + * + * Copyright (C) 2003 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(_SPANDSP_PRIVATE_T4_T6_ENCODE_H_) +#define _SPANDSP_PRIVATE_T4_T6_ENCODE_H_ + +/*! + T.4 1D, T4 2D and T6 compressor state. +*/ +struct t4_t6_encode_state_s +{ + /*! \brief The minimum number of encoded bits per row. This is a timing thing + for hardware FAX machines. */ + int min_bits_per_row; + /*! \brief The current maximum contiguous rows that may be 2D encoded. */ + int max_rows_to_next_1d_row; + + /*! \brief Number of rows left that can be 2D encoded, before a 1D encoded row + must be used. */ + int rows_to_next_1d_row; + + /*! \brief The number of runs currently in the reference row. */ + int ref_steps; + + /*! \brief Pointer to the byte containing the next image bit to transmit. */ + int bit_pos; + /*! \brief Pointer to the bit within the byte containing the next image bit to transmit. */ + int bit_ptr; + + /*! \brief Callback function to read a row of pixels from the image source. */ + t4_row_read_handler_t row_read_handler; + /*! \brief Opaque pointer passed to row_read_handler. */ + void *row_read_user_data; +}; + +#endif +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/spandsp/private/timezone.h b/libs/spandsp/src/spandsp/private/timezone.h new file mode 100644 index 0000000000..b1c770b364 --- /dev/null +++ b/libs/spandsp/src/spandsp/private/timezone.h @@ -0,0 +1,90 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * private/timezone.h - Timezone handling for time interpretation + * + * Written by Steve Underwood + * + * Copyright (C) 2010 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(_SPANDSP_PRIVATE_TIMEZONE_H_) +#define _SPANDSP_PRIVATE_TIMEZONE_H_ + +#define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */ + +#define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */ + +#define TZNAME_MAX 255 + +/* The TZ_MAX_TIMES value below is enough to handle a bit more than a + * year's worth of solar time (corrected daily to the nearest second) or + * 138 years of Pacific Presidential Election time + * (where there are three time zone transitions every fourth year). */ +#define TZ_MAX_TIMES 370 + +#if !defined(NOSOLAR) +#define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */ +#else +/* Must be at least 14 for Europe/Riga as of Jan 12 1995, + * as noted by Earl Chew . */ +#define TZ_MAX_TYPES 20 /* Maximum number of local time types */ +#endif + +#define TZ_BIGGEST(a, b) (((a) > (b)) ? (a) : (b)) + +/* Time type information */ +struct tz_ttinfo_s +{ + int32_t gmtoff; /* UTC offset in seconds */ + int isdst; /* Used to set tm_isdst */ + int abbrind; /* Abbreviation list index */ + int ttisstd; /* TRUE if transition is std time */ + int ttisgmt; /* TRUE if transition is UTC */ +}; + +/* Leap second information */ +struct tz_lsinfo_s +{ + time_t trans; /* Transition time */ + int32_t corr; /* Correction to apply */ +}; + +struct tz_state_s +{ + int leapcnt; + int timecnt; + int typecnt; + int charcnt; + time_t ats[TZ_MAX_TIMES]; + uint8_t types[TZ_MAX_TIMES]; + struct tz_ttinfo_s ttis[TZ_MAX_TYPES]; + char chars[TZ_BIGGEST(TZ_MAX_CHARS + 1, (2*(TZNAME_MAX + 1)))]; + struct tz_lsinfo_s lsis[TZ_MAX_LEAPS]; +}; + +struct tz_s +{ + struct tz_state_s state; + char lcl_tzname[TZNAME_MAX + 1]; + int lcl_is_set; + const char *tzname[2]; +}; + +#endif +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/spandsp/t4_t6_decode.h b/libs/spandsp/src/spandsp/t4_t6_decode.h new file mode 100644 index 0000000000..860d4ecea9 --- /dev/null +++ b/libs/spandsp/src/spandsp/t4_t6_decode.h @@ -0,0 +1,53 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * t4_t6_decode.h - definitions for T.4/T.6 fax decoding + * + * Written by Steve Underwood + * + * Copyright (C) 2003, 2009 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/*! \file */ + +#if !defined(_SPANDSP_T4_T6_DECODE_H_) +#define _SPANDSP_T4_T6_DECODE_H_ + +/*! \page t4_t6_decode_page T.4 and T.6 FAX image decompression + +\section t4_t6_decode_page_sec_1 What does it do? +The T.4 image compression and decompression routines implement the 1D and 2D +encoding methods defined in ITU specification T.4. They also implement the pure +2D encoding method defined in T.6. These are image compression algorithms used +for FAX transmission. + +\section t4_t6_decode_page_sec_1 How does it work? +*/ + +typedef struct t4_t6_decode_state_s t4_t6_decode_state_t; + +#if defined(__cplusplus) +extern "C" { +#endif + +#if defined(__cplusplus) +} +#endif + +#endif +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/spandsp/t4_t6_encode.h b/libs/spandsp/src/spandsp/t4_t6_encode.h new file mode 100644 index 0000000000..72a3598bcb --- /dev/null +++ b/libs/spandsp/src/spandsp/t4_t6_encode.h @@ -0,0 +1,42 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * t4_t6_encode.h - definitions for T.4/T.6 fax encoding + * + * Written by Steve Underwood + * + * Copyright (C) 2003, 2009 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/*! \file */ + +#if !defined(_SPANDSP_T4_T6_ENCODE_H_) +#define _SPANDSP_T4_T6_ENCODE_H_ + +typedef struct t4_t6_encode_state_s t4_t6_encode_state_t; + +#if defined(__cplusplus) +extern "C" { +#endif + +#if defined(__cplusplus) +} +#endif + +#endif +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/spandsp/timezone.h b/libs/spandsp/src/spandsp/timezone.h new file mode 100644 index 0000000000..0f9a2eecd6 --- /dev/null +++ b/libs/spandsp/src/spandsp/timezone.h @@ -0,0 +1,88 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * timezone.h - Timezone handling for time interpretation + * + * Written by Steve Underwood + * + * Copyright (C) 2010 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/*! \file */ + +#if !defined(_SPANDSP_TIMEZONE_H_) +#define _SPANDSP_TIMEZONE_H_ + +/*! \page timezone_page Timezone handling + +\section timezone_sec_1 What does it do? + +\section timezone_sec_2 How does it work? + +*/ + +typedef struct tz_s tz_t; + +enum +{ + TM_SUNDAY = 0, + TM_MONDAY, + TM_TUESDAY, + TM_WEDNESDAY, + TM_THURSDAY, + TM_FRIDAY, + TM_SATURDAY +}; + +enum +{ + TM_JANUARY = 0, + TM_FEBRUARY, + TM_MARCH, + TM_APRIL, + TM_MAY, + TM_JUNE, + TM_JULY, + TM_AUGUST, + TM_SEPTEMBER, + TM_OCTOBER, + TM_NOVEMBER, + TM_DECEMBER +}; + +#if defined(__cplusplus) +extern "C" +{ +#endif + +SPAN_DECLARE(tz_t *) tz_init(tz_t *tz, const char *tzstring); + +SPAN_DECLARE(int) tz_release(tz_t *tz); + +SPAN_DECLARE(int) tz_free(tz_t *tz); + +SPAN_DECLARE(int) tz_localtime(tz_t *tz, struct tm *tm, time_t t); + +SPAN_DECLARE(const char *) tz_tzname(tz_t *tz, int isdst); + +#if defined(__cplusplus) +} +#endif + +#endif +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/timezone.c b/libs/spandsp/src/timezone.c new file mode 100644 index 0000000000..d0cab0989e --- /dev/null +++ b/libs/spandsp/src/timezone.c @@ -0,0 +1,822 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * timezone.c - Timezone handling for time interpretation + * + * Written by Steve Underwood + * + * Copyright (C) 2010 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/*! \file */ + +/* Timezone processing might not seem like a DSP activity, but getting the headers + right on FAXes demands it. We need to handle multiple time zones within a process, + for FAXes related to different parts of the globe, so the system timezone handling + is not adequate. */ + +/* This timezone handling is derived from public domain software by Arthur David Olson + which you may download from ftp://elsie.nci.nih.gov/pub + at the time of writing. */ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "spandsp/telephony.h" +#include "spandsp/timezone.h" + +#include "spandsp/private/timezone.h" + +#if !defined(FALSE) +#define FALSE 0 +#endif + +#if !defined(TRUE) +#define TRUE (!FALSE) +#endif + +#define SECS_PER_MIN 60 +#define MINS_PER_HOUR 60 +#define HOURS_PER_DAY 24 +#define DAYS_PER_WEEK 7 +#define DAYS_PER_NON_LEAP_YEAR 365 +#define DAYS_PER_LEAP_YEAR 366 +#define SECS_PER_HOUR (SECS_PER_MIN*MINS_PER_HOUR) +#define SECS_PER_DAY ((long int) SECS_PER_HOUR*HOURS_PER_DAY) +#define MONTHS_PER_YEAR 12 + +#define TM_YEAR_BASE 1900 + +#define EPOCH_YEAR 1970 +#define EPOCH_WDAY TM_THURSDAY + +#define isleap(y) (((y)%4) == 0 && (((y)%100) != 0 || ((y)%400) == 0)) + +#define isleap_sum(a, b) isleap((a)%400 + (b)%400) + +/* Unlike 's isdigit, this also works if c < 0 | c > UCHAR_MAX. */ +#define is_digit(c) ((unsigned int) (c) - '0' <= 9) + +#define TZ_DEF_RULE_STRING ",M4.1.0,M10.5.0" + +#define JULIAN_DAY 0 /* Jn - Julian day */ +#define DAY_OF_YEAR 1 /* n - day of year */ +#define MONTH_NTH_DAY_OF_WEEK 2 /* Mm.n.d - month, week, day of week */ + +static const char wildabbr[] = " "; + +static const char gmt[] = "GMT"; + +struct tz_rule_s +{ + int r_type; /* Type of rule--see below */ + int r_day; /* Day number of rule */ + int r_week; /* Week number of rule */ + int r_mon; /* Month number of rule */ + long int r_time; /* Transition time of rule */ +}; + +static const int mon_lengths[2][MONTHS_PER_YEAR] = +{ + {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, + {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} +}; + +static const int year_lengths[2] = +{ + DAYS_PER_NON_LEAP_YEAR, + DAYS_PER_LEAP_YEAR +}; + +static int increment_overflow(int *number, int delta) +{ + int number0; + + number0 = *number; + *number += delta; + return (*number < number0) != (delta < 0); +} +/*- End of function --------------------------------------------------------*/ + +static void set_tzname(tz_t *tz) +{ + struct tz_state_s *sp; + const struct tz_ttinfo_s *ttisp; + int i; + + sp = &tz->state; + tz->tzname[0] = wildabbr; + tz->tzname[1] = wildabbr; + for (i = 0; i < sp->typecnt; i++) + { + ttisp = &sp->ttis[i]; + tz->tzname[ttisp->isdst] = &sp->chars[ttisp->abbrind]; + } + for (i = 0; i < sp->timecnt; i++) + { + ttisp = &sp->ttis[sp->types[i]]; + tz->tzname[ttisp->isdst] = &sp->chars[ttisp->abbrind]; + } +} +/*- End of function --------------------------------------------------------*/ + +/* Return the number of leap years through the end of the given year + where, to make the math easy, the answer for year zero is defined as zero. */ +static int leaps_thru_end_of(const int y) +{ + return (y >= 0) ? (y/4 - y/100 + y/400) : -(leaps_thru_end_of(-(y + 1)) + 1); +} +/*- End of function --------------------------------------------------------*/ + +static struct tm *time_sub(const time_t * const timep, const long int offset, const struct tz_state_s * const sp, struct tm * const tmp) +{ + const struct tz_lsinfo_s *lp; + time_t tdays; + const int *ip; + int32_t corr; + int32_t seconds; + int32_t rem; + int idays; + int y; + int hit; + int i; + + corr = 0; + hit = 0; + i = sp->leapcnt; + while (--i >= 0) + { + lp = &sp->lsis[i]; + if (*timep >= lp->trans) + { + if (*timep == lp->trans) + { + hit = ((i == 0 && lp->corr > 0) || lp->corr > sp->lsis[i - 1].corr); + if (hit) + { + while (i > 0 + && + sp->lsis[i].trans == sp->lsis[i - 1].trans + 1 + && + sp->lsis[i].corr == sp->lsis[i - 1].corr + 1) + { + hit++; + --i; + } + } + } + corr = lp->corr; + break; + } + } + y = EPOCH_YEAR; + tdays = *timep/SECS_PER_DAY; + rem = *timep - tdays*SECS_PER_DAY; + while (tdays < 0 || tdays >= year_lengths[isleap(y)]) + { + int newy; + time_t tdelta; + int idelta; + int leapdays; + + tdelta = tdays / DAYS_PER_LEAP_YEAR; + idelta = tdelta; + if (tdelta - idelta >= 1 || idelta - tdelta >= 1) + return NULL; + if (idelta == 0) + idelta = (tdays < 0) ? -1 : 1; + newy = y; + if (increment_overflow(&newy, idelta)) + return NULL; + leapdays = leaps_thru_end_of(newy - 1) - leaps_thru_end_of(y - 1); + tdays -= ((time_t) newy - y)*DAYS_PER_NON_LEAP_YEAR; + tdays -= leapdays; + y = newy; + } + seconds = tdays*SECS_PER_DAY; + tdays = seconds/SECS_PER_DAY; + rem += seconds - tdays*SECS_PER_DAY; + /* Given the range, we can now fearlessly cast... */ + idays = tdays; + rem += (offset - corr); + while (rem < 0) + { + rem += SECS_PER_DAY; + idays--; + } + while (rem >= SECS_PER_DAY) + { + rem -= SECS_PER_DAY; + idays++; + } + while (idays < 0) + { + if (increment_overflow(&y, -1)) + return NULL; + idays += year_lengths[isleap(y)]; + } + while (idays >= year_lengths[isleap(y)]) + { + idays -= year_lengths[isleap(y)]; + if (increment_overflow(&y, 1)) + return NULL; + } + tmp->tm_year = y; + if (increment_overflow(&tmp->tm_year, -TM_YEAR_BASE)) + return NULL; + tmp->tm_yday = idays; + /* The "extra" mods below avoid overflow problems. */ + tmp->tm_wday = EPOCH_WDAY + + ((y - EPOCH_YEAR) % DAYS_PER_WEEK)*(DAYS_PER_NON_LEAP_YEAR % DAYS_PER_WEEK) + + leaps_thru_end_of(y - 1) + - leaps_thru_end_of(EPOCH_YEAR - 1) + + idays; + tmp->tm_wday %= DAYS_PER_WEEK; + if (tmp->tm_wday < 0) + tmp->tm_wday += DAYS_PER_WEEK; + tmp->tm_hour = (int) (rem/SECS_PER_HOUR); + rem %= SECS_PER_HOUR; + tmp->tm_min = (int) (rem/SECS_PER_MIN); + /* A positive leap second requires a special + * representation. This uses "... ??:59:60" et seq. */ + tmp->tm_sec = (int) (rem%SECS_PER_MIN) + hit; + ip = mon_lengths[isleap(y)]; + for (tmp->tm_mon = 0; idays >= ip[tmp->tm_mon]; (tmp->tm_mon)++) + idays -= ip[tmp->tm_mon]; + tmp->tm_mday = (int) (idays + 1); + tmp->tm_isdst = 0; + return tmp; +} +/*- End of function --------------------------------------------------------*/ + +/* Given a pointer into a time zone string, scan until a character that is not + * a valid character in a zone name is found. Return a pointer to that + * character. */ +static const char *get_tzname(const char *strp) +{ + char c; + + while ((c = *strp) != '\0' && !is_digit(c) && c != ',' && c != '-' && c != '+') + strp++; + return strp; +} +/*- End of function --------------------------------------------------------*/ + +/* Given a pointer into a time zone string, extract a number from that string. + * Check that the number is within a specified range; if it is not, return + * NULL. + * Otherwise, return a pointer to the first character not part of the number. */ +static const char *get_num(const char *strp, int * const nump, const int min, const int max) +{ + char c; + int num; + + if (strp == NULL || !is_digit(c = *strp)) + return NULL; + num = 0; + do + { + num = num*10 + (c - '0'); + if (num > max) + return NULL; /* Illegal value */ + c = *++strp; + } + while (is_digit(c)); + if (num < min) + return NULL; /* Illegal value */ + *nump = num; + return strp; +} +/*- End of function --------------------------------------------------------*/ + +/* Given a pointer into a time zone string, extract a number of seconds, + * in hh[:mm[:ss]] form, from the string. + * If any error occurs, return NULL. + * Otherwise, return a pointer to the first character not part of the number + * of seconds. */ +static const char *get_secs(const char *strp, long int * const secsp) +{ + int num; + + /* HOURS_PER_DAY*DAYS_PER_WEEK - 1 allows quasi-Posix rules like + * "M10.4.6/26", which does not conform to Posix, + * but which specifies the equivalent of + * "02:00 on the first Sunday on or after 23 Oct". */ + strp = get_num(strp, &num, 0, HOURS_PER_DAY*DAYS_PER_WEEK - 1); + if (strp == NULL) + return NULL; + *secsp = num*(long int) SECS_PER_HOUR; + if (*strp == ':') + { + strp = get_num(strp + 1, &num, 0, MINS_PER_HOUR - 1); + if (strp == NULL) + return NULL; + *secsp += num*SECS_PER_MIN; + if (*strp == ':') + { + /* SECS_PER_MIN allows for leap seconds. */ + strp = get_num(strp + 1, &num, 0, SECS_PER_MIN); + if (strp == NULL) + return NULL; + *secsp += num; + } + } + return strp; +} +/*- End of function --------------------------------------------------------*/ + +/* Given a pointer into a time zone string, extract an offset, in + * [+-]hh[:mm[:ss]] form, from the string. + * If any error occurs, return NULL. + * Otherwise, return a pointer to the first character not part of the time. */ +static const char *get_offset(const char *strp, long int * const offsetp) +{ + int neg = 0; + + if (*strp == '-') + { + neg = 1; + strp++; + } + else if (*strp == '+') + { + strp++; + } + strp = get_secs(strp, offsetp); + if (strp == NULL) + return NULL; /* Illegal time */ + if (neg) + *offsetp = -*offsetp; + return strp; +} +/*- End of function --------------------------------------------------------*/ + +/* Given a pointer into a time zone string, extract a rule in the form + * date[/time]. See POSIX section 8 for the format of "date" and "time". + * If a valid rule is not found, return NULL. + * Otherwise, return a pointer to the first character not part of the rule. */ +static const char *get_rule(const char *strp, struct tz_rule_s * const rulep) +{ + if (*strp == 'J') + { + /* Julian day. */ + rulep->r_type = JULIAN_DAY; + strp = get_num(strp + 1, &rulep->r_day, 1, DAYS_PER_NON_LEAP_YEAR); + } + else if (*strp == 'M') + { + /* Month, week, day. */ + rulep->r_type = MONTH_NTH_DAY_OF_WEEK; + strp = get_num(strp + 1, &rulep->r_mon, 1, MONTHS_PER_YEAR); + if (strp == NULL || *strp++ != '.') + return NULL; + strp = get_num(strp, &rulep->r_week, 1, 5); + if (strp == NULL || *strp++ != '.') + return NULL; + strp = get_num(strp, &rulep->r_day, 0, DAYS_PER_WEEK - 1); + } + else if (is_digit(*strp)) + { + /* Day of the year. */ + rulep->r_type = DAY_OF_YEAR; + strp = get_num(strp, &rulep->r_day, 0, DAYS_PER_LEAP_YEAR - 1); + } + else + { + /* Invalid format */ + return NULL; + } + if (strp == NULL) + return NULL; + if (*strp == '/') + { + /* Time specified. */ + strp = get_secs(strp + 1, &rulep->r_time); + } + else + { + /* Default = 2:00:00 */ + rulep->r_time = 2*SECS_PER_HOUR; + } + return strp; +} +/*- End of function --------------------------------------------------------*/ + +/* Given the Epoch-relative time of January 1, 00:00:00 UTC, in a year, the + * year, a rule, and the offset from UTC at the time that rule takes effect, + * calculate the Epoch-relative time that rule takes effect. */ +static time_t trans_time(const time_t janfirst, const int year, const struct tz_rule_s * const rulep, const long int offset) +{ + int leapyear; + time_t value; + int i; + int d; + int m1; + int yy0; + int yy1; + int yy2; + int dow; + + value = 0; + leapyear = isleap(year); + switch (rulep->r_type) + { + case JULIAN_DAY: + /* Jn - Julian day, 1 == January 1, 60 == March 1 even in leap + * years. + * In non-leap years, or if the day number is 59 or less, just + * add SECS_PER_DAY times the day number-1 to the time of + * January 1, midnight, to get the day. */ + value = janfirst + (rulep->r_day - 1)*SECS_PER_DAY; + if (leapyear && rulep->r_day >= 60) + value += SECS_PER_DAY; + break; + case DAY_OF_YEAR: + /* n - day of year. + * Just add SECS_PER_DAY times the day number to the time of + * January 1, midnight, to get the day. */ + value = janfirst + rulep->r_day * SECS_PER_DAY; + break; + case MONTH_NTH_DAY_OF_WEEK: + /* Mm.n.d - nth "dth day" of month m. */ + value = janfirst; + for (i = 0; i < rulep->r_mon - 1; i++) + value += mon_lengths[leapyear][i]*SECS_PER_DAY; + + /* Use Zeller's Congruence to get day-of-week of first day of month. */ + m1 = (rulep->r_mon + 9)%12 + 1; + yy0 = (rulep->r_mon <= 2) ? (year - 1) : year; + yy1 = yy0/100; + yy2 = yy0%100; + dow = ((26*m1 - 2)/10 + 1 + yy2 + yy2/4 + yy1/4 - 2*yy1)%7; + if (dow < 0) + dow += DAYS_PER_WEEK; + + /* "dow" is the day-of-week of the first day of the month. Get + * the day-of-month (zero-origin) of the first "dow" day of the + * month. */ + d = rulep->r_day - dow; + if (d < 0) + d += DAYS_PER_WEEK; + for (i = 1; i < rulep->r_week; i++) + { + if (d + DAYS_PER_WEEK >= mon_lengths[leapyear][rulep->r_mon - 1]) + break; + d += DAYS_PER_WEEK; + } + + /* "d" is the day-of-month (zero-origin) of the day we want. */ + value += d*SECS_PER_DAY; + break; + } + + /* "value" is the Epoch-relative time of 00:00:00 UTC on the day in + * question. To get the Epoch-relative time of the specified local + * time on that day, add the transition time and the current offset + * from UTC. */ + return value + rulep->r_time + offset; +} +/*- End of function --------------------------------------------------------*/ + +/* Given a POSIX section 8-style TZ string, fill in the rule tables as + appropriate. */ +static int tzparse(const char *name, struct tz_state_s * const sp, const int lastditch) +{ + const char *stdname; + const char *dstname; + size_t stdlen; + size_t dstlen; + long int stdoffset; + long int dstoffset; + long int theirstdoffset; + long int theirdstoffset; + long int theiroffset; + unsigned char *typep; + char *cp; + int load_result; + int isdst; + int i; + int j; + int year; + struct tz_rule_s start; + struct tz_rule_s end; + time_t *atp; + time_t janfirst; + time_t starttime; + time_t endtime; + + dstname = NULL; + stdname = name; + if (lastditch) + { + stdlen = strlen(name); /* Length of standard zone name */ + name += stdlen; + if (stdlen >= sizeof(sp->chars)) + stdlen = sizeof(sp->chars) - 1; + stdoffset = 0; + } + else + { + name = get_tzname(name); + stdlen = name - stdname; + if (stdlen < 3) + return -1; + if (*name == '\0') + return -1; + name = get_offset(name, &stdoffset); + if (name == NULL) + return -1; + } + load_result = -1; + if (load_result != 0) + sp->leapcnt = 0; /* So, we're off a little */ + if (*name != '\0') + { + dstname = name; + name = get_tzname(name); + dstlen = name - dstname; /* Length of DST zone name */ + if (dstlen < 3) + return -1; + if (*name != '\0' && *name != ',' && *name != ';') + { + if ((name = get_offset(name, &dstoffset)) == NULL) + return -1; + } + else + { + dstoffset = stdoffset - SECS_PER_HOUR; + } + if (*name == '\0' && load_result != 0) + name = TZ_DEF_RULE_STRING; + if (*name == ',' || *name == ';') + { + if ((name = get_rule(name + 1, &start)) == NULL) + return -1; + if (*name++ != ',') + return -1; + if ((name = get_rule(name, &end)) == NULL) + return -1; + if (*name != '\0') + return -1; + sp->typecnt = 2; /* Standard time and DST */ + /* Two transitions per year, from EPOCH_YEAR to 2037. */ + sp->timecnt = 2*(2037 - EPOCH_YEAR + 1); + if (sp->timecnt > TZ_MAX_TIMES) + return -1; + sp->ttis[0].gmtoff = -dstoffset; + sp->ttis[0].isdst = 1; + sp->ttis[0].abbrind = stdlen + 1; + sp->ttis[1].gmtoff = -stdoffset; + sp->ttis[1].isdst = 0; + sp->ttis[1].abbrind = 0; + atp = sp->ats; + typep = sp->types; + janfirst = 0; + for (year = EPOCH_YEAR; year <= 2037; year++) + { + starttime = trans_time(janfirst, year, &start, stdoffset); + endtime = trans_time(janfirst, year, &end, dstoffset); + if (starttime > endtime) + { + *atp++ = endtime; + *typep++ = 1; /* DST ends */ + *atp++ = starttime; + *typep++ = 0; /* DST begins */ + } + else + { + *atp++ = starttime; + *typep++ = 0; /* DST begins */ + *atp++ = endtime; + *typep++ = 1; /* DST ends */ + } + janfirst += year_lengths[isleap(year)]*SECS_PER_DAY; + } + } + else + { + if (*name != '\0') + return -1; + /* Initial values of theirstdoffset and theirdstoffset. */ + theirstdoffset = 0; + for (i = 0; i < sp->timecnt; i++) + { + j = sp->types[i]; + if (!sp->ttis[j].isdst) + { + theirstdoffset = -sp->ttis[j].gmtoff; + break; + } + } + theirdstoffset = 0; + for (i = 0; i < sp->timecnt; i++) + { + j = sp->types[i]; + if (sp->ttis[j].isdst) + { + theirdstoffset = -sp->ttis[j].gmtoff; + break; + } + } + /* Initially we're assumed to be in standard time. */ + isdst = FALSE; + theiroffset = theirstdoffset; + /* Now juggle transition times and types tracking offsets as you do. */ + for (i = 0; i < sp->timecnt; i++) + { + j = sp->types[i]; + sp->types[i] = sp->ttis[j].isdst; + if (sp->ttis[j].ttisgmt) + { + /* No adjustment to transition time */ + } + else + { + /* If summer time is in effect, and the + * transition time was not specified as + * standard time, add the summer time + * offset to the transition time; + * otherwise, add the standard time + * offset to the transition time. */ + /* Transitions from DST to DDST + * will effectively disappear since + * POSIX provides for only one DST + * offset. */ + if (isdst && !sp->ttis[j].ttisstd) + sp->ats[i] += (dstoffset - theirdstoffset); + else + sp->ats[i] += (stdoffset - theirstdoffset); + } + theiroffset = -sp->ttis[j].gmtoff; + if (sp->ttis[j].isdst) + theirdstoffset = theiroffset; + else + theirstdoffset = theiroffset; + } + /* Finally, fill in ttis. ttisstd and ttisgmt need not be handled. */ + sp->ttis[0].gmtoff = -stdoffset; + sp->ttis[0].isdst = FALSE; + sp->ttis[0].abbrind = 0; + sp->ttis[1].gmtoff = -dstoffset; + sp->ttis[1].isdst = TRUE; + sp->ttis[1].abbrind = stdlen + 1; + sp->typecnt = 2; + } + } + else + { + dstlen = 0; + sp->typecnt = 1; /* Only standard time */ + sp->timecnt = 0; + sp->ttis[0].gmtoff = -stdoffset; + sp->ttis[0].isdst = 0; + sp->ttis[0].abbrind = 0; + } + sp->charcnt = stdlen + 1; + if (dstlen != 0) + sp->charcnt += dstlen + 1; + if ((size_t) sp->charcnt > sizeof(sp->chars)) + return -1; + cp = sp->chars; + strncpy(cp, stdname, stdlen); + cp += stdlen; + *cp++ = '\0'; + if (dstlen != 0) + { + strncpy(cp, dstname, dstlen); + cp[dstlen] = '\0'; + } + return 0; +} +/*- End of function --------------------------------------------------------*/ + +static void tz_set(tz_t *tz, const char *tzstring) +{ + const char *name = ""; + struct tz_state_s *lclptr = &tz->state; + + if (tzstring) + name = tzstring; + + /* See if we are already set OK */ + if (tz->lcl_is_set > 0 && strcmp(tz->lcl_tzname, name) == 0) + return; + tz->lcl_is_set = strlen(name) < sizeof(tz->lcl_tzname); + if (tz->lcl_is_set) + strcpy(tz->lcl_tzname, name); + + if (name[0] == '\0') + { + /* User wants it fast rather than right, so, we're off a little. */ + lclptr->leapcnt = 0; + lclptr->timecnt = 0; + lclptr->typecnt = 0; + lclptr->ttis[0].isdst = 0; + lclptr->ttis[0].gmtoff = 0; + lclptr->ttis[0].abbrind = 0; + strcpy(lclptr->chars, gmt); + } + else if (name[0] == ':' || tzparse(name, lclptr, FALSE) != 0) + { + tzparse(gmt, lclptr, TRUE); + } + set_tzname(tz); +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(int) tz_localtime(tz_t *tz, struct tm *tmp, time_t t) +{ + struct tz_state_s *sp; + const struct tz_ttinfo_s *ttisp; + int i; + + sp = &tz->state; + + if (sp->timecnt == 0 || t < sp->ats[0]) + { + i = 0; + while (sp->ttis[i].isdst) + { + if (++i >= sp->typecnt) + { + i = 0; + break; + } + } + } + else + { + for (i = 1; i < sp->timecnt; i++) + { + if (t < sp->ats[i]) + break; + } + i = (int) sp->types[i - 1]; + } + ttisp = &sp->ttis[i]; + time_sub(&t, ttisp->gmtoff, sp, tmp); + tmp->tm_isdst = ttisp->isdst; + tz->tzname[tmp->tm_isdst] = &sp->chars[ttisp->abbrind]; + return 0; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(const char *) tz_tzname(tz_t *tz, int isdst) +{ + return tz->tzname[(!isdst) ? 0 : 1]; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(tz_t *) tz_init(tz_t *tz, const char *tzstring) +{ + if (tz == NULL) + { + if ((tz = (tz_t *) malloc(sizeof(*tz))) == NULL) + return NULL; + } + memset(tz, 0, sizeof(*tz)); + tz->tzname[0] = + tz->tzname[1] = wildabbr; + tz_set(tz, tzstring); + return tz; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(int) tz_release(tz_t *tz) +{ + return 0; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(int) tz_free(tz_t *tz) +{ + if (tz) + free(tz); + return 0; +} +/*- End of function --------------------------------------------------------*/ +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/test-data/itu/fax/generate_striped_pages.c b/libs/spandsp/test-data/itu/fax/generate_striped_pages.c new file mode 100644 index 0000000000..0c3eafd149 --- /dev/null +++ b/libs/spandsp/test-data/itu/fax/generate_striped_pages.c @@ -0,0 +1,123 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * generate_striped_pages.c + * + * Written by Steve Underwood + * + * Copyright (C) 2010 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/*! \file */ + +/* + This program generates an TIFF image as a number of small image striped, rather than + the usual all in one page FAX images usually consist of in TIFF files. + */ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if defined(HAVE_TGMATH_H) +#include +#endif +#if defined(HAVE_MATH_H) +#include +#endif +#include + +#include "spandsp.h" + +#define IMAGE_WIDTH 1728 +#define IMAGE_LENGTH 2600 +#define ROWS_PER_STRIPE 37 + +int main(int argc, char *argv[]) +{ + TIFF *tiff_file; + uint8_t image_buffer[10000]; + int image_size; + time_t now; + struct tm *tm; + char buf[256 + 1]; + int i; + + if ((tiff_file = TIFFOpen("striped.tif", "w")) == NULL) + return -1; + + TIFFSetField(tiff_file, TIFFTAG_COMPRESSION, COMPRESSION_CCITT_T6); + TIFFSetField(tiff_file, TIFFTAG_BITSPERSAMPLE, 1); + TIFFSetField(tiff_file, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + TIFFSetField(tiff_file, TIFFTAG_SAMPLESPERPIXEL, 1); + TIFFSetField(tiff_file, TIFFTAG_ROWSPERSTRIP, (int32_t) ROWS_PER_STRIPE); + TIFFSetField(tiff_file, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(tiff_file, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE); + TIFFSetField(tiff_file, TIFFTAG_FILLORDER, FILLORDER_LSB2MSB); + TIFFSetField(tiff_file, TIFFTAG_XRESOLUTION, 204.0f); + TIFFSetField(tiff_file, TIFFTAG_YRESOLUTION, 196.0f); + TIFFSetField(tiff_file, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH); + TIFFSetField(tiff_file, TIFFTAG_SOFTWARE, "Spandsp"); + TIFFSetField(tiff_file, TIFFTAG_HOSTCOMPUTER, "host"); + TIFFSetField(tiff_file, TIFFTAG_FAXSUBADDRESS, "1111"); + TIFFSetField(tiff_file, TIFFTAG_IMAGEDESCRIPTION, "Image in stripes"); + TIFFSetField(tiff_file, TIFFTAG_MAKE, "spandsp"); + TIFFSetField(tiff_file, TIFFTAG_MODEL, "testy"); + + time(&now); + tm = localtime(&now); + sprintf(buf, + "%4d/%02d/%02d %02d:%02d:%02d", + tm->tm_year + 1900, + tm->tm_mon + 1, + tm->tm_mday, + tm->tm_hour, + tm->tm_min, + tm->tm_sec); + TIFFSetField(tiff_file, TIFFTAG_DATETIME, buf); + TIFFSetField(tiff_file, TIFFTAG_FAXRECVTIME, 10); + TIFFSetField(tiff_file, TIFFTAG_IMAGEWIDTH, IMAGE_WIDTH); + TIFFSetField(tiff_file, TIFFTAG_IMAGELENGTH, IMAGE_LENGTH); + TIFFSetField(tiff_file, TIFFTAG_PAGENUMBER, 0, 1); + + image_size = IMAGE_WIDTH*ROWS_PER_STRIPE/8; + memset(image_buffer, 0x18, image_size); + + for (i = 0; i < IMAGE_LENGTH/ROWS_PER_STRIPE; i++) + { + if (IMAGE_LENGTH > (i + 1)*ROWS_PER_STRIPE) + image_size = IMAGE_WIDTH*ROWS_PER_STRIPE/8; + else + image_size = IMAGE_WIDTH*(IMAGE_LENGTH - i*ROWS_PER_STRIPE)/8; + if (TIFFWriteEncodedStrip(tiff_file, i, image_buffer, image_size) < 0) + return -1; + } + + TIFFWriteDirectory(tiff_file); + TIFFClose(tiff_file); + return 0; +} diff --git a/libs/spandsp/test-data/local/lenna-colour.tif b/libs/spandsp/test-data/local/lenna-colour.tif new file mode 100644 index 0000000000000000000000000000000000000000..4a282db3b808d19c9867ccc1ba187050e09b14fc GIT binary patch literal 793564 zcmaI9_jg^{b?4cC!2CF~+HI*y6-Xk!oO8|*nHeNoO^NKeK)-K{qFtUd!Ls` z6#tw5^^g9Sf1^C_O1|pNeY8IPQCI2*z4=di^50*d{gd9ZkGoT^)~8=~C7-p$u;=aZ zCoQoD4WS2({(JS_J8L{QYdzOixG&W>&X!qDW=y00lF^_}aTafJ6tB0Hwwgxw9I=X@5GLlyJxcY!)e=GnfqAQIUP42PFjywxTlk*lhwYNl$r5~ zD(`HT9oXM?ByVTSsT%*u>cD)t=UCn~SLQug+P>$tutB za_4-R<0P-C^emJ)k7sSzsVdjWO6T!1+d{ehOpOOSUF~LhzQ%uXS@6Qrz`05&;I#upEQ|UQZ?c>NN%bbikEN^$ZO7WiN)T(^g z$qLW$yn8NXJ)W^IWF6Sayz5Mb_iUw)<*}5RV{xFPNz-h?xRA3m7Kf|y&gD6K&$%kU z*uUI!zRG_l=i&`GWA)(PGu6HmhY?XT%;)S}^MX?0KF)#4U1zJD z7_Z^dPgFSMUE#(YulAl;%FXm)+&69-=X$m#aH877&6~^H=gVvtRs_y3_n)ZX;;g5t zy%$!7dEv2~?L?)U9WZg5t3AAAp~`){(#3z(7dlRqyA;m)M9#TT<~q*9=H{ypZ@%1h zEMsFMOOA57#BSI9l#JlC_+y@v`%=oaK0# zWueA5U*!?oIh9KH$z_4lD?%*gapo%&=Sm2Wa_J+jnybgBPPxnri>HIcE- zR*6sI;kms*W(|6k9_gdrk z+YTXNyW~1*$gZEZb@OD$|Mt$UV zWAJ`!_)&)v{j-7U|2nbuAC5Hs=2XY0XV(4d(x%^hxaF(c1E1gM`|OtT&4Z!O?+$!% zZ`Zf?_xzRf>+f(ymYx>L@$7tTz<1cA;6g4}Fn=DH@ z9YyOrB^~aPZcpjXh;>KExZSVco3!sq*p!fKFz!*p=Dx6gC}rtaLfUPf;$0EbV8S*K zHSda>hf=mZY3sh6V>oLcOq%y)-PoR#V|Uy-oN2m;?#Va~RQUGgT*E2* zzO-W~ZW+lqN6Wn&f#VEkoqLnE19{K>oO_fHP{xWK%G$6u1I7vu@8g~<&+_B-nLpW7 z{&82DCj=M#@0-g%*_eOXoqF6F;XyoXj@)ky-CpZ^(CC$1aBGeC`by6SOPz4RiL~)h z%s82}?e=Q7xk`cdW@B-qS+}C306J*48(SQvCYzzrtXZvDQmZXk=QeJ1nm0O)J$6OE z!KQ-u7m+D(#(2xu;UjLka7V9B6NuEpyFPdJpFuM=~J1cRufi2##hP z;L>E=aAsLhQULhD;7G=LIA@&&XUd#l3HzU@@TnF!ma{_yfaa-cpIpv^`T!9)Bk=^( z1TsNsAXY_L(}krT>`bKth-8U2_0w)P}sP=Jjk_*@kF8Ht}bT%&lU!E)M#jE52p_Oysan5=y zWt_{}0MP%*1t;>B(-rn})h_4&8eFJwac?m0Cs2Bzmmju%s%UI9B9aY}rc?Sb%8Ww;HKyhdSAm_EPk;17#2P`@6Y(~&L zM9%Wu(jZ*GMqUpWoLlbaon|wpqj}4Gg?*vQc|x3}gFAUFi+`X$l(K;3oGx5&W_jTJ ziU8+yy4uNSg7==uTBbAR*)ltv#Bw5`hr{M8oU=K_I-N33XDnPLFCL2<$FtV43NhH9 zH13UPa6=f3g>}HdRL(b?G>pgfhmyv@sAe>31rHQ=$)1R5PuRS}qut^x*%>tVhaEfk zM!57_yvD6wJx)74DE_)1gemeQ8H*^;{25WBZ7`EXt8 zacAa9clt?Z>PctfX;%_>c+eGlwlVX#EB<^#>f=o~kEvH6he`y1KOQCc&rnz`GQc-Rcz zByX(^U0WNx(ipzj=)c>Xz0;JsQ6Idz)&&>bZH>SM*Vti==h_}?;L)_XOFMm<9=~o^($ycaY;$Y+ zgQo4?(p?e%a5}s@?gY6Z=n*Ah*&Wm#NIUoEJUl0CPr^DBHw~w(dz0W@@levaJ8s7Y z6OLUm8!WOjXk@u7X@WAws(gYnVn%k}m$uC;4ULp}V29B%&)$p!j(`XbRRzcL-l@D} zy38q!@f%aV568Esf3T6~nuC;I^`t)P%s~Mk_hg=T#GkZ9p0-Efb?ixN_+h>8euMA& zD#y)Q*NxQ#1-6UT_A_OsnMmP8SU>95>~fY2295Y5?Y81t-QpFcin*^A@{yt4qH-;v^jCG8Jxd z8(>f3h3x?g$KB-C_d2x>GWSy%Ea}XYo+T z#0l;48%N^K;i!EmWEqdUhyBLUkmXR)HIcMVDmYIi<$eAf?_ zN7(;F-UgsT2j{Cir^_4{YkY9Q>GHt2s^D1;UG89q6R=L1_k48(2O2=bD;JPl?LU*Z zpU&AXRJzYD3xeYFWeRZS=53^VFG3cT6nFvPNH_qtpWvcXR!HS!&H<4SiV%C8$l6br zxu6zUhwc1#K4l?TfXqbHQRWo%q0-9vWg(1r0cSBz=y1YxG;QTASk5U~JEPf@1+RXg z+&Z5(&*dyfvsMTO(!_A)!El^ti~+0Cy~oQwR^bGd=gQ3U_pdAB8buQ^E|aHlSMYfbo0 zYl@AxniKq&edKP8uXBZsNdkfEb)h@WB9yq%;J@7*y4@NP1hGc(-D`{faA);jkJtVE z(WalxHT>d2$EP3metLP^*Z1~*erND^kA}Z^*#FJbU7tM|{POYMub=Mw^5LG(@9g^Y z+Kzubx8cY0t^Z|u<-Z@PzR>I&2p6n(yw~Aa)ahEXF{s(>({A*XZt?3jc{TlU+tz@7 zd&sygXxJ1oZi$$8#B4)2s9BGKs|s5aGYo`veSuO~094-{HSEth$1A)Hc7${T1Pf{V zu7m|+usdn(kD2P1yZi@yk=+rM>Zz|m8)NgYe0CpIm*RH|VTLcC4 zh3(+KaB_Sm;$J@7ELkOR*vfW0p1%cl*y1yz5%qXXyF$i3cPYjW@WtMU4Mul0Qq;ouBBg!E(n1~u6f`duRRK{@>z^?)Z ztP%T{!Fz0Wu7p_}R+9v7`e% zg(F~+3r^+j&;eW^wW?z|1(^c}*8_e5Tjy7V(L`{CB^Tf>pUiP|_gO+5Fk8icAxoht zmANn>NQoU>gdAdrJVA@#0@LJ z4mYami-1y)Rbn&n43xs8L}aS|h6C;b(%*0aM0&Qy4vv^UvB6uevjc%78zNAaMdNU?ZZ? z!=?Z%fPwr_111=uB`k=b1wLYBt*&M@eG)4c=Zq~=SJT4N|=w?IYW&;--MkzuRV|;C` z;)fny_U8V4X!(y1t^NDMbw4}X_UlW%zy4tJSGNa$dt>0M2ZNv8@Bi|V^2MV)Up*QA z=E=UV9}j>1K+wUjE^qz&Gu=NvTKgB1wNJL^=U037q|IA{+8)1VbIb$_>|X|uqSLCi8?@i@l^`x4#og@ z*R+xmqR>p%$G`W6%@|Slbk;pz8Ca+e5dw@SEJOq|ITwm8Xpi_Wzs;z+ClFxDy(h}O z=az;~RR#Fh!qOm!B)xm->J^BjdYwcBKp9KiPXPwVbch#l0pKsRbMPNGGKZt= zl3Eh*0!rdO&&J_g2NDZR0~esO;L}N^=tR~E7o5x^>ifwBNSfeVej-_+B}~!@e+^<^gCXzpu~727Xa71D;_#n0agnQ9e-7oeMkXFv?l~WU?RXEKwt~2 zaDh~vUUBb9;05G`C z3#385+;eW1Bm(Xp>;R4Obc7fG`?vs-gmq3;at{!iJeQUSk-|ko2jbLJ{^ea6VB|DJTB8hIk7SRJ5Mma!Cu@-c6GXt_*v^tI(+PuQ6UhRC z0@4uAz`up-hQv=ADw+~(9m2P_ACrao86E~j>rSGO6l z$c<}hJPis7faC%OZ~>u#Bn1wOrwI|< zZwlXQ3<)m4;Rok|eU^-+-Kq0K2XD4WreF(bk9&_n2N1!X#@OwKD0J`!|NoET5Yd`MIJ#aJ5GjVn@a8ViTEzSDUl{d2h{spIq|~3oXAqxBgcbH-3IY z`OVesU)&k^?d_dk-0Kru@My2JZy)a?Uij?xz%NmXj;;Oi;Wd9cy!_^d^x>7>zPP^I zU)mEE;7@2kIM8h`fD1691K6Q2;ZTxx2E+&h(7KYa4aE_KP=pv*5QrGy=MRJp*sh2X zA{b0sS&{;P0?>a%Ads}~&bx-n-2G|WV8%Y2bB*Mk7-G>t$~2g^5LO(>IrpWkh=ULT zIueP4gBizo8ZNLNEq5HPbdi)gly@rM?=Ammed1M5#j9Sj21&v{R-bpK$s>>rda^F2 zCUg?w$*E78C6O8e(beUyYpZ3l z#qX`q7cJK=US9J48vT-5%_6c1>rBGBtV&6*Q@6>fa)A@{HWL@14sCJj2153o0qd@) z3r2tlg!t*u3irmPXTS%0tH;PHdy-k+q=pYYA^}~Bnk3={j~+J(X9+Gq9U?9m3Yhl< zEhFKQk&tGOuV`OTJC*iKDQWM)sC_Kv8q4_5h{n=x;)2PvlVkx#6hMFgFW`bg1bj33 z2FowB$OPi)0%}1-YvHp@$Fb zvz6ch3XqS3yUpHU{#kOq%S3=61HU(nz@D5U*(0tGa)zmlZGXgYFlHJhG>DppBSwOP z-6Cad8i?BYz(WLsQ3vW!zu&w&WFs!<_iFo{XcQvWMu6=LTSo)t;jn=e77;DNAXf+% zTvC?VsQ7`{Kb6_WAum3?hIIzPva1n`=9MezN&*XV?7sfo0Ej zzS>$}PE~BB7kO4`r--b9S=N z$W1bjKn{AQCNf>_Bj6>bSPrjAJ9rJz{I`~D^O}Hn zV4o;}0TclKvr+i}M7}OP%k3T`Y7+l~GT07f>8@udt?IV zP_38xNgRWl$S6P_9x1?1c?g+GTzkG_V75ee#(0-fhXw=Q7{I_rxIiEQU<_U|5U8mp za={RQ6Nml6@-Ro2$jY0^5*gulSM#o3GP=0oBy!JG1kp!8VnPO$4tyu`9yX%-OW|J# zC~$#Vl7z<$dvVx>GQ|Zr^R6;Y@Ma*`0fFfEL;xKKIq3HW3y_LtNq}%NZG#b@189P? zA!UG41c1snhEQanA%z$q5_IR9*(kTqD>(=267vP@t6G&x1Xh`)#{cILkh>v$Pa2ga zW40`m`$05-96A8%!EcCQE+=9V=u|lMS*vv3WyXQKB{`ZMq_N6Ig_GqWv56JA6I8|_ z1g8<4sEGqXZYmw17YPk3XCdBr9Wqc8##2}IEXf62B?b||<_x$h*o$yL%8Nig?7)`U z3Q<{fEU$3xXjg(r_=1u|rZ(YN)+^!)5g>S`62^%LqLK?$6B|p}52l=?2?z@I#H>S6 z%Ql~ZWB~#ZONgM)YuuOcC`hSp&31|?9Hm6ueO`PjG7f@4CK4v@AGCxd$c0^2R)s%Y z;lEWMzrDi$ur7=}ZV10bzi*2^Z4SL?3xC{Q_G*1O;lR_@`15vA3xp8F4pI>U@Sy-{ zumGwNJ|kQJK}e2Z$twSP&=h#w8YT((q)iA668iyu1+>RN7#WSc;R3d>9q^YX_hIAR z=BTuLEitNtq~YpId$WZBTabUyg&+b93b;`pRzrgjyl|r_j7B8l0=VGHYR}Dj@5h@m ze=)q`uMe&H>G5^HJl*xrA8!8D#hx#2?WCZHBr>`X_SO9%D1hkTcTY!19DE8>T<-aY z6HR|Lx$-}bR6p39K33~d61q-rG2sAQKsd18Q7EGTVg$xJ!zR)<{W0?{WTCiKK?0I0 z(1E;{tN~&X%h9ZRB;&%y%Kd~1a0F#S7z6=LKo-bHeS`o>%TV@TZ~;X`hn5ESX2?cZ z4^(*emm>|4m3E>I9a|bZQW-$a#tq@qccjdNf;5)#C@*@_&%4W?t&ftwdDfkI(iQ$_ zL*q}@7fCQ^NunEqVp9Fa&_d6M|`CNj^a0Q z0bH<3yQJ2vAt-3D8P*z$n?-exw#}mHuk_Au$8}a`cP-xnrTLcA&pg=7yrS6EGMX=!2ql=0|2dvuzR``P52$_+I zh9j2IsBOqwjOs(64c?O$7+2zs>5TVSMVR1$pn!YJ zOU|wmj70^DDp|0U4m%z?zznkT^~D<&UN(-oT2gbqnyj%O*e740dgYY-kTu}B_!hDr zq-cy60(aOOFPSKV1J0)v8-EaUgkFvEPhwmx(jgjw;@BcJqKl+t)$9P64sB115Bik3360A;Km$Hn0aFk&OP9mQg-1+vMMi?CF7Hd8izm(qI@?e4EW>)l2qUu z3H~qwkKu762zACjf3XW5I-XuNIM#FP0%2_kjPhgaIT8i1a;L z9^U?Ii3*iUE#;M$!jkvkf?x*@C&GcWL0HZL{SZe$1hVXyi<4Zy5)(0yN^HX4SJMQ- znNU;7Yyse@2AW71W<^|}mY7W^j2N#ZUoe?6p%KYobbkoH#X#10Pf$1L*HA|~8n;n6 z1PhQC>kk=r#T-L1CqcnBw@`;f;@GX<>C$cWYPUNyJudAIH^G99xL`PB9*UYpek^6- zj`A^r56>ypo)4D?Z`Q`{u8BOTk6{lR@cD&-;kfi4uS>sdPd#mlzUs&j4!{Bw0zIej zr(L8IrGCtA?0mo8k5cr4Vx;CMb?6Tp!z^JC1|N52AG8Fesl|yQ_95xO&LS?5QNWu( zfGwDGLHQRhsQefBBR00gAG9SNwgXe5@(Fv;o}>y2YWPEgFDNv^0DOvNAq8^B@B($G z6cHgAU2lX4M81GO;j63tga(g0WB*}C<&TD!{^W4e&lcK0y|DflXFI>Ru>&sn^47pN z5B3laVBb94OUeK)U`ayxw>SHKcCPDh=j#4uX4RkVtGc-%K3-+p=vhK`fG7Yukfb0K zp@bbe=%WlcX@>|%8sp}VD0w&f|3J(D^6yI%9SC86IOU-HlvTzkMKW=4kfH%Kc7PO! zBPb%;6*saZMj&Jug-X)Sk(`GF@n95jNsnX%9Z;(@k#__8q>`oLEu7Ly(#jqj3(!w_ zMrE*|fcOi_f4h?0hL^o%RFX+9c+e(_jNyXEYAnYixK|f=)Ep-$xU$UsqO<%=-YU6( zp!NX$1-3$R$N2oMmcm9$Ns~>tQdd+{_+G8HXhqR`9y<8h`@Y69@v*5fSLu+KoDey33b7CvI!e)rTsx08#_%U>x>0doC?^7 zIBe)eB^|nVdcEephXc~_@4n)nv0o|w))+4`Ss7Rx6 z`+=nMV8THiktiZ6!`E}q#LWN>PAyml{;MUUVo3@Sj}*iO1VKqr1X@mcpwK!1X}QF~ zhZ=x9VQLA9j0I$jz?h8+J7K&=?#F=F0EGae#1=^qfHY_g>~kt`0r3JS#7o#2B2Ybl z3TS))C~*NA5%Lk#FrOAujWqmTv<`BpCu`iNmWp^rr3uB(>n|-sPI4YgTG$m-<|N>! zf5in7@MQ?V5@iaUCU<~F#DG=mh~NTl$!ljCV4HmbSi*RgwlBecV7KoQ;SDCN^W z7`AV=l?;V!+X8|SsHRZ7_Q8MypK3U0#hsj?>!s3<@F}FqGUtcN%E*m1@kcHBhmGm` z^~nbfiAPPT$1SPn>&OC^QBm@wKKxNj;*-wYv*ySTx-y@1XFpk=dD0|2f5al915Bt! zY6U1M17Zg#0I0`#lw3e_5?lb%Jne`*ZpZzPiprEWlFo@2tqBFRm;OJ1FJWJX0FnzB zvt4q5BnYZWX)b^c9;rkC7u;=6V3G(V1>7bbK!TVwF(w)c1S5d_s)b1(+-gW%YY1Mc z^;1U_yipgsu{M0Q)_c3rk23P7ePur$ul>8(#$TLn`{}8c&#!L#;zr+BH+O$=XBTvU zGz1qA5kLf_l1Uq3P=+m zJne=8(l0lP!eT0n#Z7Kca@IU&Uh1NVcOhlCNMBIaiua60L|m}T zuP0y7;V6X*5QXYYn&m}{)@qAa7rozR(sr0N?fT+2P2pBo=_Wg{t&|A&-fci5T5r)n z2isi+SO6}75#R`-hQ6S!O~0rcz^7i+%?I8tNdY1tK%h$jgA3SGqz^p2uo$LkH5DmQ z56K8Pf_Rxyq8*N+Jpm(`fsvpYS!gt*dPgKKMFC$_b1>~CF4&)NkUJ(|pr({e!FWVZ zy(oYMmf@izHB3@hSnfEr!bdrxa67?1a6V}kZg`CkAJs^?F$ zSMbW}n9L~)B>e-8NOjMJTYJ0`N7;$71qL~hQ$&uK6_NBv+aMd>kMrf+rN|?b1(Xs2 z%y|AR-(&|EW8{uyP{3`#hlUj~fR?N=M;+}IeanE6JK`?4T zE?zHe3kC}!CY3{iMkOks9pfz7LS99g&zK=lQqE*jFj6VnA;hTriPP3<$U4qmi~y zZOen8cIZ&feYny|6`Lp@%~|=%9*F8mA`gd5V`&%a5LFs9mjNa;mk|h~4sCI2lz^E} zyC|`?mGrswWR17kM4@$`%c8i=r^73GNmo?q%rcaE~tS2fII?`EGU({z*5Q)4BnWG7jD=2?^0rf zeAF7HFYZnoy=LK?w4}8lA3*`ZTMdDm_5K@mK8yhk2-oX!2gpR9 z-P`^7!y$+O`}XCL&+ZL@$Cv*M$#UZ2Xh`e#fB3$jL>c%s22eq z5k$f?9Mw}VN(}+ABErm0nrUP9gAp@+!)Ve95$uVZC^aDGG@EuGs|*UKD`O`aI+Xwf zjr|_YCTp?stRn>-5DPqCpC^WTxGwXwyXwP+W!AHmj$FV@FD~cDdEGbx{DQ+@ou(idD>xw!f}QgoO*yBdmW90UM4A6gRd_Dr zK9+VV$IE;tD#J&!-ecvV`Mek3{8ZL@BB2FA0Yq?3_4&PkF_r!os_7IXXG=jkYCRSG zCRz+wGUjk|DdZqh%zm}%hms-NiInwBb&%Q`N}ZsF<0;3fv}++@KbsTfoVdlu5hzq= z-bQ6A^``S_1FxZJjYc&be#S^ZEa_xBmo}fx*v_P_r)l9Tb5m9dP9KgM=tn*hGh)OS z$C3mBZkBT?;oT$WOMHVAUUMcw7-xXGlR^A~W*s6fkZi%tga$cT?j&QDhZCfkDbo!c zPTFVF9L~$&P{cHopu5X`G-=?}xnW#1Z^`(4je9<;UqBs7nURL(F%bwjFI5H3XT6** zG$zcsm!Gypt+%*%?GoZ8wC!I$CamfcEmmCgSLW&|?!BgjMpX0T0 z^U1VbmHE}ECg&2LlBkg$bt=pzLe|4c=UmQ5GJ_1lR9ug|cr4;7H1!9Jz<_Y^ z)K#{OhHNAVhCDiY?T6@i4H}1nhTT*t`t*mQ_#Me(PNsb@{;Ck+$@B_1}#Ffc#}JI%4@EpZyh$SI@NASC1DlOuTC7L$iq^JgA^q~<;U<4Ap_*pY- z!J8$?VX%DM5Pi{_V&mO4!N*P1JjL!cMgS|Y>n19bNIH{o_R|<8Ta_UW@QTLRtMwsD zj3_P=DdUFdy~Y^n&YNq3m)8WZ)`hR25q+@QkFkzjTIIXflKW)K@*f|l|K(iEr>9%~ z>Fm0HzSQ&CmF-{OR=&K|FYN9vkvpKW^zrbQkM@20@g!M;ukP&p>~i-{W^4ayeB}=Z zY94LKjMq4NJd4{LB^_RCi%q|gg2p)YUGEUGq2OWA0a_ouW|W0l_JoWhF)JL8grpEH zl=%-Wi^B^eNiSlNNFSt}pgn#7BF048GnOQq;M^55^apfs#2CsFp#kOc2|G)A(MbwZ zZML8C_?%;^+|BY(5`QT;5l1dB9gR8h!rQIJm8Hds$QRSx(Um45c+^2?Q1-YpCsOc; zZ1o}N;C5Y*8-BNr*(aj+>%tFIS&zYurJj4ML#NUPk_9u-lDULqGHgMBp$WLvRM227 zsxy?X(UmMKT(r8RpiWoPV$z5@Qd3cfxun}hZ&_iFS<`J%H0zBe5W@yjDYH)y8f>!C zET99-Su%zcFb3@Mh08Es0fX2Uo zRIj!kgRO)cKo*kGLfUzX+-k~s4no46$JwXXjAOwiXUiNkp)I6L^KlbXS_tJwWdQ~t zzi4T$@LVKEOgBK%1Uv95$Oa04>j*1EK#{VdQgH?<9XO~n1`u)EF&TQWKj$==~)_OF$wDtYF@Ri5n)DazOt3Xxyl9;+U$Kz0R%h6flx3Y=>;* zDq{v*3T^?w%*An{+*KaUT+DPl!E_U%&xELkC1a?8dvLls$azaLV-=H8gD4V9G0z8; z2TFhg(aR!~ri_hxAwFxo0bBqJNFpE}Vhc^jq_Z%J-CzXh0BWGyAGc?Bz(o7ZAWdfh zd_&QL$ycC{z8iZfz7V#{qZ#z+;DWtj)2Pn?7Z7YgR7A0AT(Hc4d1c_*N`Ny=+ZJ?y zQuMev{j??XxQVGGl3+Uq0RJHuh)Ez&Ynnu}0Qmx@sCiK5g$}4nML)oc1UB&WF`8MK zI)Z%&AE-?t*8msLZt%Q0{Ayi7fd!s4hNMxT0ukVU0z1#!(o{83+e89`@x8Sn*oaji zh~?9^6l{bpL@f|mV44M>06Jl1egPH$yC4+o!!`aZb)tL-Md(^>;AUM|G$X7HNiMir zr-VPO4PbA$;QHG5laAbf>Rl-Y>8BeRYeh!N1@FGRR*(9RBv@ z;V&NS{qk=AS2wp%Q}pAhHGe*`;`x@`@j7o`q_D%jq|K>swHuflfhb^;^(_*|^bK$G z=?D-Mzizh@Fo?3SpnkVs$2v1nh$#`u{KGl#ft-Il9~R1wP=TDZmqP~#JJ_I)DJ^Wo z2$Bm9W?V!E7@;FexL}-#DO4^P&o~J+$I_1Rn0>AyNPCsyEFsARDpxOAlziu1(J(eYHh9!-rV*1PKjoQjZ@6_s@#L4n``;7kZ8`01o8$Wr8ek_!N1x`e@9FzO=dUn(y%9K-`?!UbmtLozNA7Z89z zX=p^C{h5s8e3|n?xr-&558%%dE?7ufSh53lB5pjLvYerADI->SZ;%l;8q$*xIT_UO zPI$WFowARw%$O7B zt`Zs?&A4D;mf-(n)XY<0l_gw2z{Q&pgmBT~=uGRA(r|u)##FTiMGb-IOic*mhDqjp z6BjVxMk?YWq6Uzk>tG4_%A~jC0!ab<>kStOw>@G2)p_u2gx|OE_}LXBnJaXg3Zz62A2%5qzycVIz!uRHpLUbc zA{@XZ9S|MRJ_8G23@}Lw(7|>~k>b!06o45rG+<|u5R2GwaJZvYDQR(+JY93Ho&(TGrrBo}}I0)QzcYKapXkUJ2%LVJR$A9|8V8Q}BNL4eQy zd|gg-D5zXOL_n1&OJ))xBB1X8le<9&*bC8Xrg8yClxYSs%@D!uHGyZXDexa6fC65$ zX9x!vun~d~gZA{(b!otgynw77;uLum;D2Xr_~z=sz53{#H4*GKl+l`0=bZ?`1vl1) zpaU5fT&s^tVpKQ+kUwf+mc5*edQvB+4$FI)!l0+tPz{C{9 z1;|7)YXA#;{$S#__x62$d*Iu9{nQlw^km!L&9(m@Bg^mhCTFTmTf9p;?8Tix?_Lx^s`uLZz~6UY=Wx5z-;#-tOY8SiMu&&IuR+rFd& z8;RRRx=1xqUlcZCd*fDW%Lp!r2;c$|1bd@KmT$OVBI_bRKx zO}@X#^+(@T@bhJ802k0n!qr0r58B1;g$3YT4D#invV7W-yi*^5ZST|uAOh^_GVjHu z9$Nk9W7csWa9gt7t=Zs26e?PyDO#&9sV-SuZ`C*2jiSD^_?-r00TTr^o0e=4{RM?R zCZ(7tVzarFP@zM!XpK)V`B0;x|PwCh%q`0 z1r#7rO|;oAQVi^=sKrP-X*~|wclpf&9>E0zZjE9qB04}Ck{XeW4unPo@?#)B(-6^< zNoW8OOs8FxagfS{3vi(*>7#!F*OV_0-+1JFDPn+SfHwwqNt50s=pviLaJ_*R%5;#G zK)KiZFkywNe&Dbx{2Q@^pa3F(5rj{iG|$ELumC}UaFrxlV4JP}p2Y`G*-oca{U-%Oh@b#tAjj~6 zpoWC$B(68p@+HhT*T5fG2~kZ)v|Q_izl7zXfc9|IG#xgaD)W;I0OJV?KukCS)MF_u z=bg`bU`2tXO!cS4MDG*3a_QV98DTNz7IB{$2r(w-5iwKV3mt%?5>1(Rh&v?qj0=Sf zIgRN)n8M<8+Ag#$YEYA6t_Uh-kn^ddmUm7vf@Fc$TmaQ_lX-Gb7RF^^JUQqD;R$w^ zbk0DP(*Sc9`VZ$W$XcCdLsGNU3Slx%ohQx5f{PI!k(`BzEGA>Rskng)IEv<&bWTMb zT%NjvBIY}UB*=%8IcG*gN=ap003ApoU==Pv=aDiI1M*s!#CAdekRJ-5W0I1PeUuf2 zM2ls=Tgaq?eiJi#F|XH<-+)X6gG|O8^e+ff6@iW8v{K<_YAe3VO!4<&ZRlFP=s~_i zqXD1`7`MdW0zm}8Kuhus7mzrRsa-^Uq4cZS0g8z5{9moFWM>TT9 zhznp1c0*D?DPA3zIr_K z<->6iAUq!a^7f8jU)u1~(;fe1vi47hDzC2#?oVlYolCl1nqIH5*JtQ)mG(GFHqi<0 zr=ZA0eqcZeqVwpX1CSid9|#)A0`m{19@>|3Qz9lR#sc{Ndj7>2BS3%=s3t-kf(XPi zY9_cKYjA)zMXFDuCc4wni)VP947)^bf@@2a4 z0bfF(@HH3kM}`JOAZ+FJaDfzv-f)2o3P5;_+yTY_&;Ll&0O~;#q#~rBNeCbXCAQ-q z69`D~pHD(7fVYR;gc}_;kvKS&Q5>gI_LE8B?Vr!NFoJ?NCZhvXqq&%o9WdBo0X-~c zR4-J>`D91{MCn*h_%*}@7;ypjfGbfW0y|NWwArK!(n2a@RnqBN{x@8J z+5-!q5y>t4BKG01jn6sYPj;A|%Do{g&6Q$eB99P@F#g520Ndr!lE9dZT6qwhF3FN} z3bV&nxXzZ@F0Mo_kHQ5iK*qpJhycM@ase>#uem@Jol;6F3P)iC#3E2!RS}qjf_aAo z7Z5e@FEN?H`plyi%7p?jg4%H)UPZMkc>smHvg8t>MU!JdAX58?8L-NMKz@lrIHl~v zm@WL50S0yvAPC5+kKS12hYOgS4w36=YyLq)>Rw%fa#0xzu%wO%QjkexxIj$3(WHpB zWJv^Uy1bf+z`Pe%dTELNWK;I9hL`{2;pSg1toy~uj!!Rb{HM!XKfk{7H5c3)q|xBZ zdwaflGX44egWo(o$n+Fn-rxQC%^g2K+x3&V=D(g;@%^3IQ!DMef(5;f0vzQY>fVFq zZhO&2mu8#a2p0^5%mYfuED>H6|Mg6xwmVGGunjsmm=6plTnBUBQHloCxL`P8hcCz= zpc;un)1)xC02Y7?U<9~;Is?&^$mb^GKA3ioXT1lq9&*Z*R8no(Vk|6Q{7$a4*z?YN zhVQ(s`Qx{l9xw@`^QiFuxt|1tJboAfE`SIK4d4iItJ~93Df&kJZGYc>^4citK^H}1tJBJ6tHV3D5bfKR-Qlqg_?_rQeJ=3@;q%Ye2XU3SKnOw+`{9fqHE2pndZb1~nt&X^!3ag) z6#7|798bg@B9D-E9Z9=qlEP5~f|!hs^fBLZzTzyw_KA>Aey4E&0d?Vhs~#{*)N`D4 zYF#iX`QZJ6AEMBuOtg3bUkW%Q^apfX5-{m1s!mTC$kC|NfO$6BK0~)4Dw@m)-r?4 zQpN};5*C62bS3ewDJy_4X%G;Uyf+=zv5~ldP-GT_MjZ-jpbWN51PzBm=BbDk6ha_^ z2w1|UoW~J`LLjwnNir%4x&}QX>M?Whz-{MBL;z6d+_Dl^V#RkcY+?U`*eEiL5=7 z6-Ev01_#Q%15ssEZYL_@-g0Ak-ViQhmV5{%V|w}qXg$OI2lZh!TyoBvGe#Mj%PFGK zShyJKgy;-NPK)#ubyaF+0)c2OY@mS$@W-o%1u!|_BQ2815jzG2h!6k?G(b44-)<|W z6B*ZtuaB6O%cCbirj%~4&p=EvlMqTBPm0X<1*O`5vC2b9AieBYYva_Hl1IjU1_0z7 z5#){m01S-?09OSfp%GCIO8Ni;$N_A25PPC=MB;!M=hS^zsssTW zp=o4b1k&O6o8rKl^mS#g8RbLgmOHPm4j_l!X;efJ5i8QJtnz=bHcTp+5>v7qf3h+C zmwT7}WV+#J$69`Iw);01HxU|qb*umDJG%)DMAO-QW~CVa=X?9UdV1iC$NMNNBCY)C zhg*JqVdLK(S^cAtrFXg_lV!Ai7xp@e2nxs`ZxLdVezQln#j7VeP?P|!zL{AP`g|Hl zfw?s)f+z9AWIE)Ihmvl|6e>Xo1&O*-3c_{<^;DMb!POVhgcX4ZBU1qW^O>itlm>N5 zkPoCF5!c?hgF3Tbm%g_6y``E05fQxizVW+n8{U4W_>aG%@SGq5q5~lW0sC#~hiz$b z$C^a40DIAu<6lf(%9F+?V9pA-<5gD~MDTEJ^uuc03c&>@64t{gR$k3k8(gr295FHx zbg-(laCyP|D+(7ePieDWu#xJ{3lyhIV4YD}Lf06qAm$))XkZ9tSp@u%vY2iTI*?od zL2R`YVw=oMHkuaGN6gP8^q3d7m%i0wHSF*?x46ygjYV*T*wb0E*E_HzpF&_;Cl@+KMWV_Q+!65PDUm=ln@R7Bn~hNN@w_8gOnG3BXJBJFc0gf zx0Ej`!TeZ21MCB2QV)>P0SHFAlO!!)Fu(wz1Y{Jr8z=WDnr~IP#EL#E>p($zAWJ!! z5xN8p8t;J#Qb-BC0z?xM1WJ)AUq~)s2@*^F2dHNNJAnLx4zeO6z#H?fpgY^y8AK;( zN;cQoWws0?5W0s#w#^ukie;t4Zv zBZC`UcyhJ?K6pCjEqeX-8Rrc75CkHsj6|luPI_cIN-3%LaKeK|BytF?tjZFakyHyE5Hpc|#fS@7!UY(BiVTlbqY?z$g*?xkK$Pc9q>QAD1q;N?XjKpo zS<<M#k>NOA)nBfJ|2QV2Cz$76TTmTCQji_9mGo0e9jHp#&DHF%IA;bkV@W@yI zY3Kkda?}bPU_$nZI{q*&fDVv`b~;M=Ap>S&k$q=)L~sGUX8XhHY^6z;DCMH;7ztCU z@P1I^`*5lE%CZP$r8ibbZ>&VESAn)!%rf+^>WFAMQ%i}WBztAy4=N6@eYY;cj|MPl zC{hjB3?u{9FT1nkaxwC{Z~@H)YIG0;NF)(FX-+GGOXy5fQ@t`GcoP?J2p~u*LK69* z0FI8y2!dB3Ss)?_9SOc^3~*>LjRGeACAB8Vh1wxRAvsS49mmXKM`h8q+TiVmnBW4M z3!nf@(!qt*fpaU|7it{WSGkyS`_KC;|NF$+pU<`a?3BnF{Pyy;FK;Sv!IyUh9l!(&q*&>`DL?H3^crC>@>CsG4~?5%>oLze9xZGY5`e8jZN{EIST5fNlu^pw%J zEatL{nk5$?0Z~Up1{p4(rItP^LW7x#Ao&HV%Bbl!#-~bGoWyBV1B)J3C(5gcFT$-?^VD1R()wfyRoFXbP?*#4nIA? zmR@slyGdEH-L6|_D`I6w*oI@z=N2MZZ&(Z?KnIM85pZmF*b28>3wGLzm~Lyk9a31d z*|K=MqiBoEy4~wQLF%=X5?P3fQ}%RgI<=+ijT-7!1sAwSp~b!)`Y-g z+)=;)gA`awIv^GxJqjI&l6vBfC`!1Pmq(#$2!w)KAOcv2xPW7UP7)u52ri%(cU1V} zVE#$!j;KFTD}s>yFII=;Sg0f^^d-SP?2Nky7a;9WHG~#K;SjswrosYJ(!%jXoIXnK z7!;xuUbIk%kVS+85CKU6nJkcFmgkt9TPX2jf@Q9fvm`14=0vJIV;}bwgO7v&yvLZg zWQvq~%rFzy9TlKyB`BDTAmRAn0(gNK27!XxCTIyRP?H5haKpfGh=2kA=1gT=fFCW5 z_mjLZ7SzK9;~|~uU%L@qU^Y~FwE0PXPk@F>Ty1Vfl;TjEC_T!;ng1WTV`xwk0r#1U zV9fo87kD%%rW%N+rM0V1-t7O{mL#GEUB6V#0NfagN}vETw` zJwIP&zg!)<1|6&j-&h{Jy_yZ2`sK6nFYb^2?(XPU*9U)dzVjaz+Wyaj zYajLG=W9Is;zlMP?KHi+!J|VjVtNp=20WvFC1~pN8z>0w3uwtDli;DwXEfqqE`34< zxBwy;j#`Nhws}gZJ>vInn9^=rKr0&1)MNn~5fK5Y0r4XU2|F{JlOvW~KpF`z8DE*n zpsR}ueE;r`eDA)GG-P=DJ)v_G@V)OSOju1%@dISR1{gB|Mc%3x6MDl7JQrdC z9w8AR6OK?NK(7B@oey#F)@si!n)Q}@&g9M5@uVKe+V3k-tc!Q~L<+Y_vxp+nX0v`} zQDJRqQLSdl%HnsMto+!Su6psiD~pTP6ujN4FA%?L#!u4lBQ@=s_c}E1qXLlvM)~hC zmk=qy1vvSH02{3Z>q_6Dpp+~?hqjsA_sJQg9vW@_m)?@Kq2;zY{XX5S&>WJ`@_Q&k|{iZQhCSt-D`Y)Iicwa<26e@uT z_-3Njs#Sq@>8}c4R|R0YoS26|%?i>SMv_n@F@YdlP*qwGY31pJYa-z}7R4#G(H4ea zFcvBmwd%~#kgzCZ67hFIG|*8>H$b{@O%rB3bbNDQ7=K)-J&tE;Bg?UCwzpY9UvFX3quS zumjQi)$U_ksp%^|;$NyQ1x zn9oko1FdNIAe4S{Gnh4tq&GWpuehJ;ML5PnCJGrSXE=zQ8Ktv;8R{&2<;c<@FyLCE zD4;P9C!9E#ctm{iHyI21nV8N|N_`QsG5JOW1G;BMgQnxX#{J5k1VSD~TD|uRa4McVq3Scq{wZBXt1Rf>8jPpoCk`#D^Qq&Y@ zEC`}WV9blIGD!+7@#rzq5U>V8gd&@pC|p6nVQL8S*32(`zctH5H#n%gouJAJZ5+)_7 ztIHMFjanc5$;?&?{C%*}b$warg9_J&RnE)R&JU{0^wRygviv9GtpNK!9&i5n$(G-K zu;H8A+rNFVo9^Q;AB}$f_z?EZlS5xU8N)t*vj4Y_hcSKx;UAAT{MC5nUmU2o*X=!2 zuIq9wX$R;$2BL$FPCBw^q19|sTpH0R%Wt=Yi4H`LSpAtg9;%LHF_{7q0l58y0Dymg zh~Gl9^+gQZgIY?1s6L`Y?O;AMn)VPV5^M5Fq_bcw%g?e73G zy!$=t+ut?5^~Z*{|5&e@?yY}EzCgJ8+(RDu-KG>}WFm~BzE`aq7J(S4geImP5kF8t zKOtN|8_1nCKDdA>i7r&y&y`zGF)47yw$EL-%TcJfOA&wI0z{#DeQDKu@2)IbQg0|; zt6KsW@Eez?Monf@eet`9MeD5!vcISlg+F>sMIvi#)4~N9TtKgahz=aZFhY;1fXTJ! zCW8pN^hLaiQqoN%U+l&Fi-rlRQpqX91weUDTA)uSepT9$1XT0bf6gh=4XVaVfsXxNbPa$ocsB z(s{?#$H_rU}5!{6`?^!Srxa6l7vI;*#;J(1muO%#VVLj~wB$auy`2>PE z2q=0Zh;QHm(E^t?;~z6YHp&WZ6Tk>q37i4!&;f=6j;;?Qpl<+Q;{m}7pg3_Aq)Pb; z#3-iRRJq`2!p^OlQ>e$O;71&V%EfCq7648Y0*4c~Bq0*5%+yAW72q|?{0sQ`Vs-{A zTtFTNI^gEP1>n3$KaitWGt=Nd>JSkK14#{>7SB#ZVBA+#2O>W#xPWVwEXT#kiXbuq z>>(v1E>S8%tg@XYkCvcEv{@tHsa$ZBD@L?JEsN@SA&-wM6M|VnwAL{e&c0e?KoCZf zgO3qypL4YR(0>?H4CIyJ0{YSMJBUR2Z6!W>k_$u90ZU|Ns;M!!V5_Bgi1~iKV&iDSLEMgmNlgS?AS#%%BISNbSsElR zAY}j-Twdn8wla8Qb@;~W;O(^tEy77hQx{dHs)P^bivU4o1erCKl|mvAs0*?WaKcjH zx7yM5`c)(vC{I;q82UplfCvzv6hvv!G6tBV_7GGwCuLQu@KHtH0y&6sRq_xK;2k)U zM8IsS7#md{676H^Php0rZxJa9RiaXtal!<&BQy<8k?4RRKy`f+Osxi#U0I=W!HqgG zJ>8XB?}cS{l^Ff-A=5EmUT(j+*3FN({aIi2PmqZgs443F?9zsBZfyPL-hgO8zEAFW z@^?>#ee-Mr`|A0auonkDyT0>(oavzZ?8j5fU-hL=u5~Ff?Rvj~U*Ki_STqzsY@@Ak zlVUGI3xXBsBiP~7Y;_mYgvOZWWTva&2TIY1pb4_Z2t;frQ$W68cam7Z+VA7%PHmG_ z(aFjPlMB(KLf<{rq~a$oLNp&T%YQK~UsXj*Qt!X-c=uh~_r7O*>$`^Ue#gM_djth< z>EHgYA{z8a|5H8IL}GrEaFD z!(rqD1s9;LBjJz=#^Nx`mI*&4u=7a2)~G?GtqbE)iFKYc-%Qb)3MKl2`(Tmpx6$9h*Bc8@S4t1 z$`=JfgJqzN(1;RN<~?8wkv!jK1Z_$|K?oc`97YBJ064*bCRsoUl*HQ>(tbJf;)jk` zMe)4Zh|i8lK=%^?f`HMeQCTPt3LvAUIgf%OQVS@|fQh64*aBdd#u!o%SpYRnKyc4k zWD2O<=ZzC~k^(}aD))jsD8V?Zr&YHYkmZ;ncdX_CPNhYc0DOU>GaFY(j*=sA9;f0p zYNU>cGri1@4rHleH62Tcwqho~789Okt)kR5X#_68K{(>~95C$Jc zEu@Ue`l^j$LT1CSpGmr@+eP{yYCuP#;D9-+>8)~#d6`uyMCv1qDW(+rk%>w=MeaVq z><)g)xWkXq0Udz+05B8)mB=hL1+1(R7og*bJOXuJX%r+A zT)-qsifFJ)7-+VWHM+R{JXD^R1b?0@d$UCv7tPg+eG(=S=|Rl^D*23%f$;4xvzDke zNIU`npN|W<3do()Vhcv@nC(KqBAK1@!&Q@!|C_J(aE@!eu6+NCnJ0-E1c=xTpn*nr z1D((TIp>@cNq_+iAOa5v5IF~eU?xEVAi$h+y1J4qTei!d8O^-0pZ(;qE!mPS-$dS| z=lSjP@zS!V>Q#N!b-HmnqxbsuT6?dp84)_jDRnbbT&TpDZZ;Kj3J9WTJ`Y_Ikt$Fs z+IYw8R>V!q6$R%x;*X^RmG}=0K(wbwgeBFa4oXpCzyf?q2NUDK0?t8@)a(&p0V6y3 zXXlB?3s9u4YD@ynVH8O`<5EcqSik{IXJCQA0YrPPGy$s(I3fM{uFPksvZM(OQdTNh zz*LzA=}+ZkatGqS1m*@|or&cNAc*J+3%H8{6uoUBl`yZdC8uIZ$-79FV1W=sb$+mb zhY%f8C!vH9Y7`qI$SGBKL{1`7=1wVb;R#TBkqPcq*?A_mvZxIDGbJ;A>uzNN7y;u1 z7VyaE1N2caw4GaSS7>(Fs5>>T>*evlfnY(EpH2&kOV`U1)=I7G<(B)6t~c%Je~C%a zV$*Mz+CE?1^W}{L(uVw`|1CYpFJ?#zSl_;y1`EFZX!>_QoMHXzv+=L)XrHd_|MkVD zzdTX%tTX#ewQC?FW{)i#ZoJJLvL}{0`Jls^EtqJpIl_tjP(Z)|@gE@IpvPt47^Q$@ zLFomQ4|M|&{umriai2gtrUz|0CviL@fqw`Y&gF@KCL#$WW5hSQ+7Or%xXrV9Yr=-D zF`G9jAc*`93!=Ad0uD4$acCvhX}-rz@)eL5(8Q;{PQG0}Ny+7!#ZORAzMK$5q+rUP z?na5wL<$QgT;U_+GY)Z^X3t-53;_#@0=Jii2GMASJrQ+8HOAl?Ls(s;k!sLA<_O`4 zm}s^yR$Pgw6p}syHPMDHGu@JidLhy#OzQSV2a<0{6G6O56_N55fx9-tHaIZ7#5BAu z)&NrkD~95XkpzM>KiCyhbjNOb@4--v(>S6FcRO znf0*EwVq%irXx~qL+EU>jDVuJ%Y1 zhFgg2p7l&4j)wzm_y`3^^@>hpX;6SD3n;MoTvf&a-XiYvviNLx-3rG=J0=|f;;1g- zZL#6!9rK~_XZ@{9cQ&A)(1E*AL4>{o9B@xQdHLe`?(oP!IYEy1M(T2km}rozvnXj5 z?Lb#ogeIajB}p34$b|&t0FhLUExJr{QzfTt4rcsDv;-D2j**N(MNz9V?9?v+k6;0g zS=5P35s@zj-vU)>PLP+)BdrAPD15;r62u!jEzFlfGK)BBi=e@XHJKIraghyacj|>gR_qW&zFur1@k4n$ zh=|M{zez^WD=YvV{sR_}5lAaQonMn?G5T9|IH09LqEMY5IDn~OcMAVQL=v(>PXP!= zLQ6Gxg&-nW=|Tf9P9lG!489@ei(FmrW6#eePr!`;1Sj071P;)P{Yn{N*U!tkhc_KB z6DRCa(yz*ZkMxyQ*|3h|sG9RM06K>!z$%^V{lvuHX7 z3&?G^pAb%xIg+@PP8rfSRz7ny@gs#H64I4+=WPWOzZG^b~*v`=f)& z2pDQcY5)}-4~g)=Rd@pE z9HO=81!~_Xf+|~EjCIoW23X2|*vKZu@-#{;=8~t;k>Y)IsLm#d1%p&CrQ1&uXp_aJ zf$l6e#Ft2Kl7#3`K%i?F62%GX?D5&b>Zyw+O|yis)4nJQ^T|{Q_?*EWSEU?;KVXB% z2u7Twvp6LNh?2Vq3dnP#7eMWh0!XotuJH=z^<6D35t`S;(us~3xc|iz3>uiF;t)Or zAjP2(WR(9P3{{fN#5i`nhyq-ytMKEa?noja-G4-WAOPYHP$5%bmkdBaOR2noAWu@p ztKqXGE#Wf&7r12c3V2F|1<*um(1{$N>vP;2cnZ z#pen3Q!2%`&ez1^+kq(p&B4GK9~~*808onn>Vr}|AP)-)fCbW<%$8po4NyU}XeKQH z2S`caCYuA@%uc+zX*a<0kv$0icf4u(9XX%_h7XBPi-JM6fqhP4ilhS3g@HjN#}uI; zBCwE*`GN4y-)#$5SO86mjSUnNR=sRoxAH zmGLX()*E#$n46NJN7{eDf-heR9I*cN&EmJur@wk| z97k(94*s7Lb$@Uy?|PG+u>%KPhQ0RiJ@FCb2puGBP(3}??buSZTY?WWpx0xPJ~SV- zqp?(-f)O~>0SYWM26_?%Ah59W#gGnAK19PZ1*J1tPGljfkEprd85N8JP)=}=cUwT* zhON;Xx5sV`joz{)YV&5}#*M7VP2j?&$PF8fKiEL88GQs&%`20mMN9#UarSmW7IDC* z#FwhRAii}zcCdgg0t+m-Rwx55!GennQN}~jW0YPq8@_SE5rGA~j&fsob!0db%_<@S zNK_z>DuaW{0=5Gd&BmZM6LZZh^os>U2cZ{$1+Fs z5a~oHSU_XKp15F8qa`8$rC^^ew$&WP`BW)^4j8$EifYku*6)gAaez2a1M+c8*qA-) zJr>|wipA5QEu5qPI-ByL_sz+Ej46-|?A(Ibb_SjyEgm=^L11&H*k69%?8Mn>@+&8h zODxwN1Zb%`lWaSmhBLH`FyN=ogfWN<`RT*|>J+ff+_*KY0~Oy*wBmul0v!%0E0uB- zatSU8FY1yTF(YM=F(|;Xy5s;XIFn4g67xGq2{w}KjAhtywu{6;1$900<3EQTo7A9E zV#FT*Vwz?af{2sSZOgf?)%-+^$b}9fgF)D(!HeDqIvFUJNj3oo+|J45Lj*X$jRh94 z`3DHd4s;eRme@@AQtbx3Zax(S2V@NZ)r>PrpdnS7IiNvKXsJ>QVLqU;!SH?DY8si)UuV%h^G5__msV^S(|N3hC zudlTI&8hnTI$ZRo-8WyHaMT~M+Zxnl4rcAwZ20mUdJ=^A-W$6E6@ls^)MUmK9reU= z06=uRqgbE-XVNS{;~1A90!e{%7Whc{Y)qvYPEI)PkKe_#`G}ybpl$x`fwnCH#_w;Y zq0G2>TjZ84#?6}}{(rClT2RIs@rl*bsqF#X;nVp1Nf7uJ0c%ykrL<#G12`gVs}YVF zZFVU`3}r}u=`Wz(leuIP>P-<~K|yd}RdhsI`1VS}b}_7@%fM*Z9TU6HV#GsYf1G9n z3-FOpQ}3xGqPP@LATE&7qs=vF3+BAr)|d=nN1XbHqX!!3Lon4<{J^4GU;U#=2|L9X0JSK@*WSkUU5; ze+qL#9Y}Q2uI!Em5uhf;nvc0F@S5M~ERgwbi=J~lwW0eazk@UfeJ>7g# z1WbyMKu{;TOFzGG$pezic+Vrm z{`CGXDPjV|{`f*Z`%3AH0~%KIy(q{ygb?YMvT!28s+1BV8+DeDMPR|XWR1?U7>Yj$ z`|N84QIf+?`63oQM$(MaNm3k%G_c^0poU4uk7z)Jzz0eZf6wp@qW9j0X}KU$dyuv@BVYMe+YcdjMA*lLD~+X9tW}j7A_t zxf`98HeH@c6bKe42*7y7*Hlo4k5K=pMUWts@R~&Q(Y0-!9_9u(;2Z+H$_w6O0eqMW z`0CG`0UU4(=c!zPMB)P$a37Kg9T9|`0!}wy!C4hqwI$gYx z4CZ56B{l=N)a&k}#$J0kSb+5$_GSRVF-HW|q_Vy<<^l`Y_{j3b&Voak@+}}B6cDI$ z6db5qzyjfv8l|6%1rU%Lh+Y6w&1Rk;&jDD#<8n9d&%@!6Mj#?C5xogSJRhO{Jb3ZRK@R3rcgtZU^C`iun&q_d!mlqen` zpjMtXWd62Ridc}aT5Myjm)WmZIM@&~x9#W0ivM=H=AX|sf40*0#jOMH?jHFPV>+sd zKm=Vc_~y-=V8Kg4gx~#e?%S7RUp?;o^x8oNrO~JG-}?*JT71J9##U=UlO?#t8qucV zzvB`{2rOXZ%S4Kv#25|^Si?958V=dRJM7dNMNoPQ98fNH+-F7;8cI)~p%?|3@=zydhBdlgc3OHCIA6C>P#PE7XxPmACipWKVRvjKaInu3#W^4g zSb*Y8CDQ)rAlN7AKDNj7*f4cOSBag*vs&kfrsyx2@KLnQ))uB)T8}wKV5-+J1ga6Z)uPeYC2tS^MH zPsAj{=Vb0kv<4ceq!GP9L`_{U(BqE;d_68n#AXrU$u7VW&X&@f6bmFc(Uj23BZ43j zWs~DbLKeJqvr6g$pT(OwpYFJr;iQiALW=N3moi-oWIl=PW|2A)RJFY11@J=DJrU8a zR1o~ zJOp0|qk7Pdp=0br;&3)aP*Jb|W4dhHoQ9c^$4Jc;)ZCd2N@DG_#hy-ga-hgMW)1-d zl%j&g5GA}t-rS5ghBwOB0XmQuOt=h$TOfx87VuK|RQQnicvyU3l9}jOz-bci{UQqh zSA=R!X#`w{Pva{fVvC}XPS=>Y0`ev}Tc^ZCBoR>1?M+po7=#)0A3!kcjF`(|f=CRL zqR_&nwk!##HLYeR(2vZ+@~k{JKNI%*JD01;aAhe;&frruFZ!izS|}ZFkAWVU169S$5!`eptS_2Y~=8)7cHGaTW7Mg#mP)B&0@O$Rg}Fx>`UcbFpj zj_EZcDd3--`QDs{PsDPL=XmG!Ht@fTXkuW zLJw83A+`JR8XgIbi17rJ!P97rXas>$6TCS) zWSeW__hSC9|16!wTes3g5WQtXT+pWQO`F0tZe$rYZI0f&m3A|hY4cX?Il_OH8}}zc z=%$QE4H-{ba$mL;p}eTCP1rrXr$Z%moKI44uiSC3+{MSsXSR|ZcP1%<1ebr?K}Tdq zZ1`?tXoDf7K02)46kZb>T@hudGe=cNh2?MESP{H!S4>2GL{P0Mq&_CJ0Y4(_DnJDk z0Z1WAMtfo+I*@%W5p<)W4io=L7TS$L#C8IEd#vtW5fudPG0qG%0qZ|$a*mW#1RVkI z>#l^@y~dFJaXSv$LgCdI2-_JSiY!AC&FXcTkq@XQf^r~@>C?!|>@@D#0SVFpn%P8A zNHm?uc0(L-9vQXz{Y)iU)k14#O?ac&u5pRB2RXh};30UhA%Lrxk{s!~sr;o;M^;SrA85Y9``n zm!NCVn)Hsb;g_~Fsboc#j-fY#A|eQJ74JBK_5aP1@QF4pV z#M3W$(8KYjGflaSQc48Xk{r8CCqq))f-_urCy!B5E4OVIii5|_c;MRMhAZ-EDkVM0nCk*zSQs8krAA9^lu5Ub%f_ni4rO2Pi zv5luudTk)0gQe`^d1VB0d2w*_UZV)xxP7%oi2$FBR0HD-lpLiz z$2l9#g|CK>SBkHslt{`2V9PjQaWeV~xA07$hCH#}TS$@d?+-ZRSS^N~vFIK^9G>%Q zdQJnjCY$+s$l?$Zgaf0eOczG@77?sK4l-9I!4J}k8Xtxbj5L5!jIILhBW4t|t0u*9 zJGvcvMhZ`;DMCSJ7j(=XgEs|QGtAOVmYeD$8rBf%>6*TxXD2rOkeB{Olb<9sepAcz)bO3gU z=p+e-t}nxNQ{4DI+0fGpbm!}3cCg?UDNU94F2if863GC#k%dIet0&msDA$}S;H#Jq zU$kBluNG(lk+fFsS}w+c#&WF;(83PM^XFZezgejJ_364_ovVL)>o5+b?;ae(nCRQ* zEh16n=eO1zSZWR$~Cv!LYkri z_iC0fcK&sGV_l7jbn z0p_!eilBW%QZ>3t8d4uLU{ad>0SG7*;L}!04RAoiAz}fZ)pyIBq8;a3ujX3eh$xN* z3t(T6YTKg1!2;B4dK-$vLyE$J%M2knS63h+hXslg1(Plcrho-PL11PRSipv#Qc@Q3_`bMs#+Hfdpc|I*@sKhw0YQ}I zXj&JLUkq%D$fcx+B7wfM9jvYd6KMi9q&o2vIidN?IJu0{b(VrO;80;7nuyKQh})ze z00*&hwlJ+Cxe??SGM%IYV1Zawq%n{k0|b$bQ73V?hQwC;ScXwi6@NO7Mqxw;i@3%5 z&1jwI4*b+f2p~EH3)oFd^$ivJP$|A>cIaRMahp)D`%zQTBgX%b|5tK6E7@)Wh6?No z3y6B+j*W)_UUT3GtPv~;3O6-D8Cb*#KoFAQF?eK!1rSF>cOu@I6iuq+fdD}r3N5`x zTFIDe!xO`yvul>WLX^un((s_}M$lB-XfA~o#}HJXWzY7P-K=x~r&=hFXA{eoUt*}P zK69o%#+~*)HxL*2RF}dOt@}03$MvaCn&g2VR5^eH_$ES=BoR&GugxQ{ZHIC~jph+pP*<4I zArRlhR9S}uJ@PvN0;L@j`vHM#r5e~El7V`=oWvQ_6afctM8E+xMZf{YMOTZZF`0IS zpB_y4#bo)f7VG};Lh~2b4}N~9=Zm{XzkGNct5V1!u;AU(39#VvR}*jFOuc+3FQ^F(01ikE z8jZobqBYvFnRhHGfKMrgrHBR8mtt?X%M{dR4Ws^cKb1maNf#zMM8vk;k%5pxdL2

<6qBxohr0<48>;5F?Q70CTq8d<~GR-(rDv0{y z!-@Pt7P(EJ0E{Zskn|y>#Iv_YW&;HniaFskLlyxCT#^w`^a$Gn^N)NmY7c|5CIX7T zSZXYBa5{yt%F&__!ec|MLsp;+=r(uA#VmgCf(6`1m=*Y+_b&W!)KoCWNp;Hml9eb` zvI1v=APw6C5C9e^y(&m^8VvRd$q52Mwv%l?=U~L6OB6EHKw$xQ0Snl5l5v0qO7}dC zUck|Zq+s3|s$&5|)Wq6f#W;!Nx*aOPj_OnNg>!xrEzMU*X?)RV7|_K`_l#JQLn=eb z6flZr%gYc)iX_={vpJ^0j)}eVIdKd5yaK~Ss&RxG(&U&aPY75tbRC#)L4#5JwH_|dW9ztA`tLCO~8Nx`I$S27K|1E#vmxbRKs1UovJQcNN*eWLLdeR zpo4fcZqcc$6e7C90$x4wo~W;q0!oMUV?aO?6i|Ot2?99-Sg=-XyQ;$hSb&)~i}`Py zaHlfi)$YVU)3SdtQ~i(UT2KK#xz_R7jn22sHF!Mu)svBTPe#9dCV9cTSCe18nf~g{ zEXQAQ%Y$S8vbz5t&es3!V*SsK=ih2eo-4E+vI`ajw$U!-ir#Mt#g+ng2);->+8EjB zu`sWN(U@Qcx4>YgnppnKY79L zF9ifjEFdpHFNoO!Q?yl6Mu9|oN^rpfoJ7d|`xBxWnL~Rr!*M#|WGqgfGw!%c=!Y?%9V0s|O#7T>3|jz!lbXnx zRF{SgijaV=W+Kkh#v{?*XP%WwmkAh_Li?~OrJ9I^jRI0K837Br7v^7zW|ENv^`<8} za#KwNM448e5=B5{*9k$v4qf^@vz)|#P=HEO6bi~KHKG-JRw6dUJTmP044RJP+2A7b zN_L=6m>029A~_^~B0-+5DN!AcT1W|kG{dtpt;_J+$(Abs0V8wL5+IbQYQ2yyTC-#d z44)*?z{?0_0rm;q+GD`o;&P^Dh1BLz2>9%G34%n&?}{d+c|!KSdNUP~4haCB2OuEs zUQRY&gZ%MCUw{@*id55MFpZW>K_^WVb#jUVPjVh_ln^`_mPz`WrB@(gGTDd%vzYFf zVU`U(T5}ohc{>BQqWhtPQg9_TjoHkjiRR;JhLiEQmD(rLocQd_xuWOe!=~)PQ%S}l zpK%fwL5Zx9Cv+=Nlp0*em59veO5|sO2x{>ikuR`72VSLmp>Y2iY8NASsDkIUQ z&td^`EL3Lw7L7q|QiFy}&-cW0kOm>16Zus}02Uw|<20rYIHo}WI_UjWg2ZTPG{Cn^ z#{z5^>9wTw9xUj#htq6?b2b0)QcCAWXoe{@z-z+bF);_oX7h4IEAr5iA}ia*>{1p$ zK-60)v|lgxtd_cH(pB4P=G_ohNe~E##8H_TT-DS{S<46;fdf6o;Bm-dzybwhymVf)o(LqU7pL+7!2$&YMc*q{z<&5cNE(;l!OLqPYxFPA;Z4PaW4y0=U znOORfV-OK`U~<DOByCX8 zL=Z$$nU^K=Z>8^m3UnxkRMVNfcqW?578#%FOiB3J>XG@A=Tim)afE~OxlAX;?b0kp z03Z?|4O8TUHNm+wI@2VbAOx{BB_c_jNP)Itkfl_Ua#iRc{77}jICNb$=@*je6_d-0 zsqtXJ`D9olIaviLA{9ZMdB?cbiIH_mG;_?Z=4lQHBH8fE%u8vJg&NYQ;|R>K{RMIe z=5sCszynf{6ktk=pV3O1^?H_L$rrQkja~7@EbD!0$j~wu!Ee6ci8<#rpK?WWdB#Ii zF5HZbc2}z2hSR-JXk@p2McL!InWx$3;2yg>&EJ=s+v8(Mt6?jg?OAb7L*ba}Ue1>^+~UHmK1Sq2vHjqrIe%LX8TDFWQs>Z^QBPqL)tf*V;p1la|b zEHo49s=xvwIu)c~5(^X{(zAXa5fms$4k_rMV}XJL?f{CY@+kKI{IBs(ha5n&1@Cpp z6UiF!MXM<`1b^T_Mjg7NIL7}42!I-5oK0V%nNm_QGl<?KnOPrHtY@yzQBGMbCnQ z11=HX&tL;0l}!aQOnbf5y_9QRE^w@sc~?skxx8BHp@`^ev7H=YtpvrD23%=?p5tUAja5&%!HC5o*qCU zuIowxMx?mSi4F`p5b1Rih-1RPCh?ympaOV6RQPZP91&QcmzYvzYKIa73$B&hZ&6#{ z=>Eg5+`pQr{>4=FZ!hor{OX~1w|c(5f9$JAxKa#*1#i&~UP)yU)kI&uk`hzsqj&dv zKe=|80;IoLsQs_wu+H;6Abgoh9$}+YZJXo2|zE zF3jl6o!BU#8tc6V)E!9yrO62O0yX5>z74yfn5`R4Ti>@2NC&}pKmarV5aHh~uKqiY zNP0K)l3frQ2?j+#NdruRP;ekuDfE(VK9>7&mGf?SJlZjO0UQx|!E%-vZ#ozPI3mVK z9*hn_J8m>$Kom@QD@g%ZP;Lw@3lAy}3Bc5XH(? z|8PPK!!Ah{j@T%$jitF@XG|!6;spAR=}i+w0A?vR;-D>t`=Sw$T+ngc7#4tbKtIA^ zM=WmDJ@yzeyNe0KlBnApu33%8<1ueH4JVpMJl0XK4N7ZNa~RmO&bq?L!1?VVC$kk} z5%XmeM)%Zrye+#lf;m@}9|B1MG!gPF1u?+Ehp@vwm`I>J2Bcz=%`}4zWp5~!@zlVu zV{yf~`azVl{D|n~3@6(wt&eBhX-`w4co?V8Jbyvb<6&=@+s>Xrep^ zNdfJ`XMLgtD@8!ROpwlkGzJ_ycr}n45}@>+HGqJ;fXmBirWGa?r)e>#X{i!lPMJFf zQANNf?DK-)K0pCp7N|pxL3|Wigh4TEV%-K1fhRuWjau`>EhWaB_puv}MKYdCj5_PL zUhvuG+_7lF7t-8kl3nv&`^gON$-LB)MHwRnhOy?|vq#3yAKH1bDP>Ws%${v*nBKp0 zesA$qW$B6HrW2L*^Seq$8kgOwzcg~u>>}nDAcAT=00n?)z9UXhyLBQrgb<5j9}N-n@ANwok3)C^KJ1j9p50WD^FPk~G;qo+&_ zztv^p2qfdRGGs0|CngHYQ+lfO^UR$ZKWZo0Un|t9;igy(A9n6&}@z ze6uErHZ%%Cn_n0YWTivnbx=&K!_J zAQM3N5cBCQ(6a+K#}Di9FLfx%0sjgDKEOf65$q6o0aySzg&qwS00dlu1v)__H9;yb zAlSnIkqvNFuz(sN7I45#C<3@ua|VeDksmlfIKEO8&w>V9roB90k|`NchrnK;hhh>aq|CT-tl-@MtnCBV!`f-RebAlkT@!31h?%rb7+ghMqMfm$j}pqf-I4eLPc zMaZ-G%vBS&UiC|Vw@d{>h2cgdf8FtkiZ2Sc^n%hdJ9+`VX6Oaf5uHmhQXCBj07pb# z&>9&A7T`@<78;Nn6o7nO5-t;Mn0iTGAV6S=YBn;+0MiJ~KnF7IaV_{rh+fRh$`Fzs z&0)b%2&2&sYc%MxP_)va_`~s@=UrN?-)>nGo`!KPthoLq&RB2$p{vb z5C^E@preL68Kb1t^s|bzsA|%7yUq~|P)_CH!L+}SvF6X+5NR*WVA^?HVM0!6Ic>!VpI_rfbBXDpoNu%Rf zuz)a!dQI>m2!b(J3*Ddq_u-PZ1o|YThzRPP7B#&XllZ78lJj2c=_D(k(|nF=T&&aW zi`j{1vpuujvY)0F4{9^af zHv>5@4^^ypcFZ5?J9%i&ox@d+4^*As(=c?P?e<{DMF6Hyx=_+urY_R;a9|_O6^DZPn5hT*(_FkX_oP1X(yt1kc9+HPk}&y zJDNF79H1Qt3gA%Zj-|hh|9=iJwqfVU023%ycx8-CW#&~n76syKjWR}28$|}EDC^~O z5R2}78?6LaitNiJZh?Rb|9VyGN||4F#zj`L1F{CVBSzk=7QvhQ)EqQ`fZ>=7M7vd+ z3>I(+1Q6X77Jv(C(I|k=4RMx6ft!`_U;&PFKm!t`b`!758frV83KTE_QdmIu8Pf8@ zdIz}x3u5MBEuN?1q6QpDZ(2(-RihA6+>u3IK-7XM0t;v(1_jvs6Vbl|0*UL&Mgsl$f%pBVzpGDmepMeGaT(QP#$ z4dY}-Mu3sE*w&#hkPDb2!GhhS8J37T`i?DPZ-iA*XM79^MO(xU{_Qb1#gB``nT-?m z707L90$A&h#)tM>!@&YlgJI2qt7aVa@l3I#Qk{B7cK#elxrQ5k&k6-i7cVRj3u%C3 zm{x8iDS#uQ@|%2{+u8lG@K(5xWWSj1rVNteQXDPtwUDxT<|$JT@1w#d0hj;_biT() zycaBBSI_pIDiR_t(VL1H;NViO2LlDDhAV|GTuliq+;}b{k*6WeU=j1Vml{xco|5=n z8R$p}kK`eGNj-M~a+D@X1XFpzT3(`v%TP&4#uY4@vo$ryo+u_pqdX;{9w4|;=Ev$z z#}6wFXeU562Kbddpvc_$ij7HYCi*JPhA&l<1E9xcz9 ztIZ!P$sR7unyarov9tbUTl3M5jt2)z|Fkv#eoNbh!-sEc19h*vOP)2>EgkKBJiPDz zk({f0i&ncjZw`&VoX~zW*aSx0?rgg`I(~O*?%v?B=fhn$wS!~zRlW6fN6U)3(!Kmx z25@RflsRhCj$lw2xp~ZKRF}ZF^dRUhY4kZLy+B2Mq507ZrW3>2*t5MysOBM*azbK+ zb_^D9$$64O=-qYbFK|la1)NW6z~X?##+uKG+z22LxhKm39I${QHVQ0-2nr4q7Vu@! ztv~D2WWXgwMHC%S*h4BwlFEJrEEx4f;l{zZ!kG*k#pAN2PmV!9Cn;c2M1%)BR2hzt zpa61!xYEHTyUB}9n%lfTE|3;gx(trGV#y2mMIbg(yLB=@ZNz5-4xmN(Pr9gOLiCz% z7CXTL)_SG)PD94!BG+=M?`~5rU2#hVaV(t)UH zp`L^1t(jy5*h)YRz3)nHNI^S5R)#VnUm!1lZxSr1N#rSc0#E=KY+9f6o-z?FRLs9# z=33W>vx5a}{2`-c%U=?|T4>d?0Zqz@bdUfiWRWxceqI0yP)8*4afO3sL0CC4Hh%zsBie)(o0wVIg zQVWs+^6||Q8(1JdrG@my%3wocVwYtHZ4xNA#UTN79Ong6M-)_M2&;&UVAy4qA*3v1 zTT`r|AriNtaEbc#7r_5;2YLkPEMq?p^TT3?F9Yu5XuOsKR!e9AK^|Pd%dXiFK%o)6 zW;@XlVAOOkqfRr^I>f(XKgxoQJ`7B{89oV3dCg4(ROOq_Csi*@I z`AG*@upf%)p)l!UwvTjW!KX!^@P(hneH3eEZ={^`%MaQg-?9@w1&>Py6d1X^km2_w1bS?OSNezq>p4 zesl49_tE9C$?F4$UiLMq_g>TXXmZq{%fbkKANw6*jI6( zrJ_H-vb&_Ur)*b$PA=QuUenfTSKPeYJ{fPCa72tdBSvke3A1A~J8U#9bj-hF!V^60 z4VPLT(u9;4Z8|v;u>rlGV9c(ZC2irLX9jJ|(Ognw!*@@e4HEU3J?MmwWP>uYSebi4 zVVQhFCfFpl2t;v85ZHIHqbItbN=IT2p|*g^VKKVZCzY{vP#X&p3QCwxGw)b(QxZQP z-~qKH7P%}?g!6bQu=>bTl&wvqn+JVSUSc2^TDQiR~U=|HrP_6w| zRRXE@R z)R*>s@nC@IHguf5eR|^4M-v=>^=23^>vzv*|MlY&7*l+D{m4J9?Eilk8-Jz^l-%C! zJ6UAv^;#(+YIlUU#Rs)JL-*N&NDA;!peuPe)76(0M?(UF0v%e(TQ{Wc2($$S#s$zU z_TE+~a>J(RO(??K6!RnP16#I;@5EMFk=wSCGN{@i)mcDZz*X@hk`#c3Vx1#Gtl>N3 zn?oMq;Jc1vOaf(6oyr#;R>VK8ag!QcFS4K=<4w0xK;MqkPVf(V#2nae2}QXrr*Oy+ zUT!dC1#ANpN+Uw^w{KzUaY4WasV@o(P|njWk$6@|2k$h8fdvS`A_Oo6GcpK^pO$#Crh=4P@Fpc4Kse?EE{XqGnBq!-sPY~Qn0KsW0av9(BPIy&JVG;fTxdtk4yOAt z(TT-eGu(z`x|st+h{T)Dh+P^S{-huMz{DRY6B@Bc@NRVG*)W%!NJA4p%Nb8N*$+Q= zwqm1xd^IgJ5u+dw_9=H{NWrNLCyqw!=TsF4fC3Pp5fDa61lXht(~l6VXAl$}fd#}H zjkpaKK+Gf3Qcg&AfDix{NIcJg@Q0z1OLf3j{c?8V#Y{?xL|gz15F6Q~<9-A4!@WdD z$WA~4nRgp0D_TyWp+Ne}fCHA&soC0t1($PtkVqFYG;|0VyhDEh$}ez&0fiX)!;fb> zm-3S?7N(ueOJB@N8A)-Tt1LNDm^GO0K3P$AuCZ>WJb$97V7w^rWM$g9y5dt!jYCBl zV+AP_g?ZyuB_|qcE;QGismPtIsXR9_w$yicttInzL+*X;@QEX>m-_1Nwr4->>^!X< znm*UtdAHB|2Oay)9~~R$A6y=)`%!<^i=O)RVb{OOUxpY-j2*mLOC;PET{-4EuE-8|m5a-e0VtV}B`A1uos%yAyKhmD%U<`Trn zZZIW+jDQe6=`l?Bj6%fV9!Ed1H&O!vh}+!6rP6uf`{0#83yNXYJW8qo=m?Nr3M_^w zK*fEU8qXvP1;=PhnCpq?AcbXibt5!Cl+XDb%7VmCPEtpGY9;?S(vE_l4=&KlCc{Rx z_sIkQED(w(Q<&05f+x1P(yxa_eWFp7Fb{end+niIq8eZ^f#U?hpH_eBNTs>VO%JjW zAYgDh_2zV0LMmhAOY1#Y0BeLL3tlzcsKp19Xi&X{)jeQ1qxp@O3hXpL6Yn61R!Xqx zbP@ibfLIa-3mkv~@t^ep3phYQrr=&!qbhXdWUzomrT`^_A`JgSgjPXCG5Q352qFav zT(YA_JK#X0e~X?nbqCe7a2qZ7yYeFxWU-!L4)S+!fbRj;b1bj`n9&tzA05QEtMQzU z2MdIU5)s%dksrdVm@I(JzJ0Y25{L{yaDiihK$-^1G$$?-&|o@KL{N*nUgN!l;Tlb6 zRf(JdN2CN3kb(u7MWREFfJ4zWG*o7O?o0l^hbw+{viToQHU873R%(hqzkBrahy8D# z^`jtv@pSg{ClgraO1N$v%;7-)9Nj z9TTuGA+$RwmW~7Lsj;o5?|3B3-IW;C8XHt^3d|1Nl(c(1=!Pp1?AzvU_nLL z_Qse9@&amqi2Y3lEl^s9W5Xx`;yU~fksk;E2#EjUUuxCuhD`KZM4>4(hHu5T6cmuM zqG)MG01ITOjX9hq0u~2y6&sS0mw;Fry>l+=Jl*8oWYSO6#x zA;dXTA3CC1hR6$0iurA`)gv$90E(6eGGUYHM#SZ{^{bB*^P4J1=Ox505t7ZS=0R6s>5T zE61Ad?JEEH(9WAZN3M>J-qJ=6JR4}abMU~;{`vLp+9zGfAN5q<)sCO<9bM^d|9G(G zPY$QP8alK*G_p3-^Hi()!-4W24z;d!9$r7(yL@!d)xnwcnuWmvI3i9)Pon4WR8AtrJ|GC$86lhqPw^Q5@g57L5-Adg zD3StnTBx*+5rlv)Iil2VQIXOWuK!ZFw1%dM-lvp zt`yS_9|Ht@SPBc+?X#{FI>`bQ7Oa>1Kmi2`2+hC&OEdyKBY-KoT22*?11w;VuREMc zzZY1*?owp|Bm$tozrzBVSyP`xNEbN3n3R1f9v0$UElxzR6Trdy)If&={LmOgM#lkI zpqD5K>d@x~5L_>}@&qIcEDC}I3(&la5r_o{Xqg~201FgrbTKcEDyX$`%|)nRF0{ZD z!5N*;Fy5+9!lx7#h*DA|7EnlqV6s|hxmsddD@8;mWpH3vw^m^X4yd#IldinK8ms!d z6ZOo&{LRY#-`wc<^kLuIXWAD}hTcAz`06>@F&zivm=t~U`uyA1^Y32H(1!3YH@pAg z^8UZo&hGyCWaX=l)KlfoUT-LHKsP~`-=Za1m}S}J4ijTKPxN7DWKG1D+@OsBfo;=9 z*N#wpr=vG*Brjlx&mt)xH8B2Qqa5p1qtp>07OPTHoQTL5Kmm}#@ckdKxJq8YEy58A z1*BtvBmxwaGMY{=E7k2jWJZNJl;S5nRJL6sr2G1C1vbz@hV_t%K?cFFKwv>f z0x5v_5m8YH7LWyS%RY*#Xg7!q1PBnqAU_Yq1T(WqZ$o1+koaB8jTY%sK4PcW(nN6` zsR6x~U;!1Rqy~(FRXZqtIM{Phl|7}=f0UU(p~kQy3JH=@Qki<}Vcw+}1k3Ug@MYNX zY*HkhRC<3|!c3AlJih;B>kdUor;KSKI{*vF3jhc%Q3ps3(2LJzI0y#k^IVb+-~++D z8<-+ud8S>1_Gh6>LPS&439--O7`2xIPcF&1SZw$?hiFfA5Ga625u`L+FIfPwi*2fy z=j0~P*E^pcv%+t+)I;eD1wpD$L1h-`3o@@bP5O)xDfC&HnoPPEp%fPk8Np>fU6O~? zJDZn!sv>W`H1kwV{*~QTbCub16`nJ7xulB8W%*21 z;n{}D)AjW;jTJMyOHa4%yk1jzd#L~6@s=O9IvzCVU+A4a(RFlrm;ZTN?X^8^D?Phz z_m;mr((+?X8~D-G)YYLw545~j2P!^3I=DJ8H{aK`+@1Wiqu`H@55FAfyghJqt*hqI z;k3v53hwo^-x}$?*tzdPPvf2b12?CKuTPKPnHhXIyzird<{uxceKo%C!PvoTlf4&5 zjxBWUpW9P6QJLPG61z9X)a!Ee#?u~Rfhas?4xqbjG%-YD15Vr($=M@|x=^XS!hbvi z!y{=5BmQ%&fItjLGi~e@BrU{^i8%^t=#D<5nST_7U)mA*m!jZU+V4`tqlA3}WDf@* zf=UoLCQC#+EW*GyEpVV5X%L_QOC#Z(F% zv;{*UBOf0{8q<>kfPlP!<^og$#)ZQU0R#xjs<;STK#vBi1ZZeqDReJuC5deNX%11F zeD?XUA!<=I#8T9dN(~eiaLmDKk(3p|5rG$^1`tH#1#1-^s_^MDKpmhTnYa#lgXRjU z4+*V`OMwOeLPdHGG|Y??a)?!Oy`Kg)5P<}NU=BKP9yAeT5s3gsNNSEUK)_Y09VH#m zoh6`opr4@dNeU<*(j{ZJsto#&6euhJ9n>NPA`!Y=sM%H_k0f)5U(SzP%84NzxQzK` ziCwiDt6Ewqt;L(7%q|&(7*jYd0}T}p78%Qr_h$V3Sn1!+*8S#u>#vsDetEV1U+y3M z;z{Rc4}0G}8vjOo>L%a47<>2P#J6uQzx!zM%a0bm0TFs`OrmiPZ+vEfe#^X~3X zpU#Qwa)e0tabg_7pFx(regjMq+)+c+_Tun>w4g1HZJXn^1{gPNQ9WgJlPOOLbOBW_ z6r;OLs2kyk{%vj8NaUxXfLuT=9YHp0^bSA}!Mw>r9ndub`UVwiB>e@(@0i%WKPH3&VmrPQ(ur)L>Ikc9@gou= zyI9B{EZL1xH40h8$TOWX;utJoGBPH;v|eJ{jt2`S6r z#qKO3xfoXah44|OL@@tU6LGtQcd&rUkql`oW7|&(0HdJmd=eGphb~N!3|ry8pa9&F z!U9qQMx=oS!~jJYlMWy;;}QW8&!x6n=+V2(!~~8-z$gAIS8Cdtzy(#u$N_MmV}XDI zXL37mBGb_H;Q)klN>616n-YDFgkMBmF*KKHpG&s;|TUFz&u(#E=8F7&+A%6~jEygD>`X|nfvZ^grX`Hv1CUhN;cIN5u8 z=+NyWrB7Nb)(;$8=pH)J-EpmV@A~25TZ4V~hL7DFY`<}|`i@rmc&O>cWcSmF;rk3Lzp}K@sU=;%6&4>LA=K*uUl<_;0dPb( zBI&7t{E6Zu)B#Q=*#HZWhS7dm9I(^p?)1n32jm4T@&dIaStw6LEWeniS$U)Kc6qM_ z7Vv{&A=GlpN71?o{y>0wLBIiT>vADwrBF-Gr6SuJ1*r5am)PO3e$t-#mm?MbaAxPP zF6{p0l|8?`-TB3X!=K&P-aQFdo=W0?Rv-G zUugM@*|MJw6kn;cLuqPW$pQ}A4IS=?qkbc;XHBM{;*hNw!Q0#cTg_XxMQ;lT+pzhA zxrC|_Rgy86iWgGd1ky*KHyV&BsJwvq4^zYf6yE0ruXm@y5lImdOYia^FQAzm6rijK zH9dkaD;5(Ck@%E`6YVu+o;z< zWhqi0W<=6ikSL}u!WDA`sD zU>3Xv3R)D(C@j!{zv7x2P6>KHIyP=|dD)s?0lGn6_9|I9ZTBUzWSl+Bj31 zH|l|9Y( zkG0)uPQAN#-@Sp^t39nZcc)%&F1y~{vD{aGuC?xdSJRD-{c8gQmwK9>XuY*>j_+SN z(!M@BxPENU*q4m7^mQ}g4!?RO6L+@6_SojSZaTKizU^6BuNkA{an9$k1jHvMX9;3p@J{^`l? zTa!Jvr;c9i**V)<)?eT|;Ep8kX2+mWhJ(#By94&%L}jV;mqi{Zj*DFCU$fXn0}661 zqvLT$mC_^PKYWq=4`n#$MBvL}XTam29kcHiCBknc%=5572C0M)Kb}ZXfTeZ}%r%qy z=mHd(s0=m$OGJLAqAl6N%Nk8$sBtVq3zY$#=mIX8j*iz5c{tr<80)h1KGZ0Zf=+uF z^KuVbaOe#s7a;hHtEJOKc0iR8>$~pB7_f~bM?5Gl=EmQs@L!=woIU~?%E~Crrv^vJ z6=7C%nSe_Y1jr)A7m*hz;TSle%Yd+YrPzVmN?t&HDT`a!Ro||o%GA#`n#HbPYD&Lz zw9~izVi%`fr%M^vAaFv&O6fq8@LnR}S;2v>L(>Q5lu0xs0`L-L@wdvEP^o&@BsCDB zp_5i#dHmGFoAtwFiB_U2p&U3r+uXw)WYf^piy~11ZMCj<9a8 z>4-b>fIS5NHcE1`gM*y73?UG2-ipy^Oi)nd)=hYj8a8hr__Mgth!%`V^(MKh7C;~^ z#@i$pPy`Vi5um_AHRf12q95(cdfl1<9LU<0@nSb~Ow%!$!g@k%DD=^mWCSmpeQ!{i zYhA#BYCVRpQ}d3=s4iv4QqxG6>R^0umz4pYAq|EdjpzlT!G)nA)Db}wm4pOVMg-Gz z02VYxg#ZK;5Y01I#;;*zWQaL_v=Lply9@+rZARR#a1qk48Xmq0KHHsKQoM+;Riur_nus{I>m)rtzwu(Y%6d`aqhW6pY0(b>|> znf%20lC<;nCCj@i7Rz%fB05>0bEYEu_MX-&ttICh)2=pDTpd2KptY_aOnKdy{%}wG zxkHDS4m7OS7Czgz|5jh?weHFvwl_a+X}hZp3|~Fo@wl_@Zb$B$y}2*D+AocrTsYqM zu&eA3x{L1|t~=M+d*V>n$^FIG_oqJ74y<D^pN!XjG}Q11$B+DB|JcVTdp}z2eKCLZ`JDD(^vLD* zhRNd0PPa{yy30fWmhEpI7JH%H@Qb0Uc34-X&e$k#GX`~%dOfIA`L8_6M zos$|5@`4U*4gdmTIlFI}TI@Fx<_Y%f14thL0!bote_PT^{hvmYzi|f7I_eCaNDM;` zn1*P~u*-0gbjsFjytt{%1SXb@(z2aun@EetkZd&B#%>2X6n2OuuB6BWE(1vc9miUt zqys7!00l%ch9*sl2Md5MK`+=z!~(|3QB!(3kDa_1ARs^z5DAdsL zCXpIQ3ZR(zd`3<#P^dbn95?a31CWwvCJ#B6;L-4!md;nq-!`7>C6{tFNY z98`Ir9oUA;(tVCNk2sHKk!S?vc7+8>FHnyNv&18k2!I7Z01KvwsvkX55Dfz?;8Gk8a1Cb2g%)P_o zT6;0}`2+3OSNHw;{NA4pl&m$oPL^4Z`olWh;Rpvb8er#>wIk5Jag${;oy7s+1aMfO z?OVYD1qX-%x-Nh;Ad8YASvouP0SHJ0P>RU~$O{xfL{h-wSo?TyCIzL65h5=jDS#`bT!Rsa;>v44gh=5*jr_6Sv*h)<)&W1oGbwu((itpy>$009fVK-H9j1u#fx#Z6H=Y7JUIBh$*PQagGuhMLr9bS@VA85ZSmEC^37 z+aq_-(oD%HR}aR89=3)u1@4H$fVqUi0_sRvU;%Rwj^cfdHBwv%dV$Id6h{OWz!T3U zQT1cEM@mpu>$4`s20;+)DH;XnNRAV;mAOeqnw!lqlpxf0u*~n7_L`^8oN!pddMBso> z&t6o5ww@ZO907|O_zH0=(z64=LU1T48vkUp05~FOCS>U=1$2rgo^?jx1A);b5I}nr zIRbLP1qQO{$)EPZSj|R+f+CW*`%sEXx_m z@GO+(o~tQ2Q&n`8yr8aZDAO~VpE^>I+LxQ$SD4XXmUpZyx2HIJx;%5SGJBykYa-9L z)R4Vgn|rmkc)ca>`hmP_&BeD59$xP19xKbb(o%N!Sm&AU!x#ISZ*}dxccf!Y>s{(O z@Ub>eNH4nCb@<-E(4~Q6>jUjS8)*7*XYFct`=#OI=erJGI*@v&d*_YLu`?ax%LA}O z$xjdEJlR`ydG7p;h3Pxv`#v77f7M>{x?|^q-tPO;(`&u;KV9tjFN+-?_qRShdf@rU zz{`cvR~LqVG<)#P*uK|8?LV39`O}l5f3z_9Wc2u2_hD@?BSG`Vu$At#?l|TQVFU&6 zKj~+hTKJ$nlqw!FI=(y>TLGquQPD3{Al)3OGu{X)kBO|58sp?dnjk4as_tNjnxBP1 zi4>pl&%xqArIG9&*c0G#g+Mjr&>|RH#-q=tn<;OdO^wD)nxsIcmwRX~vl9R57e*=W z^F{ajW6%Ob5pYFI=8Fxr*9tp?IzSOAw}S#;0dJ-!QRpBb065@R14pD(11=FA*t5V# zsdg0R7l;WTX1A)(3W|jAN9@xp@g-t|1>^!G1z-U{zj8QZbvXp zDkRe^KzJuLfR|uA8B6H};0lYpfCuH(lL#oi08m&hG6M%BIRtoc4j=&AIFN$U!uWGK zJGNY;38rDc#I0(b&yBuPU}jM)#Iu4cq#R7ZPZqv@GV|`)(7RV)!PqCyrvATI<4{Il zzMlE)#nh+IC%@9(On>!!@Hf}m|LMZMzg}qhNXuVpba(rL4mm@2$H@@Lw15EDhE3-0 zZH(TyEpA6B89~^F?-@4!Cz1jM2egk#?daw$5gRvw6jYFY7+V8Jq^Kc92ayPHpg1CK zS0b`TF7UE7i>e_|fYboh04bSESUkKbfC;WrK16~5YB1oEMH@0xr1>tcL!lKXT+U)d zteEstg4yrH6K)H$1zL<@)j@$RhDg9HKO_KeI_ii@cLY?11lEM^sNAuQNo6#diFS-? zj1WNQ1U5uCc4ODg%reZVWvkB;pX#7JQQJG576#VPq0FB;9WkU2{E2Bb9FQ!CM&K~9 zIOdXsqQ`5Jsi9UOOGkVOy;gp5#PxV)f#Ua0>75Wn&d3>J09^T$3!{7K5JEat-9jA9 zx+7VNH6mYNvD;^HfEEA&Lzy`hC4>YJMC1mn)-v5}@Zs-S#9-`(2-Q43RpV?J=@^rc zuMc`To#Q%R;D`U!*xPe9+k17ND+OL?ABL}Ruw3X;fJ9(1)j{nc z1QuC7ev=F7&dZrmm#KtLGxCkV|C~xPqUqzvOm`ir!Nq(pPj({5JDcsD%JH8l$(k$8 z8p=rTPtlS_bA1TJ3+2TZ8*AswGdlCqry8p%1Rc!Jo2x86TUUOeuH;&4?b({V6V=({ zWvO%3SySa{!$tnN%FNlK6t?=ShxVM!RDih{+ug0;HT^|r=qdv~w5 z6kTh{TH9N3rM-4(f7!jAsjJngw~w~3jrCscs=cG_!O4B+-GQ@DCVL)@G~Ms6dp$gJ zV`z4|bNAI_d*5^)d(hqfY@q+avG#k1a~~Z@de~jRJbZk3aOCx1+n)?IecV-g_dwI? z@zKk}Gb;lJo{U!hw5Q>xL;K!L4c?iYzcF*}{_M=-k=CD0m;dR+&OaP!eSK{Ik4KLG zXnOn)&(FL*+xPTrhxV}d==#A{K8Ay)fMc;cn2|uM30`g^)RrY%*aWb*ABo>S@5j*% z{$ARGfqZyCwFy|Hj*9`uUP%zZ1^UJ$5g@c@Sdo0m4)hAuXbP8Qui%MQX(#2&#A7gJ zCYihduZdKvAPTAj?c2#Fnh2Ou1sqJKJEk)er!w4QX>OeblFdQB?r$rPi~m_QlQ zS_O?}Nv!MD$*THjx!9pn{EbUaVsW7S zMG4ycl|Lz8JWj^mltDX?NNVB^2P`Hl!1^P2;E|_n@}QWIKp^;6${hOmVv&N8LsYyc z1Hf04nXYSaMEqJr`=q}>@396s&_T%@6mmeG@glebG}vXtW>SMifeE|v=7 zmvZAMG{UFoPrCDeFx!2nhkLU> z+LMLMPjM0Xf^bJLMf6g%=R9wulnCo?_k$WI+6^t<^cOJW@p(n2fghsmcs4bcFeE1uOss$oyLZUD*_k8`K?v9)saQ{hWDMWZmu zSx?k}RhubM>&cqM#E5C5nujfBCC;SB^&29l(qhIF6RfF9%2IyP$;xcR-?gHgsq|>Y zm^hY^Zp}AOr1mJQ=p zVg5#K*?MjKI;NE^Ei*M8>p2P6isG&`9h*7cK5?w_#L?nw)n!{%!;=jS=X$fAA60MX zn>LiPmW{5CTO*mfy^YVhyDql2TpR1UH*)Omv7+ss)~nN_vxC(ahjQ+BW#4S>IC0#1 zqI=-cSna3%={v`a*Olg#ZmU%pyfRe#bTsQ}N5;Lz;?teYr@NIKvPseYm>X{17B_od@ z5**1}NNoicoHR$V&ZlBh8YZR{h*Bb9&1r`N=2nT3@W26^Zh9sFf|D8QlgI~V1XS!h zwNfCEOp!kcj4P7^S^sM|EI2}bI?Y= zy*=>VpvMWpGXhr337%|3E#h0b^*M{0#X3VM3DpR6+~iG0VnT40f0aq z@IQ3u{rV4OMSJ%W|AUSkk?6o(Uf=Ikwrh+}>JuK-#<2+dD99uNA{P*brJ~kUVgaS6 z&+6jt7KQ@{vi0w3RtT9I9MRd7KscgBwL3HZm{8sv=v3?HOhZ|w)8QN!=X7`H#6$a2 zoDSxDx>9AzIGaM@R_clY1*t)WkK%-EVD}Vq#;3YblqiZfWiB1hn8H|@Zr*T0u8vxq=i561N2m{(J7f%Il?G4LTT zm{20U+0|PG0ZbX67{@NA$!a`F+Bp{v@5~y2O0mx!ki|mO3$ci`glGFske(#!NW=J+ zFU3cQ4%8pJMq%-#JvBBBm?yJ;M5seJhES5P2^=W!JfHy7Jt%-C%^sc;00NGhEgL21 zzyXjW^kRGW!E$WmdLpw4#Ap>fE5yP^ItG55q(wMike{q3M{lObtfuNVGK|Z~+S9p7 z%c%yMrRUIu&8ERvZD&*{3h;PB%yO<`-YU;HRha=J1RXS&sUOQrnaE3>$xU0xNnOoJ z+005lnQ1zcVH(SfUC8G#sfz_EoNSh4QfoR_oVt;nuv}5zpOZ0=qFK&Q+N!Fx7L{0v zlg?Gft`sCJRTOR>D?V49NI%ZSs?^!)!ZR(!H|vtFmFI2N4~&%8Z72=N*N-P%ZY;mu z)qQ=Y`@~qqt)V)&ovou)r`1 zy6-P^J{v08?MV5gE$_}i$Jx>8>jT3N#@k-bRBsRFY!B4FnVa01wcZ>XdbnhLwmS7{ zsqfvw@fQ;nFD&)DqusB^XOufj)4OYPua~B_C%R6wHn?H}c#iic5txi4U}o6o};qh$)mTs`%M1kP+~qA(em>f`SB4W(*-> zfQE3PQ{HC?Ka{XBdW?zoOfHs{qWFtiV#DEfcsE=TZDkrCSkS&GVO>0=3+BPVgc#n3 zTWJIp7aoksC9Uq%c)+7F@)#af38mJE)IfA7^I;dlcARP}ON$)7p`?awq%w9i@O(z3 z0D>Q}z+QS!cAzFB;Oh<$upoMc@5rR#s&u21%PN(@?&JB8XJn`=*%l>(#{9jMh{M+fH zzrN7&-R;5e?pc0!&+>-{(|_Ea_|wxl%1VFxWZ~PLrSH0SSH62X|C{@hzr8#7>ziHQ zTyFfY)~xFV{{5j;%g!L5srr{ ze93(9ueSRUm3SP+aj2TS0J131g9Tp%E|3Di|C0iUNymY1zy!ljLl^bRJfb; z1tz(n{F=qrU6_JlA|LHfQt(qyAX%^nY37#O>xgg}N{mDaTs2`AB>b!CCIb-=3rG#n z3%~*r4K7kmD)RzaVhSjTynqD+$h<(-1#uI@>lG7C%UB;UU{OsQG9J{dC5^`#%#m8U;x|C)(m6vm_G#`z3GbeK?Ep{!_gage;Ohlh9yx*W1 zH0p;EW39**~ZPBl#>PKv6{Mp z>T-Z)yRK@pvU{?mVZA#2PPK6>FMqSXakVS&LXY{Ha;*GnUDHxU@yVuwr$fz;I_mFs zG+ghhI8mQ|x~1TZ(r~M{XREXA{CMNee9^1^U zC&wR7_uiRpQFd+0)2ZgCqYba7kH1>!yE)TK5>u0r%IBzEP5r)0Z-mESsOuztC1I}2 zoM*fwX(gfnpAz^YVk$KOfC8I(nJ;jWo&KcW*Ah+1GJ`+`y(n@^dK&rYX))SHP@uqH zG%rs^E7+$C;)%OC3V(EC2-b680Rza`y^QKrFh!%WAxfyLY%XSg4PIOL7I&)|+v>;r z69uJU6$Pc#AqKjzeF6?zLWQixuYt!eH5FJjipL-pAd_o6s3~1ert`sHU;*w!Z1r)R zqh){vMuGSw`wK*oQ9zr+O~0CZr<_zwg~i~tw7i$G3j z=O|MH&f$RwvI_snOB_i7i1vhGc~L?G*8vDFaxYg1{$PQG04Xkj3xEP|mmp6@z#EkT zA1n|>pym*Ih=BvyLrfGW;ejvWSK@aQKBZ&?Bn+D-e_E00KogmR9YweZX7I<5FDi2Z zj=YfIo9x5RfCK7?>{j2wlpdW-^*^2A`>@*Z^+5hVFPG7J_J42Hesit~|I$C*wfz2$ z^-m9MV({5EQ_trAeP{7E&sKle^1j)x1~C^~hi@Kszzdf@GXkc>RS zLR7Z1Mq-KqsezCW2cT`za;PWsqWM;LNBJ|&cti{+6Ij4^(xULi(=vV`kQ`ey^TY&5gLq6KxjFOW1|A?_ zy=RI<$!G%QMnWtGDeOmD41ytp?Nukp${4qarvM@>U;@F7NX?oH3zQigFUCu2D; zZ^@jxoRzSVXI{_EK3$%3x-5StHEkw6VJa?aB33hEP>;lD24f<7brF3A?P#KLwJ^z& z7;8yXV#jDfHS4UYaZ@QVLnI+ZS+g1OHnVY~AaOGJolP821bs;``@sX1MjxR|FJ&C6Iie*DDI z>=WgQH(Oe6w#_WIR&R8f?=@uHFG{+jv=**67OYiQZ8lfk8&WQ}R$XXe=Wo7Rn|8gi z?0iejg{hJ2U8Rp2O>cTDZ}%x{ZC&U3T5b-MJ?|@c)>L(;srzQP^^|S)=6e6ma^+W+ z)W@AQcZOSTFIXovl;8 znmkG;^WBkVH0ICGZhUoah~?p#o6gUXEY{OPrfS|1%aKH_ONk5b(|^uGhy^@S6rh@EVGg`n9QC9z zkQ{&_*b!LLr$!xa7YYTvilM*nbU_IFs-Jpc<9e*0|scP}=+>w2~E`xmRB!GFdA!anhz>+j(}ZvMH>f*Jw~ zxQoRJ`2t6g7rbaNKCLzE)*Bz!=(lTP9@WJI1ovx&pbQp35Q&y#iim2&bTg6ysU2U> z4WZWzQ5`HkWuoKNe}P>_sB>4q;YR->Omb$5O{u?VF-vqlVsddzadl31b^s2Fe7s8h zys}}6Je?~2JZb_JZyL`aj97FZ!xu6C63U1PWh{gP9490wpa{bYG2oI;WB`KiCnF4+ zLVOr}2^Rd6BSJ6WCcdV$C-W=-f~m)-%>B_pl%Zl<%{P|*0<>e=2u3Nq7>)4c>qng+ zRe@sKioJY@FEkwp3^*hHgA}5;DAHRRU`pPXhw+^z;};t}=3_=O-9UvMHdr7F1ljZR zT#$n2au!l*I9*sHrr)CCNCInlPEBoi0f3PmUT+iME(yhmxX( zleLzNm{C*ofFW!&NxNQ@ajrDybW!F;v3Wk%WKE4(EJ#`@Ew&ctDVaKIinel#Hj2t8 zsxq!Lrd+QsUdqlJ%S$^^opQS*+iN#+-b_X z)(huTzI812e0B1r=9<-xrZc^5*BTq14|Uw_Y`xT?T<9IXFxq-{AnRIZ>XXi*r~LyL z2M10K_gUY-aheJ&dM#d>IdNe=# z8a8OT|J6d{?qtmyYv)_*i1K1~h8DGZ){z$rV_(=telg$s*YoY4&K$cn*}qU<+8nE{ z3-zw@Im8etN{q(BkJ$I-9_-vj?Y~ZVq@occ4ba*?79C*UYlz`9?7PVq7<5YMQGc*A zpEH6zdk{Wqe73|So@hTl7D7AbOzbT5>`z3mG50aEm>*-GR_WTS#!bb&J;Vi$2rLkZ ztz9o5FCY&`5gXKtnTO;8C~E?@q5^;eKJzFaEn#Bh2jv!Qlh~;BYrKYaya={>fxN{P zVT}>Ip`@@g@jI0of-xNtUZ?cI$`hg|B|ks|0g)7d z7m+U|?J39(I3dOZ0W88fVP0}XoG3C?;BE;A?EmGG0Ks*M0um#53`!-DpS(bVg5-<1 zDLJC|?~L~(QHou>oIiluG(fPP8n}@bbc(q)*=*!h7qXSmQ)z*0@<9PXcV%P34bi0n zLdYLD%5z?YP!ABW$d=w?0l^>C06V}7ek9N3DS*wzf~YUM)Bny=@Gpzym=yi`JiWI*eg_886c1(#Q zwUyA8T^b)eC`x_ZioD%Z4(yM2ITG)9IKj!mS~qx~idPB8I58+75QUq<(TlmJD_y-O>g%wDn@o#c%}qU9 znt8c0{Z2#1dST*PUfOa_{6bFbbXxpqqIM`gSkZ=B4C>*iU@|0Yyw(z@8PbIg$AnKL zYP8%!`-(vs;Hn@HBoq#GxaV#X4U)9J|*$#Iy`S(3Gb#=wcx zh?8Y0XNr?g79^gjOkXQ8E#$_Wtj<|0O&~Qmm!G~>mTk$?&F95l&d&_^_j{# z425pA=fCVJe|)^`_CU|&>4~NBo^vBdA%9-fr$4C6yVzKEtFPtm#PRFXRgXu?-t^VI zYHhsQ)qHlm=h32d*V_2mc)`2A+}A^`J67w}8Oznx@fVBruV%`=n6CI@F2 zqNA46OLY213H}~L01hzzB(Y?kHkK!(o_sh24HMx`UclCyBS1hF0O!ajM$nT)VuOk+ ztg%SNi~oTNQa5kUuu9~O;L?8lD;Bj7nl^?`KOBNlXp3zKRlqPO8~ z9PUNy4RFAbZ4Zmtx$O~t49g|0W?#gEhYY@8!BVEd!nn(a_ zi`mB8yNQ3G?b-2hgB;>_g0h1)Ou8?0|D1 z*sTk)Co5bouwcs^vYD>hFb8jm0c9cQGJ`JWC}3ca!~*J}zyhfVlSpt;@#Eb(k*@={*HM2Z0v zSj^VVrfVtl98Cxvj13-7Vv?%L8XIAai=2oFpE5?wr|2n89E?_t#)J);3>{kiXtI(v zV2U0}*7wI72NL22le9yr#xZkzPn^0XDu81@ppqCno0Dlvk6+D9BK@GzpgTI)nq-(Y z8OCBGr;Afo^3yg;b7w0vPaiM8R#kDKtaze0Z8lqTB}aEHD}E_Ib*Vn{YIEkj<3-dI zojBgKR$qUrruss4$&IG`$I4*&{r>V36&bgx3eUH+&NbJZ?kc|8RC0wrw3fy*&8C}U zHIV#&-B+@EH2Zd2{YgccIDUMguj}z_!@H@*Pg<+)H&ov0Yr8Vtdt+AFS?+(^5&NJe z=UTUNb#(6j!Xjb*?o`d&_2bV56SoJ7A6bU)PAu%KY&~3@dAu<6z}l|7m@Iuacl6z2 z&qJ$n$WH&e5ONOpj8DHkQcxa z@d$(i`qr>g> zw%8(Qqx_=K+WUyv`x0f@`+@~B_QAEYAlfKkSoPou5->4h&=xp3&;_8i+~gFPr`xN zq?>WE))LOy;4^?h5JXvFr}HAt7HH1oM_$ThkFOF~K%+5XoZbk40AZYsJ>Wra1P}l& zNH{=8pxcdh0~RN;hXJb#XeN4Y`7?+gFO+54uOm-pMr@hYH#5~cRWV<5CH?Jm_OG@o ze{=Epw^zFUcx&w2`_sR@KTFfucRLGzd^+>{t_MTEz0v;7<)hy$75sg#@o~2ISnz?g z!~1+b5M)ls5$QXJ2kBm^3&@&M(P+HqW3m8gL&OPfXaR>D{0|;x+yB!=b|5(-o=z?R zQjiX?B*moq-cfl1`D53PIquXNpP~!Y#c{&hXFaJjJSx|*>^2kzZps#eTX|t(@J*qH z@&d46GtO%>MYU`S9FAZLJvE^&rM@mm1G(NF39im@&W?%BPS8ZDuFffrhY^%%Ju43K zF7)%r^-^4N+#PT=E%9;YIT)BSz@g0RaIu?1wYO)Dk5{>uE9k($ng$;S(M=Fa#i}SV zLQ}xtlo2+NqSfyEYdz^oc4B@LL=X?-9I*_mqV8}%DyutG?p-0C6cmX~TPUoqm}@pd zpH77L5OqWh5oepmcNAWT1>;N3z)eXOjl=}=&B38=LhVD$rlN-gh`IJ+1|(IZQT{9X z(Dhg~v&`0FgSZIMMDU0FVfYEt(Rm6@&NFla*eg+KKtn`0nW1OufoMicR4a>S^<=Cs zwcbbr_}@{xIHq@-Ob`~z3!1PMwT3bwtMPy>E%0th@(xzLxv7`T372zIH&cvDCjE)r z)P;-$bYTnT5b>H`eQ1w1xL+GGtPdYIY9NTjX2@#8_ z`mHP_;Y?1_>1@-cIS$o%Ax#f7pdAb(XuFIN7L#E-Ii`m$vqb$`YWzlN=5#^QR0hIx z^jKo#Y?@&$Ghrn&2HT3c;xt>1?rK%`+49o05`0ag&y*G}l@|=AC#)2hFVz&Bt;@dN zPP;+DYN`HGQ}Mahs)gFrlXVG?l=gyqt#!*)71MP!=bO@YI+E`mi@DfXbgp-3tH1lq zP{)nVf`_AZ7rMI^k2akj=)OHV^upHnWTN77PvLc?>Hg68&7sj-lfAn%myHxZZ%u#D zH+8wS=lXzhced@}YTeFa`ICW?=k4`(CZ_L9%-)?G+gTdfUG9Ff*zk*my03;Rl-EnM z&lV={&GtWD8QfXxeRo3nWU=w>Y~9Xi)7`#f&#Z%=t}i}cn0aCy*{Cn932`ZnaHt7& zVgoXu4x&zzj1xGR(0LKRA@b=48$xz61Q2T}H^r$OL4iU9xiA?TVV;b=K!JS*d8WVu zKmv{lk%|`@=SX#s7-1}x0$+WbRb$wT%fEJxDgx?5nez5q5xTdz1n9ZIY8{h^E8BU z7#=D&d1nG?xsVUyY0a|bkh{bqO_Kzg4d!W8p}L*B!L3CYSHf^b& z+mOH&i2@v-*Tu8Ig6*7z~L)EM$Dpif+NxZN3fth zL{t+|L8Pet`{0Pwz5|Ro)~h=GoO+mO1H}puMEZaQK78xgrU~*t3WV^+$r>yW(z2b| zgOe21(9dYyXLN4XNc~1prL8D!%ILQk8MLO? zttT26^g7-(VSq?Jn*!S(J)L2k$%>!IFpekb1RNM6nI+#B6+9jnHI=9X4#0wuxJdib zK=usAY7h}RG%8VGs8fxb6b=2tIHOyVqUO?LY}B5n#Z6@slQyFaI&m=v90t>b?&u_ ztP96WXUntJ3Ucq%S3_wn7dBivR`#GS;SOK^vYc~DZ|B*r+S5hRuiLWk_bF$_t+PEt zYh88s2lIA1avn9NUmNIuG;O^*(RHz>{m$sXw&nP%nZDie?n}M%H?3p0XY1|`XMQqN z{JN{^YE#*bk=9FdV;3w^?cLk6OC`jT3-!!?JTU_vy8v6S-w~s`}z9N=c~Oh z=eo|f6(5W8u3}DkfMc7=y*t3M%j=_FzrPv@{fK`W>ODyrln4(*T6P%NTFqz!`Gm3I zz!`T0cE`T+;D`V%6s9O@h!pYZV-Lc|5Y~x>m?fU0^B>e9`+D*3O{Ty|*6s*z{1uUm z2Xui9n{lL6qf^By+#Y6XOCd`Yy=>Y#CY%8+J8@0EJVmabd8Ydgi2;IDp+{1Ge z6+L#%SCnmLgm6V#T3pNsVG;a61aLvpMB<#Vofid~NFV?OWNN@H0)80*1VUd%8PTX>eRJvfH(h7y zf3;TeWq0hGs_->~bA$K(sQr6AKG@5&GB4&7fAE*=>WSWRGcPy%5*L5~2?rc;rI5=P zf@t4fjI3F*%9QqG?}Pii4+(o}v3}GMen1d7qL++7o8$$sT%-eF!OMok z7xf9Cz{66l%nK+hf+NBY1igTN4*ns)0?Zh}0xIbEDDrhJ@^;B{J5=Q5SjX5hk_u0UB6ml6(kgsC%YB5V zi~>O^k?1cAaN*VIM8MC81&KuDCp94W)0+&B1Y`gT$NU`8j**ocypB*xN9%DrgFI9e z-H8Eb(!3g13gDn$3HM}PY+snWQ1c>v#FsGK6GV8A1sKOe_Y${>-d1e@Uv3NnCSs{3 z^`Rn&i%i5B4fAA+N97=X1F*d)1^AX(!d+;;!{gZOh$*|u{0H_?uqtijl_q|W*R4< z`HkwKgvjAUO{XT1o&Qj5#DF1u*q{arIQB#YN-XHpg>Y}5A*@fYW{*D3Ht~qD1RZ42e0~~2^>l9Xa7N^;*3^-L?aJDk%WL4&RL*Yh8 z{W_x&OOlsMibe{mXUi+DDo3+!SDQ}d#NX)XK2PoFK;=~>`(B&r;qjDf^rSWSol+AWRSGM8Twuwu_ilw@!A~vFk2}@xN z3R8(G8KG_iA#PBQ1bO<}DfWTmApso@^8o@xm{)sttDHGvF98;av8z#N3RE#DUUn_n zPd<(#>8Uu^`3)Naah4GM1-f8*p`kkaL#UT_;gie<7_TiP17L!2mVMel@&ec)b~ls~ zfg0o|9T6UA$M#|jpXRUts3eL`2O>SlplP~fgaLz5g`1%gFQhA`be>C(xL}STMiQT) zaoDG`VYjpR!YqP?M!^1EZs7^$g2hh@IhPtt3?&*8PlGbf>Nx?QcoE(uFAECr4#*C~FCg0uzyj{(r}8s+ zb*_>*@E`#gG$&wPlp&VH0&szIjyw_uN$3dJ^4Tks07LPUGDArXIBui{+7XD%BJf^W z_%8;{zuKt()yZSuoIU={_5@|6f4<)H=ZnqXY?l9P*J9p(A5Z_RN_8$NpwWMC?BSpJ zfACj+9~@NebF%Y7A3*E_0TK&{NO+M+6Y?X`t5(EWlEWIUAHJK5&#jOQyj{!vyej;?=|iC0RLrsr_Cz&kq>n7z7a;&O z0h&mB$mviEbffPKnHav5Pdkg7-Rc0u1r~V$;ux5g;KKrSXh( zrbi=2P{y8OF)mzy1&s#wDpLxIzycOm6eilwMffl4LYAU~SqsssX^sC{LgYe*@fSl$ z|D;6TGr3!}?)^zY6L?r8s6=Z~R3N|8WL(6AQQa4g^@m?Cf(i0qL_k+$ARN)4E^J62 z&T$|*lu@@-0QE)(lQNJOkQ9uY48sZ01BvS4#E2QQ5<8z2M^b<~i~+?=Zv0517S#aj zbRONVQ;~9zZ*bf)Y0sp_tS9N$&7#WmbVkaFjMTX_)3Q0%nv-bDNjQ~j+$u?%#pc?a zFrBCxH78k$QgMJgUzxv=pLU`y_gsC>)qUM|l)cf9>XcPrIIH;xzGQ|j&y_1_sCx^J1fKVf-fZQCC2+MURM zIoh<-H+Z#s;QG|i_Hr*M@X2WPtG?o$u9laU#RoGpS7&-2t@pjM9p4?ydEH;K)7@|f z9bu^N{_@bXjnQYbZFC$c?h`>F;5}Fn}wHxdg|b zgi?Fx3_p<-zMdQe^NteDf;vBCj--F#EK`!r;Z&9)9N7C8Pi@AYM8uY&y&iR++ns3iEe{;R(4>!91c&X_RXKH@6 zkn@kqVA3xeq8^!?(KVBuKJ?rFGw(eg2k&zVKIBa3_B$wyMt?{I-n&oRp+U+A+yySk zATMNY1KQBQfJOBmMWLRBt2aLIxqb(^0+7K)`hM|n8zQpi;WB6dIZX`EeNzo0Nv@7Q5lbLa|8R?`63weInHQ_~D(XHC9#fnzTv7>8!NAC_6JZ(wcX|CPwX}*o)^t|P&t>^x1&313$qbB|H zq4E3U6Sr)W*JnE(PSt!eS^2WRY`3@i!tnUb>5&~Gx|N-N&DXQlyM1-HTRLxyjNZ5P zT^_5uJ6`wodh0J2n%<7Iz8xA>9?n}HFHho3@pNnQ>Du7y)&6(3?l0%N-dL5-md0Pr zk3C-;-=68)Ug)|tS#{e=VN>JoOz+!O%e~3&sj93hO#puE6&`NLyuvP&0-rE1W@|u9 z4r)|vM(k3p8<_$O5-9`u0w)xQQYgf6ELstDsA$P@!8DN+&_~>_^%>CncZ5T{y3#L9 zYJj;S+ZfJqUk47r8%Fi*yX%z+h^c=ld?SW~t`jP}E; z8zq{(3}S)kkfNsaY?}H^s`^4|*tM*v%NgPD|3U&_JQ=Z>Heb1Cw>Jb6T#2$$J7xep zP0FMa7w86No@6Fuf5f@M=&f|Zp9BKU=}Zmj2ThZwGNQOhnT~LFGuy{yW@>H}8Lt(@ z2<`YzX)M_RTY5qALGZ)|!0&}aHYDG$GD z^0Ef(!K6X8_h()of8hJ^{=of57*fEV-yeqO$H@Oa_)EQjsQ&-AUru zIROM{$K^gQwLaJtx$@P@^L9mDE)R6CQ(;@@Qspm3V^Vrbnm|SX5FAr60>K6CKy)J0 zbf)qUrKk9mhKa%nN>2qAMEC;-kVt$-Fzlu70zp~k2t9IhMJpy*cdyDmEXvLi4TgEJ zS%bZmA~Nxu5>xhZBWQpamGRxh{~GpI2^~`IvI5Ar3UmGe?jk@>8Ko`49vV zt;f^~Noq*Of6ggMlAxgAb;)xmKf;8@VpOpWv?gh`yXrn)s=k`#zZAUpsQbah10E$l zAw3$rG>-JfghC4S=z=>UeOY|1Q51!!s0$m7jf5BK)u=>j018kw8W}KT02jj0j{9_> zT~R?@nqX1`OG>OQUS~5IrtvAI(iGn_VNsEwV~Rmrbl{vhe$b@pHAPM)>u0kQdJ=_u zktH>HG*vrmj-5kXPS(#9CeP+4fhdb<(d$`Bqz1smlrj8dR?1RI`b1vrX|v%%Stgwi z^MxtPg{G5bskAWn7pI;pO}kQ?xm8m%SypE|)^tx9sDIvB{IE3j=JBd)-CgGgTh8~_ zUGK=edmR7jV~=|K?+*??80>m9*t|VZeYZFF@pwBEFqwC7ezg0Rwe`iq@lR%selpy& z-Pw4(_2{;x=kAj7VEXu{^G%&d=nlf5r(Bai1sp4tX6t=O4vdAZQFGt)t#(d}{N z;gn_DGV*+W>gD>}y_Jd0p%$euqc}9Mo;|n^W4eVQB2t3feY6I<68YN$9YF+wKR^H| zbgG;w4h1{Vnunqkds~^BS@uH1;>gZI2**q=)B9sRjX;1X02kC5ks+9gz|{NIguu0Uzf~pH z2hVCUgiB^z-?StJWCSv}5^FDIhTJR^#zBN?!Qu#-h)N$}AT5Mu+S4*3gk@)LH0=p2 zijg+c!|?7rg{Nm4eO;QZ3=Lx+&gSSbvZF=^q>xy^6R+kQuH@+jNA!baKy?vyp?RW^ zM=(Vhq0&cAR+b`E%bHRI011M&y55y1%A=h~1LfCWef+>}^A3LvI> z+O=w_QUF@u8RtBg(FUio)F-KqDu}vX8ohfo?r%p6{%yAMU)F2?d7>GVM$wn86$;J<&L|31+O=6-O$(+7Xa&Hqm!TCrDfR^Ns#Yh5d zNX1A3T!!ocU#1K^OiIS^NbeUwz|>2Y+kt%wK^{0D>~oX}0_Vhk!oIYpklc~H2tZ(A z3KrZdq#s;(!}1SAT`~(Jcj{gUqgYLoGUvHsQhhM-(BWuj2ffP?gYyw8ODQEXdmlM_m!sMI;5}0%Qk2#R5QqP)`yLA54)qrj>Mr!tz=*ILZk7fpKLarNH-=mi47Z%4`;U3KujRj zohZfJi)@Za*c%-(5UZxFhm zPsB&{7{j`vgSrgCG@7yh$G(#jMIVf&JRTRloMhZgiC<4OuAAdXV;B&P$;Dhj%GuJ4 z+hrM6vtG$gWVG4&QWL&*!@1Eb<%y>Yl4djF=Bsnh94)?_mHfD*_)1mfR%0~|6St11 zGLgW1udU*GPsdzq)yaYS>%;jp5xi|Ie^Os@qq}Fz(tCfhW@n<{^-vvw{XtX3i>dy5 zwyuk_!xtt>w=ETKN9x}6x4jr2yE!;`UOBom+xgX0&1Ylfpu_#{zN@{H_hzOaFZRA# zYx$+6=Bx42&n+FVre^NXOx#@ zcUSs$n7B6G^mL~6;dskKOW(b*v3nD9FXxAzO?AJS@A+i0_xW7+tL4G%>7KR5(uU~J ze6J%VUV_miHWQU`x9f@$+5rRVK>=*x=pG|AV0w-vM%5nT0vz;5D)yQ6)Q)O=$C%y2laej z3`3UQ`t%LDL*87>vviK~ZH2EPy5=v_t%#&!P(U2PHyi$LmS{5*Uc> z;%8@&kT5<$3vx)k0GbF0ATQv={`?=j>3F=T!?jBkFkFIA!g1AZv<*O<&DEUD7VB~` z6QQ-l)BmF<>z_vQ|C_DiZ~D{UR;XX*g`79~98=u(#~s=ibodC78QC|4abx>G@};Kq z(0&o{p>*sepd3=&rv1_WC!;Bzu=4RmuXp?Kp#m^xLu@S#@yW!-485WmU<&GV8zHdry!cF zkXYWy+yLro#@gzU~H37p>!=sDmHJ9X@Dwb0%NNb92q|bV_r=q)0hj?B`Y) zB)A}GBJ_efZ;whJPp}}z*F7)5tz6{>7Bu)fl+jHP>`SjQB}TL%U|vKU8j&AFkPrYI z@C^h75#*Cq(2GM3p45v8^YXM9JfPnGHfJv=t0arR>FoySF0e=i(Hed*zj=^6> zBn6Bb00Lxh0!abqpa5`yl&nlesF06Q6zEtcM_AT6UrzM>KU=f^)Tq6eK($F=zOPG; z>&Ils9O`* z6&EI2kBt!nCQXAOyvL+tegXZ+)ReBI>o*D##>{H!i&j$fOPTSr`N=dhqYJN>CR_57 zrn3|0vy!2S#6SLS(&!3)D&K9t9vxi_;$SE zVO#!%>Y~d%9jC@d7rNWe_Z2_x&wkRF^Q5DlSp(;Wd)7J;jys=Q%3lwpeLXU_J7~Sy zH+Z(c@zMOT*GskAqj`_VioYK0e$w4{du;lub>h~X@@lE&?L^s|-puEdliTA{_pO$D zQ(e2$&7aNHe=?r`sijDHGd1yaa_q_69MDC zQ}<`bZd-dEE%m?H8hUYJ^v+EC!-cMwt3$gp{hzMRe{uHoqm|W@eQmADF(r)e4sbah z?8X>@UcGmx#s$fjVH(tacBtq|aD}rcgd+%x&!aAIM5hP=i|qyi7R5q*9_d@?QM=RU z%uB!#@i@30Bx6x2%Ec&OSfdV|UmMd3m?_INK|1lh53{J9AP)fuSoJ>p+k(9*qJTa{ zLB@EdG*Lni|1<3(~vlE%Zc7YwO*w^MqG7aEHvG#673`eA7 z*5z#B2}DvrKm-VwR!KZRjR8@i*xM7;33-&%pGge|2+rr}!2&F`us;P3)>Fbyq(?2r z2f!DtB?S|kPo*=siRqaL&=JD3nmQt~1EMK;!Q}$MvNODZE5HG{05Uc|n{yt?IpvF@ z?ZNIrglYf~hy;eRqUwIxPTBJpUO)TTb+4z(zK_9z zAUOOzf8n|RgMb5j-TvwWH&`7z7H|Xw-g7Y}k z#KZC^#+=~jHkc9uB%po&}dLhmsFbmgseF&YV6LCS) z2_bZT((1!qs0=s-%qFPqVnHCU#V`{Vp4CVU9NBdVvWS^idSA}%ZrJ_^2Vj9PHH`_T zP8Hu`W!m6`b={&?I9byOwxExg4|hM67rl=6gEpwu-|cvSXNNklL+#hC#y`LhV;r`G zgG{@M3tuxC*5Y-8YJUg-zU2@G-TH_=y{b7nVmvNvIyr{Sq)!uss7_oT&<2wW2+<*4 zgHkY=Y=Bd;#3&Kd@fsS^ki_TGv{T6uG?9&_&}9%sUNMs#GnZmzC8ld7 zsb?!Pm&>x}s**3aWZ!7OFC%fjGG|TcuDYTWKWH+2+J5Y2Q~jB)j`M?U4@N5({JLA8 z^0=gAt^Vls!GZge9S=tHb_Y|p+q2Hq6s}a1-x%zD>NoEW}4)odw>tBr6k@uw!@Ad{LdMao^>0D{=wm zeXH;$6$ZS_c;Xy!g6ar)f+$AX%W4i_bgXl=C(Zju8kuy-bJdK0_2%7>J3te$uc2e+ zf|98fgKRRP?X3*_lopHJpv{1n*~n* zal~;m(dV>TD_j*#D#AX|o?4~lIRC|1U$6k5Efnj`RLCOuCH1-~mn>)f?-UsjHZG-yFn;|~n(BP2 zzsw6nMqoEl;yn?hFPJsLeHDi~(H0hf&`Gfr7s*Me9zB_&1lzL!LG=*B;eRe<3&SJ9 z|Ddhoz?w=K6LXM5uH=VbD~!0DCt3`I$SpklB5xMQUCcw_z^IQpDLgBve^oJD9hB$C;$Ji-Kw^;&u>Y54bi$9W+QhueN42r|a6hhL>amWg zmrttVF)782h=Nl7)Ua^;ZDm&=w)sRr>WJEdT)+ZqO2L9OH>U(gr&vb^!;!;rE=~#V zPD!p#8Llo_?k?O57L@oao@M@CXvZ`m<5h=Vz_y=8Gy0BeQ3`@Qa43>kQ0#t)+M!w@ zD7aL6IniiV;^SEC?^NgEQ19i)2i`6gd!rigVhMOuFfIG}VX^`In# z`VW>oC%31d6jyuXW%6OMq|ZAAPWyg1$RXS4#WzH824@}QLX95u{8Zis-mN&v_Cnr zKOuA?P1_Ug+l&K~$*`Ib3tDt1L?|&~(@6$Ep)Xmtm>jzXm6WcTNsCxFMJ=16$J2HF zanVEZx~Z(>5#e7H$)uc~xX2nN%%`hoGufgUFQ+FiWo9hY6rXL(yIw+RLg}rl>Jyb! ztH+A2v}Hb2j;7zMF1}vhW*cbOXe!=m%l)F$^r|WS&hf^RZ5^wFjTeX8cE&4Tb(wdL zmOO0hxYFHyva9p_!1!HT8*Nd>;Gh_Ha4ZLys0WZrWztt!WMl|#GgPZ05Kn=0j%tZJB^R!YTPRmh% zQlenb!?QT&A}&-ghC)pX5lx!VMEoE!;#Rc>N(3KXa#P0Uol;VSRw@fEnNvmpzLul8 zQxJW>NcW&1`XR$iN@D>6Ab^Xv(UGa#%nZLJSr&p;A+3dk7Y6r9}$EUXy?W zw&Zq$cd)<@rifNe1_CmjY0bnagfKbERe?OB-bl>CvCl%dQ53`LlAizsRDO~RfCW%J zm$R@Tf*=aMRTOtUH~MNebxsD+~{zK=30L5VXZQu#b2S)k7jcQoy|c0arNwFIYhQXZh^gBTpzI;xQ~a@67$< zy;3QbFAGxykHl;Ge}71M)?nPJi@~Q9y#P4Cj1Kc^QUm6aGV;=n1%~aa=m%vQ9O|~q z4R{mbL2)xrEwO;E>mTZf=)cnX^oO{$2H+myKpjzN^;c2q7*4;BCxefmi1oH{iT z>>p7FP@;J*tk{4qWHLcJl^D&dv1XDDR1Zxj>1}2u-j*G2P1Db%>le&1ld)lIhG?5P zemo-v(;{oE#zMf)GWMoKQEs}B89SG(nNG&cBFbtA9gR|6j_s+|&t}@cn5zG5uH^Mh^F2%d_0ef+O+P&`^z)UWw{z9F z4ZR*8dpWzhv$VRiVSTaO`g*2J`Ne9>yV>R!*6x=!VMFxHHo9x;f4wXUhh8pqzL;u! zV`+IiHSm1aLKbjqdGzJFZFgbp1tP?H&&!Rz=bK}XS7&a_PrY89`uwEr-Inde%G7F8 zRY|B{n%j}w0P3Ivv07{l_QoX(<{rxPsNcc1U?)DLd|;b`6bOGl#%%9hkrR-aMFPt< zKG2n6Od__ceMCi2kSm37#{(Qu4Y+RK-gxn0CeM|@pAR_;#g3=&x#2NzM0h#!Ge|{_ z^5Ivxf)V1yBfQ3p!8l{{*#rwV@F}%7V2MGGBn9XKXvb{(w@YIlmgpXr(p?nGP1gNl z14rQCR$dfGA{}tRk#Gxl#A16$3}*h`B0fhZl}rJc9c_#CT`>A#&P0d3eJm^qf^cMK zfd~Q%&>m1MpmFf9yH!GUk)9p8!~&5QWQm3*mKbvk)o;dwNFdft{4$Vj(?i4?%8R1h z9W1b;1`{pCyn0MA?5`6I$pseBH;icnfs0PLih~n3!6bYt@fKS*5BR~gG;5`Iz4v9qkzf&BIo=wsMnF77e zxXsNZIA)Jte}__s4|E^?Zvh|vC86583xQzY{(!wqBKWb7z@8V#pbeix{C}Spa6(1^ zG@utqEa18JwU>qh?~gwMT{u!fDzQM+3w?xSj8d>qD8+Vs;i6CzWEm2k)no*cBSJVp zAeLD0v@QWZBCJYx8bs?E*D)!D9b(BwGydTGwS_vLuA;dBpHk+kV8o2<$_I_I&^$MX zEV2N~ha8=BhYn~D?gtCvTq!O+l;U_K$J4FI-%AtCEChr0zDf-{Hy#u z0R?1Yj^xWOfm!60KK!I}-aB4G#DZrt=LwLiez3feA9-OfAhxrlaVfvtfNQN9T zeVi49I{?uhEFf{99SHf21&&a0#7&A$IhTXYWiB9bL0&nLs-XuNz(gsapwvFY1e5z< zg(P7*++#6DizLh5>qdSUlXk_}lqf$+ML5dxQSoNgzOY6X8YV(Ldv!qw#}qCON2=h) zj)i++Iz+*1Z*0_HY-pn<4Dt(Oika9@$OhVzW%&=5L<6Fk42NzNgA*5044YYsX*M>} z7O!2)h^J#=Iw`u3E{d#}XDKIr!{$e2#*2mKvqz6^bu^z+>aTZK->uIi3OzVhe1D+x{P4)x z(NRi!UNGQTDf(=n@@Yr?{r>(-BV)Jc2A|DTeZ5fe)lBo3GZU{Z^osR9vJLMn+MX|s zzOl8vo2hzhseUoOL>uwbt%?c=dF(6kJiw>5Hpq*9$~u4Gz#WSq%pssZ zkB2JWFn|PnNIy zx|*-(>_1QVEwPO!FStUCvv|xP9=Gqq!2j~Ud%@!DKj6`|cc15;k9-K@ z*vHwcJqgsD2$2_mX*))UEWjSR;fAB-Q@yC03F0VsgfPCQk z@yAjokQo8m0m%g~BIcR_1kgk*nHMnQST0cDaa}x9&xCfss=~QC>V9b?!wcYuFe!b{ z5y`w@R^!Q*7ei?FGIRhiu*U4_lz8NDs=Egqk?!z8qq8G=L5jNz91&Q+q#Mz9?5a5A zxE`U7D9h;py~cP@R0nuf_`1_;Mwc07MZiIk$Dsl@QDr15PW_l}=27qCUhU-qj|5(n zxE|!^9Sig%WvFm>;5&9a*asd-$O_ECv3H_@1$7<=#bzm#?~d40v3(L>3KDQd?JY{K zA&e-kKsAo?;{-TBj}>wPjiD&95u!qzaR$~n&;fComNYTF5TjyPF)B-Oml4y>spX+) zTMV!jlT0|iU;i&(Z}}YOwXS{s4?{aUF^QQOT52&fGg)9+mSvPd(ql187Be$5TaqQ2 z?U>@&u^q>OolR$-I%jICWz%4qomRWmlAY&S*ShZuZeGN90C9j~ zh?0TpAEKE*C7x31@ljOSYd88hcL#VZhFQ)7CW z8*lRKihbyL-Bxf|Yj6|#qaK7njeJjZ6T9AX7e-q|gL_!8*m;>Cqd>|NndqS+I zqFnLM)nPOU_fn;1`_?5ywMRH3m2L5`rDULR7>MqWD(@nX9=O zLpd2u*DjAr=k}{JpH`$ly>;$!nRHlFy;4y;aV>YXA^)KJ`m5f8C&hV>3iIz)-a6>P zk1Xvpv^{L;c-3CJ3ZT1VHCx?P4|?lfv|oSSkn&Aq_S2@uC%v1}*VCi- z`WhZ|-ukA$=w1J%Q8ro6DXxNKe~Z4%^!f zI(r{<_22L6d@ykP=|IWTwo6Z&Djw7of8ARBu&Mk>d+kpPqle8ES3K+zEHq+G)nm+b zQZUU}n`fCBo-@ z0g9vFuprur(FVvTzygW_E_?QTQu^5cMF1b_3pX>8nHc*Z-zKOmV9+F)PL`FQBD4aN zLxQ^u1bnU#>HIe7%n4^1i~U@1#Ia(cjf@4<1xpOXOmJFDb*Fsb*8&CD{8?<wY#Ym`&M6ewVAE1ofp}9n7J{o1wEIQN#H?Uwr6-l>5B4jKx z97HB7y&xcCE>WbN0*SKH7Q_-&N324oD~983rxP6)X{^(CLV_P)OCn*8?pNO0TJ{|6 zzxaxTQ8Nt&5Uex@}!If zGQ{xteBf`NbMh3_vqXc4(%@gQ0Qy*L{<(fkKt@lt#VF(~-<=GvjWnXF?J*t8fz=|3 z2o^rV7JmVy!EI-H*Cw}Y^{-m!XF&z)YDVa45kM58Z$LJkmzD;Lx**b2m=46eGi^1z zW-;i95)5_X^fh91PQe#2>WnFvkPXlWL|WrGIAdds#0VgWH_}M6(4%lbQ+kFs7-{q7 zEOM=_n3So@AcN~l8xTPh4!p-48LCJ(r7nOkz+#hUs>waYjlfxpg>hFtbV;10A-d_Tuz=!WKa1D2e<?*t{a_m@$qB=u8TY_9`{UwDc6+CTgg5BF=gPOv;r$YUP;)0qYJ?jFUX_fJ& z+fklUup{Bz%|T4WLEq?rD~)>Lc7#VqgvWexWLv0zsXwm-4#oQqFcv4;?^;+ud${Ld zQoum0Z&RR0Wn@TYdQ4YF7|ErBagiPIkwjZCTXQWZW?4#)7)puiI+NabCS&Y!*y<&p zrPPq6^vsF8GtHNhT1(GQ7iK(ezI>l4X6F*O3(hT<YDD|?%io>TW`;M)?fIjIpgyzzd23 z$(rez9C<|kIvHAE!KegTAW|O`xXe})J;df3?~G<}{r2B_Z+P zOJIWb0OJkW3D|d6Qbpn%p%W0ls7CvOY~cvH8OrTtPF5>72utrc)Fk`t<*FnE?kB2sE%*)3J6-iB7bG*!iI`1a}O#jg~Xc zkyoe-&<^oC0R(K!G8Vvs@Fl&U`2=*TcH+xuS8Np^&P<#{Vug}9JaoK31ll_?UqFwD z(e|r}UXaL?3G|4lSfHX=0-sa~b(8?&^(3UY!rsP`tC96|bWv^tv38RQ3c6ae#H|L} z6GA}aEqT&en%o9S7q*{E!Z{Q-&#{ml-UI~71IY`jQ zd4cqTV2v4J!{hEbZ{UDQmj~xUSa;9*@1B8Kc7`>O`2wzh@i433bwmX0likKxfC4*H zO5oFG#xVv4;Q)b_HbyhJV@d-bT@AS7a9y1cO|?+1Q)JU6nn-%5EsQhx1{HUV?-;%f zL29x{E;T?$D#JmZlU0_|@{F^^8GBRqe=#7_(jddyFvG@(a}^170ufBKlXXr&D_^xY zhfn|ukedpLsiinRi8d+cB2_REZ7iO%#OX_Nqyh&HtR!^b3M1|iu2p%#0OcBjFS*U>lbgdp^O#pny2`c#8QXZ1Oze`j-bD@<${QBeMbyxa85^!Y`9? zL}>sKC%&AP(8 z27=ttveqait6DEdwwfw;ht^=PN~Jv;K3bsmaCb72+5?qkv94_?{&V5}C}eL1*xw+Z z+e_IM=GU1N*d6CH8S2&-=u;Q$NxCWGq^@v}`cP#}y#KA}z@>0}o*~sS5m#aYYcs;8 za-t^F!brC(2n!+6dLT1+CeeQ;A*@egD9+iqo-3(K*Ta_>OmI4}Gd245xijt8ZcN-d z|D-eh+0Ep`8%4`EZ;uw<8kF)DDlXrxyZosB?34PN_lmFY6&0;ll&p7EZ}k^HXuI;f zI-5v|S1lD!ZkO-Z+`iY@_N>4E1&95f^Dn9kpH<&_P+zv+QNK0Nus>4!a;Wr8>jmjU z+qE|>g^yb+4%-?JI-BqHHa{J#e=$-+LJ{b2P@jL;RJv1Jz1!OSaJYNDy?VFr@@{?l zepSldnvCtToVB9-`QoaPvX;sA_KCK(wULoKlT!zC^N-h7AFV7uSzEocdN4n|IWf96 zGPrcRrZYDwBi!D>*FakY^ja9EnMt~7CYt!`X>ua?!4V@*BH(yWX&{a&kjM^%uA31q z!9~FTLhyo(UFE4~W}l5*6aWys&XVf_Lb~9~E;BmZ(F}1N;njQ;9m5(ITUalGlQ@z< z7H~2ikqBZ#M#)T)C}A{aEhhj0Zm0_pnDYo#C<6hHEK-VD;KF(esG(rrWh><-~yPBcCfM{b0(SGr^kojVP2q(V+1;7FjK_&?Jc?OgQDj<+K z0s#jUBPvNMw6)+1m}0|FGdZDDOgBE`bCegndfIvGj3-!ts_$-2@NSmRPNpkZK;KJf zx?&wD3MRst2>ly(Ou&AvlQ9#+s0%WUbrKD9gVohV5|OURtQI07L;V0l9k^ro0@_DR zz>GG~N+Pp5#nb>SIOkxAcR)0S%#BGRVu1w|2<-XUwkGE|_DA^SdOD_B8xdZVX>F2i zXMWnsD2|z!*2Z*-&eA(l)eCu6Cf6LS^DJn>n&Cd)V?}0ZfD@N`tG}Yr&9KScl#&@K1tZVE0tOra98#Uqcl@-=e{{!w zd(N}R&4sx$oY&fviV|nWZHgIKweF@3zE(9pHp~gicQ&WzkNzaz+xDs}{bN*64i(OJ zmF`aP1!zidx|2R~Gv<|{xPkZS>zKsTDYpe@9mlRmR^>jE4Jt;Fa=7`_4? zx<14ci$Q6SD^j9X+zz3x6+sTQfsS21PTl@WECbb%cEd^jJ?v(nW>hMFy<2W*_n?n*h`a3-(oM*dQH)~*!1pY8YLOxkkc^~I923zer= zYI1jKuHUV^dQ_5kPs-b^zdBcQb)ltvr=$91N5zwpOAm@K9+l?rmDldKmTh;J?)Kbz z)OYjiw$vBZneQr#4w_3CM6lCQ3yJWuqx3^}@ef0F&pS$`hfPh-I=i3t4Lt1WeAv_Q zvcLSB-Yc&a(UEOzwhsiTN8mNBObK|Hg@u1|w{I%T4n?;K?UGr_zQ$vfh zv+K)C8wW$fFP9cR?QH*e=gx=Kl}~GH|2RDQ&j%0xvA6VpKY#Ea&mVt(c<{sHd*9#N z9@3(MsAo>ltoSk(QGYR&cXW7nBB@NRMJ%R8eU{6Mrf-;`NLP3U6ln{$T zJWoX1aAJcjrX1j%6cwasP{v?*!2c|VBGF)jZ;_wxWCpFpdQ4L!DGZ7&HIocZxoD{y ztE;0DHKie>E)<|vYNxFKOS6#fz1Xo&ozOdRjFbHDbpabSSO8$Kd(%e(Jme-nPr!x$ z5eq;Buz)Z+fI#odKj=drsH>T3Y8t7j=^i^qT_AUv#HSrQZu}(?cE`<+osb^o`QJP5 zdx(xG+e~ zd4+Yhtr;s1-3GUb%8!hih$TS5j?6~$D+*)DgFn^3ik#cSxjcWD*7Hd>!E(7;V7o#81|{ z*;YF<+nnKO*37ZTZif39dryN4?gK{T*br?&>ZwHUX))dNPLk8OFJ~q)NEP(lU8mA%Dz5}~LoKID_bAGgYMO^q$L{wX( zSAmyq2|l-AABJwuWF!qn1rJ09Or%ARWkiiedrziD*2M>wX2#Gsnw2hQj-^F(Ci_&M z3GX@^w{boBn~Lm*SECQEonI`tHFUFPqq=sR@dUT8+`W~4cq?zOvSg{ac&n;zxw7c> zMElFG8xN(Jm!;`P6_-{k%a&@p_v>m&6@Aj2_PjCeMZ-0mWZMmmv$Yl5HCJDa)qR-j zeB5#QeogBAs!NYL+aC;WNC!Q*4w~Lix4#=MecpWTaYN3%I_Xhc|7zRq`-2S+yQBw= z84s&6-!xx4l&+&{9jk2^t*cw@?c5#j-yQCFy*T=}{iVNbOubuJc)zstab@Y#`ofRf zOTX+c{%L>Vm%aJ_cy#dR{msAM+xd?thyVWQ?!P~I@M(J!Yx8+mwRpo*sV0&EN1)Tj z#$3r<*g2LqNI-KebuMBkbF<8MHNT2)$K9ND#a{R>FWKr6ItM5~DX|zI1uwwnf7x2+ zvW*r^q1Bqap`JS{sehhTP6+C;40 zDErP3t5$!+)xv1sptPuQG_STZMag>APUpJ49zR|prclgjA-51nnyZ)*L%7YN+NNGxAu#0YlAlyon@5St`5+XI+7St;~?^tYBGOx{>M5D{E;^>!%_2g%ulu z1-@l4*pAieW?G{#KvT+Q1(z!_D0DQvPaY34F!0e5kwkJ)KoXG{aH%gctAFDQsFTIy zV=KaiP*<3owiGl0v86~Z#NbO4UCNBhb{4{GY-Io(@C2^`xz;?P%L<_^hyycyF)`WF zNDM~uZls*NH;9Cxe;inlJPEhS&3toy*`hGZIcSX`M=)Hy2=Ti zw?F|7&QQr5V0h$}W)ArwuJQ?oDu7cxX?)yKi1RQ900&&&1Pf6VlSG6Qxy46}Gh^&+ zt(y_-IsGdc}rRAJ3+#FNkHZ5+3SWbxz;7DKUs9P0i&nH$oSz$fC zsk8+PFa*=(BC8&aXsMepPjhAj3+nw8xCz+mi@mL|9`Hw%?haM11YBG8FfZNT@v^fK z^A5U#+-c#{GD5#fjX-AzbyTH~M0B09Ey#@{BC-w?q{RWshG3V05O>b}Qjp6P7e=K! z(lV+Kb*~9g)G~(C*QJ?#KFF>y&~YfxyUp9_x}Vb(Kj-Esujxduz98sWKYF zJ^PcQdom)clYJXchYe+hjYb9BPE6{~O&dKMwUXkulIQ~#B(_~htH?}U%FWum61{mT za`SrZSYGlNp0c8h?b_>mx33*mUEI2weo%DnVMX0;N!4aU$x`>tM_tnE)|<~tZ*1mY zT9q!)$k}Tyzc*C=up#eWRmS11y= zmRg#o8XG7R?oW(;y*T@3W9i-c+_#Gp?-s^BuTA~9vGRF+`G>WIPpk7ES7tsePkz5T z`Qzs7KOXG-y1)MG-p1eV?fu*R!@oT^{L{hi$IaF5n;9YIr#wzce@L)4OR>hEW^l&N zBwK{2kgp{kuREJ@dI1zJIp|-s*Mmc%USQj&OGsV7$)D$3&)4jr4~V@m00_9SNkl?x zch%1NqM5-ZvU~~e5>g5wsJ>}y0%brE!4*I$+#R6k@wFP3g6WBfq{)rcfOQ56AfQZf zp&w7Tn2ZP5Xr6d&HtNI4*W_9zg-P1V{xjznBCGHFatP7P%8Vr^5p}u&e)$1%gCS^`5{22x-0J z$F;utQv2AKc$ujYuru4A5;HCV6gv$qYer!n7hx2dUw)x=>X-x&$m?F7|Iv9rQmN%I zx}6-4-E;n1Sphp|LJ*e%1UqM;a@+s{n54M`G31Q~5&!RLvr%Poec6%y_dJmIkcT)x&!_}!AXErEH zSwcZ^cr|i2GZ5_^QwQONVSY)VDRtDp=}KmjX_1w2xzdiI1K0SK#r#D0LsJB3G zs`Rjf&Z;%%hu^ zo)%v|tjynPEX4uFgt7bWH}3UhephkfMR~!Us++^*`OB@X3@<*Y$$8m&@nK2y-HMBw zRaL9>_?xB2-32duD_(RqebZC+wE4X7kMrc0z1d&)SAX5x`gMQruLp;Jxp(;Y zhX?=h_0e}5lST1v!G_YYSPR1hD}!jFdkqa!tcl*$!7{`DJUX0!0$ybn>C>EKAeVsy z9)SR`AjeDtTtGd5vJ~ME904!#E%+HO+L>Q6$F*)mU3`@>m&6&tI5-h@K@f=rRs}9w zxh@!$LPfL~H#D0aJ0Pd;nP^*>0umGUvIFg!hLeFkZAdk!!YHZ@V zyF-+G8ykx_`A0edMawEbo5+5k0Uzs#9a?1^6Ig)22gm>j*!kyU9I=~0A5av)d9Xc; zKZ;=pnj_9N>H@HUqJZz>FNuw8EW}1mv{+1%1R+h-g&cdt6D-ZViOvrVFdE{J1z^D< zn%6j_q)x(&MqQxt*vXH45X^*%O=hO16J*O$tm9IoUAK>MrGsXHyNO*M&%K&(7J zfIwh@%4I-ZfYuc50J2~wGeGbK*}hyEpa7}@`4T~w#b2F&RXi%)zGfYs7WGPFuzg>B_316hqBqVknHXQ_T#M zjI@yzK@fA!M<67oGT9j?=p3gUNHI_Y1!xT=>z|SlA2JXlh8gfY@UneVN<>S9;wVul^8+{^v~={auJln@=EZuE%oAom42 z*LpY*as;#79qBe4EcB`6(Jmc{0Ykn@1~uTCE{O_mPKh54_anQOPj8M_cAX9%P6-%| z@){2JZBKTu$@1^bP|lnV?v4q&6&+cdn>8SvOIqP)fN9q@4>Ho26Hl>!icJ+MVXBJ9QWD zmR-MJbYru&VXwLRu(RZ#yYR5P_;GtFF%;jH=nRhFFG>iUr zxcloK&7ymMy?^xA2fKfHu<`#MtsXX9E%1>nV|0#jS48WXglHQjSel+OR;BOS;grtEECLT7+WhLIY+Odml<6zWK`WF*vTj!t~4H@quH!i9Kyge08#+4E&A01m(cc79$2 z4yX&nE6J`L!-di_K@7eD3y|832GfHflR&{`&+PyKhmY=xg;tiaI=>(HGe)2+V~spZ zL!=&;ZA~SF-B4QeUfY6|{Sodxf%g5ucH@yE0b)53V>46M+!oWwJYo;GgUfMuelCf64TlPm@4EL27q(AfX^Kv6-c$`IZO7Em}yM|6jBeOQP~Szy84ynurX zf%0>_2D{n*hq2s6=mlPJ5b7&LM8e&~=FyqB@R@yZGIW>U=1aslLXRF6kMj=4q%%O;cid++I zY6PD1h;fTwk;0U@v6zg>BOm~91yaT8T| zDJy(z2(LhNgscc61@s&AQMLwhkauhdbmc^kzkq*$dM^bXq}njgrT}6xB&!;KXL|bt z5Y;h?Gu(&tp(0Nk%ofdf5`x{xu!BAjgo3Yq0h3Vt?Yg7f(H9|RZ4LFDNDkc02<#7Z zD-RDSi45Qe42HQ4`#U#8xECfn^<;#TPuA_{L_yJ>=*C#Ip+vvQ)Y!?>QT>^rBUj>9 zuBUBFIZ4Cu!F34%W!XMcMQ68eoMocfdT!+IwF_&Pb2n}ztlTa*>@RvbkpH|o=i$xV zgOWlbtQV!c$@-G@=7JY3H@_)A|G4PP@{O|_brtjFBovh$^*4}0{dIfsld9bNrRVm_ zZ){do+__!4^{xjTl3-1PjX~8(X1>GuOkki7t*-KOIgMaTT}<;ftvk*wtC& z&yq8RPmO|?a+uVr>rU2J94$CEP${3YGsw3!gDe0Duo!Rw@d@ZCxcEU6Bn8w3bSt}k zEQh2ZJMLrd=H++~_Ef9{%ZZLO3CJG9Vg@n0mF9{8c|XfnWDlJ7VgnGJ`&3UVg|$Q_ zmBMnoix@AK>;VOfGhl)kqEP#Of7FGh)k?xO#2hIOBlHa98C0-?G=BvnXknadV=lpX zz-FMDrsYaq&>P~2If2Os6QPQwB%k>duelVjmCOJTf!%u}%?B({oy468P67+C9Jjk<0EJRO@C7`BF8~g_5-1>l z$?Kx86fe|LoP9B;@j;XsES{)zL<;hp_=Lp-1^;qOakldjR+EJOc^D8~aN6LMw+7Ar zlLl(1OtrNP)xOd{_P_pjcSvO>5Iv&bDg;$^K!Lz^Eiblxxe)km^H*7nc~OP~869}1 zFea;j0N$DH-AMF*AdyAzwQBz-*FrdvAqapN?Jxeof>s6#5E}6<(m#Q~n-~hQ&i{r5 z%r%2bKFk&W@AtBpcN~DrY%^UUq-H7ZTn%6Wy*ONS5KjF8ru_l-jPhbzM6d}KBs2Kl z)F{f>FjQCHPXpFi3oP){)eO*93)j=YXhtGkte$49o}`&#qRV3E$2$ODoM@z%W@-fY z42eJqz%_i$R<+hNO?{XjgCSbhhU0Hv9{FX6>bv_R8-mAL0n|; z1@w*tzh)=qgCi(nGo@;~Zlzl+p?)HOLe(0=Pz+6c%Zc8Mv0#ebt;iZ}_OlaGQdd(v zGP13Vauz`m3d;s0pG>{<#4^UVZ!afN!x7LI66Q)TGx|j;?WiODA`*&Ns7X6g10qUb~s#NATlppU#2p76ZAK6gjGr?SM^j^CXaY3yTQ4^W04isOB` zn-xMM#%)r)P|1)iQRm@YsPr#$nh zG;{4z+I&v#_H}8k>2mY@{eT|KCZM{RIRYdw~T|39z`U3C=X>A$T{^ zM5r}eFN+S#bfgm{2O*7M0o61$?o~@|LMK@nCi-c{Os>*HXCJR8bmY=mOW_Sd*~gX4 z`Kdd|u{+3qJkEPKm`;%gGcu==Jm*gfP+%t}L0e@arYj?`K=h|55aN_n1RPLR1~eK( z4xHkF4BkmcpQ3<+Jli%KHn2y(N61CPi5(Iw!Bn&)5CRC`Yrc)0e>}<-HIZto7bz8@ z|DPx#=@6mHzGHq5x$7iq6~RV8p1Z-ZQ0F7H91XGP_BO9~L=U4EaO$|#u`k5w`_xJ5 z0+rbFkG~)MWdsm;L~_rFW)AN#J9(U~n@2=Jzs1d+JZ19LF;NJpN`v29M)H?35U6|v z0ti?%muNBJL?fq~+5s~%Wr>BB2q|T$ewz~pYC^UoUSZy`j0FehMN?=m*9T7l8APnZ zbAbQ>I#RBNI~f5x>HatiwlW;452?a{13ZWPvkwQF4+UF*1x)6ubuuJj5iFob#Q$Kp zV?Xs%5xNHcnhZ754$#MFpc$a69;Po!gEQ9V;6=Qiq(xi>ZUWq7@=7q!Pd7JVt{Dbo z84HA;NH^2Wv=Gl(LQqG9DULH- zIjXKH$-R=hH5zO&2aqvm5>g#+^wt(N436@$W$FmBqMLN?UCoQ^^h@mw;RS#IHh&NS zrWizE;hMw*%+a|mz?q$2kOJaO&pFjpEe994uhEL6e6u z<7Ls^A;OY~sG!G05FUQeo7OrsY0!^fMK;KR99>xj_@4X`(+x`w7))bFi|(S5U?kWJ=H=ax$wAQr1NJw6U3od-ale=V8x) z%=$>z#$cyvA4P#XO(Zvx7}1YZ``Q)+I=7^T%_Ia5B>Hxx1Xsp5!&snX?Thdt1*tOJ zWjxk*G$n8{J$y9UkA76El>d{s2oy*aanJMEr(Gxj|JEb{yg{}C)tD@Xj z#WxObl`NK&OcY;RtG$A2?AgGz$EDeO#pgF`>c%T7sU4p8mVejZ{Iaw9QCR|ApS9A0 z#nM}AHN}U>O$QpE4t6~2s=C*ZdQf&@`&Q9TT?NAqrmm;XU&xj2DXt($KjnHw41 zou7CzH}QI+|8JX9KW{AkZFlvj#g)HpFaNx{`gv{a-yQT3DYqNja-}rfd z>xZ4SAMUJty0`!HgTtThNp~KMcif8i_tXC0g0;Vh(AP+@GE6klVHQFT*8H}Fh6H&&Jp{vy)`XGU;@PvJs8w%s{p_tjoIm-`)SOW**Ag>yZ15${hfN^B1N?|fe5`>BB z@Gm}807jHG?I1S!Ic7D75!(2ODL(ff(FgdY3)BC|OX7tA|jlTNh|FkY(U;&#p<0)Bmb^ZwiAcC5V1v~)} zc!WNXq2c$UK&}X6EP!-|aW?zv1lgxHCuk@gSGA~4>VEMBwE%>&p4thWlgG5b60iiD zEFGNl1_+KW_+d1-nv{WHO&((Pn95?n}W0RGNG97j72 z1(>mV{fyhu$`kjg>Jd=~f(7se^oYWB^!?RET>ut{9+81ow25AvsXhmP_WLwbGOJPk zSeu}>0t>Jhr6KRUUT!e92aa&7VS`!qJ37K2Mkq zj;5#zg23Le%-*O%VaUOToGZF;R|a0?MbfVc1IoC zp){#-wQu!vuOT;-!N>0QsE-J#tMhcawV2i*B(Gvu_;93>zA}NeI zg4}LL`ZDskIot~dx!cdaHpJ~_u(Hh07VdzGpvljrD%g1-)3Z0myUWMBIMn+}sAFBY zqA$s}!^g2P-V08m+uwCAJa9T9xHHJRDp1K}%#I9CCfy9j`j>dy_hm)TN}18yXQJ0K zL&no$=W^r6azf^=rYv&QFU(!Jkn-UAg{>=0G|S&_x^b_i?69%!QSP3+t@h?lQ~CYw)D9zcp znYVl+ZT)84(uIiin`fqPm30-BOXFR`8>8b7=I386Z~S`r=-1udSHs=k4z&Gz|KNw6 zjUP59|Fkyq{e1tg+pBMvW}Zw=Js#}+X?yMc#{Bd7k@p*O-!6>49PRpLW$NwJ$PY_1 z9~Z`-54Sz;Z+JD{@?o+2`{iEV@bew8W9luvqr0nrzPBT=U}xjw^8BCoR{ziY(!Kxd z(c#_pTjyNO!Zb9JP0UkmjH3)SVvICV7U8J`4svXb2xH{TL$!O++K{rB$$e1F&;fLT zG93*wZH>`gWSSeFF)<+F0`BapjW%_Gd`1Eb@*Ip1qR}Iw5ef5zSWV`R!2;1EB2)}w zb~%=?PbI?4jTEQNROdSx9@}Xmt#tp45E1blEZ`&vaZFvnrn{ctOp58eNNRAPxg@q& z1U|8@Bax0n;r6oEj9UZkG}8mG7!fq1ciO}tR!1{Z;}j?msjV5Reu`tGlwx9hSz%9S z_qw$K?D`zJ27?@NpG_rrjwN_ZBzdl62CZfUu{|>;SseT6(8rUC;{p&MD}^r* z5~yU6xJ~Cr^pOzqh@muMmKi|6j?U|%6%;N?1Gr;o59C*u(fAlM%b|$1b_wX;nW5HiUmYci>0aygc9}3}ahSE~@+FVyyp&*qtrRefy3lFV~3U^yNmkf$U)F6~W@C8%^^z&h5 zX%@*#wnGYzz}c8{dXtCX4j5$9K?wj!?qk_Xo{MS-nn znqf9(mrad|E%iG>T{#BQENTi=bV3d|SrqzMRtGz_1UfY{zu>x~&1DBm?06Isg-WB& zc=wJVWsAF_!OH~(fl+1MkuLZSY9ss*xe_){T6<5pQ#An_QQn>5UhE%zL9R%hii2Hy zQvBxA#Q2ZyaC=7H)P*T~5`9`@J*gwgL)@BUeI|3Gr?O)@V!i9bU2eyFjbBVymab=v zWkigmg!JYlPF_mcEXvxvk-l*wbG6{yc>eiGsc^CS+LNx@*Uc3#D$n1)p7f~X>Rw&_ zc6ZNeBa@0to({D<8@m0d?Z(UI!k0}|`xQ4=>q>Bwy&bH0*Kz6Viun5laR&uC2e%4V zi;H^Br}kaQ?JF!9yj8y1-M4|PbaGL8x4!gdW%j$prN3`(eV!lu>+ak?4mQ7??*4VU z`#Q7vT6;9ndC*(;bhzQoWbK>zu{U!R1#=&^R-epFzTMvVw^uK}-Q9V=x$=5- z_D@IB_TP{0{AGJ%y69%8k(Q5!#%=BAnSNNx2=GlNq@Ux#EG5gjKb zs$FuoD0olnsnLe#2H}x2l3YY{QwYbg!jjk)v>B-enotkqSAg;qoLp5H+C_|LsDtpD zFqZ6YJSpk~bkm{8Z40K9UHmNN`@w^nq7j2)9}cwH^)>r?dTv%N!dE z;Wf4}PB73!VoJ5kHII&n3!6p%lZ%`sOH3&|00Q|%N{K9M11@`%rP*Bk4knb$NUsSp zMXf*v1*5#ErWtU?BT_n;<$Nohn>PAI_C}nig^q}dpxn_2+l#CqVni7GJd2JOwEzQY zYe|D}vtZCvy^{&UKZ>38Zo8Pm9aH&29}`SR`>4jvq`}Lg&cm$Mi)=bsQs81kflRx>S|QrYas{^5+nQ+639YKlD7-& zIG!IE>Rboib5OfUg9B5Y)>CzqQ*6Zuk z1~(Gy(3k8!7~>&a3Sqv?zN9*sWO#kNf4#R~xwl(gm}_H%^X+Jtico&4B_+c|dPIAa zXKRFKW3UT-r`}lKzBs?$gutQHkdA1t{-nU^v$2bpQkJC4sbksEUC99xd2vhEv$k%X zpSzSWofp4wACgFOM8`dhwX*?&CDq%`nIL; zZt=A{btMmaYVS8x9`-igZz;G}nznx}e&=fD=JhWjIV7gK|u=0@HwOutzehc$jNKKSii>)V;pPir$jZmqswT7EIn^LVh~ zUT^7#nVyd`eINMV%~?zb_z`~GTm9u=^QVUozS~&*Zc!Tld1LY4?;ky%nJP(+3O7}c zG&YPeHD>-tls@Ks{WNm}Z1`N~9FSyMjUacSb*=CKr)&?oB?@c z@uz|^PUYzB3?cv%zheP=uuP_M5@)tBjTM!$)P|n{>TvwJV5XC3su697x=`IqL&IHD z%Ux5)Qa(6ZPI}&L`T`(CdrWJDxXYMlHA>e?MKj(ko zfc>8ZQ_K>$z+4-A2P&@_Wdigs)?so+2Lr7~LrI3S62(HalC7N#3b23}CXq!KE{SkH zg4Njh#pWL(qSjcP@TnJAw7!JBEye{bSV<5=bogP^5%BFY76^|;tm7izqEuifm$_s1e{zdBw2QuwiX9f8g^pB3 zAM>2LK*j|6$90L}u5tOo%bI$LI@a_)x#cNCqbz`_IW6rvQT^PE?J=qxII2fboigddj?%NRN z$E1Vtq<|Ur?^xd=7oYk-kC9~0t|%PJZj~|qRe`Rfkv_}m5ttbo{9Idt+=nAQNgu*- z&=Ka_oaob;trKuORQJAbYp=;%;;Cqua$VI*MM8RKMyh+^@JY zoqKxxbo9d6$kqJR$?NAku3VkEarvO9`$2pAlf?yg{SUkQpI7Ix2upu|wEy>`M^M0@ z=DYu~Irm{~==DIuyRn)NGhHwGZ+|y7^m%#q&BDZs`M$Ta>mL_J;R}A)TzEY<_H3x< z+o{3tmM31$48I)hc|P6ze6sDE$)O*XC;q&({&{8j>xt%j{cYd&*L<34{b{!Qmz9A} z^S!S}Tfdv@`}5Asr-R+kds`n@rG@WT7XGxq_4C2@UT;fjVnnEcrk{oe87?vOTTQhR zjrCK-4WdN}Oe714aNgb=$*5c%5M+e23~Rawa>tKDgrhBQGdc}NV5Th&QE8-!Swr1f zO-=GSbu3a(lY?Q7i9V%)2xEtVgAVhv7Sk~!oQA_itB0+g^E?zazojZrRkVYs5%^MY z1W{r%CCz@Y0IvadGw5)3d$0f?VE?Bs01G(X%g1~G0$~zZFdHuk90Nu8W{`$`9w4Ah zU;zY>3Ucd2gIw&^JiQ5Rqp zp)#K{;1cVH0yw~nG8-e}=?48x`+SU=+)RqCHHxql+89u<#%Qa91&p%<{=GES2`L2; z;EscJwaKPq#w87+M2cX2Nl;0^0p>IjSc>JqPzwbSbpgsE6lXF)!1XM)eJjp6qBNi= zpfsQ^fK7t}VA2ghz!69eCMAyxz0esO!wf4OIqwUJ5l$S!oeMd36Gp^va0b0N7#G^= z6-u^x_zP%m(S1ipBsj)t_1m}^ERS(}%l(NlR@p~v{>GDk>%$&}HZ)&4e>O2ZaE z=f?2hnozsWFt=Vtm3b!mt)Hrn}oYVi4Z z@7KePZ^wIoSsndpedOKT!n@_Emwh#_2kPF8G=H4!{zwHe+VTQ8nD2kJF!Iyk{+}O8 z&&V)(Ge7cqbK<8vE2J8gCr8Ivmz<^6!bvIKP@NbqB39DObO8kd-hl%K ze4Mp0WHbV70*hBfX<#j+L}~g$UnK4qGgNtoAOhziEWey?xPaukfQ~-QmB^-}6Ehy| zGAqo!B42{BD|m@E)9Dd;v-t~ZK=nu!z;nt3AV4&XNq|Geqrw8Azfr|YBirGl5Zqul zgAr@?6ru}C@$1}{#@z7QWElHuXaWJ)U>WRdgSg#G^Ayzrp#({~8u<{Fz7-?m#upqX3II zfhkZ4G_#mj46QsID%sH7f+;{v#P`!Gqau*uKqabv!U_~Vu@&bT>5j{)}?ejNbB6K^7dD3|lB5IvU0%(Ld{4=T`%+M&<$Up?s8R%g> zjxaHdGdE4PFlE3cg9`)}$ZQh5!W45u5Q3;`X4xPjB3yzD3PBdwq5?7n3s{VXqW_5j z4HS?`1X`x>%W^6ym%5xmBx(T{>l_CoF@v0RcP9&GKViG#7*5?%pb&;$&e;e^OC;eP zU_^|S%ooT^EcFdoz?mNwtIFN1Q7P1YD$_APrw2m!3$^wrryJMvFEF_ zrZ#*a?ISQkh)9KYNK7=tUj~CrE2+}mjHa#F39BaLtnmjQbvzaSeyiB@+65LBQ32{eLij=xN$gUw=$xKY99$?8Ii9&j$s0(o$Oz`D&ITi0p z5=Co_4}*^fll&$#!@A;qs{#}ZQ|^iNoX(1#$cpNY^Q9D+I~ymslxg5>)(*Y4KbV$S6Lt&|-pb6!drDa_idy!3Tb z<&*ZRC-oPe-8g-8F=_2a{L#&v?flH?ywiO-S$&tU%~aOnR(?3p!OXGGJNtiLn}4~w z_`~ebU+&-e&#l#ubM4ZHvA(}Acl={x?Bm=5X5lvzw|`h3dpR}xsJ-i6kMwDIhC<-| z)Wi>qgD)qBo==XwnH_ySJ^5*I`qRq9ld0inL)~viJD*JtemlSLZgJq7@u6=<+TKn! zy_xKLyD<3k-twEN!H2yqcRL$iP7jb%^m=ae{$R)R+2L;%Mn3J``TN(>>mLsfzge1i zzdHJPd-=z`{k@*H!nlx7Bh3(ftyp6NA{n#n%u>w-J4~=?qLI)Sp|yZ4W6~>CK)Qu) zhNT`@z(fS@7tuRX5eh<*{ZA~QN5s8AOA#|Y7Z3*p1aY)rs0${fD9+uAsW|u9C|CA4 zPWvh>Kt=AcdD7I60B zqRVFDh!LGH9RiG%>gskR>YP+zfs@*Cj*C&o`f>VNB8|pU2&$RwiOCa1135*#AxOY1poxE%iSd&2|VRd1|)tG|0F!FML1%rps9S$ zN;gPX&6c3hQ=*G6Z`*Q3Ah19M1StAt6yTB05X)RT$r&CuvAXKGF2X4IPPTnEe|b>_ zP#pjYNRect8v8jtf4L~&{Vcwh%^wJ`(ojQ>LGP`NIM)uBkz2~=0ZYv!k=>8+(fJe`-eS^$#^^ci`qn`~x~WUQBL zgxAarrr3mIPpXwk8Yyh94iLxjI%)~Jr|1#kFQZMw&M(&jq8F;d1+H*TK2XV|FXqw< zf;gr%YHh%^mSd*J{DMo)mS~4y)^563(_tsgjZ=v#%}4*5oxa#Q@$`~HBsmzOXvR~_ z4k|>Xa0FQ4olWWgKwcpks&+MQ0W2T|7+dUSjrg(<@vNiCZFg%HL&-S&qaH&UDyRVl zc6izoz1Tnuk+&_SF+Cz?N1=wGBM&IhI3=@}m?JnmR6+uxAPDFP!E%s6dPQM+)=UfR zA~?0cPLKPCqY)NkCYE3)s`7U&a|v26as888+D^B!Vwqd*61TC+IQ1M$wds~aPHZUwr* z0w4jONOtc_3a$+C51`3~dzWua%tJDNS7{ zy>_>=j>L#3CE15p&#YWcn>!c2lpHj3CT1ijv;V^7iQ-$k9d(HP-_4G_o}7I#(n;^1 zG@yTMFFl$V{L|tHJit%$UDCV3o_E8ouSe^kiC<68JR0tLvoP@e+WL2kiwCVuUk}{; zabfbu<+Zm9ldq@y-%O6ZpPhKOJpFuf;LXI)PwNZt1rG+>UX1p9w>v7VBrqTFw&$hkg>o;L&HH$-Tu@`2eng@leRkfowN>^Y{E&9I~(A_IFA{bU>8IV z$cj`crXsDB^ElNDZ~zd{5uece4rE52q#UB{e}e=zhePKf&4w9C}8V8_1kEB8@1m8 zC`3g-#Hc!S@JT*M#s$8G7v+jTV1fDxQ-DD2gwaVc=3Zqe<4ZMDb#-e^!9fEw7|;L$ zOEnF!z~Ypqw4LE{C(9ix0a$>W42OxJ3^GLtKxsgDHIG1ms#X+p4T$@|l!$;##k7l> zi%W^fa^Z(!#b}W^Yr2zSPTVI7HdyDe);z1#Y&KKJAQO3siD|uL)ALMS2V- z1Pn&|(Aa4Xac+)w_`F!F`W_Wi}05cBYBRUiOhSS3)q^zi+q@d17&)Mww z<-FMGjG(FX(AhJQGr2MAMdx-wf##|g&6n;KpT1LY@lMIr&7$m;YZ-^tMGra}UpLi0 zyp_FlIbtd=ek?P#Hzlk$Go|f9;b8uirP51x+e%(f4-y*mQ=8vb^yfhW?pW01V#ce+|=@4ucNemXJr&FlotBO)VSPj%d_ul{DZ>8It% zw{tTemgaB}ykDIEusHf+didq!_>YUDA6BQH&5XVnYW-%S;muUn`}xW5<|dvGk38(@ z{(7YT?PS->xrxtr*1uQn^dGktKkY1kJv01vb>_#rNAK2Fe!VB{{O#GjU!FYpxWD&e zcJlkB$sg~oy<8k?I-ee8t{ZsIG_c@=8fDPvVesS2p!P~8$Rhn(N40| z6%-&`n=c7Y0t@(-u?R_23seL!)8gbGM@%XnWPm_mfmr|Kj;Sa>BN+=oAfhfXxlM-J zG`JXDv(}FK|LA(puQs=A&G(<^?yBubMj~erh$w={h#YNj&UxG3POlSSOwL&#kVqm& z=Ztf}#u#UB?^so*Pq?A){nBIf{Vlz_+;va)8DkAu5<&!qVi@Om>f&De5fp~H<)hxX!&owsE z_3e?jcgH^ZUI(*Ot_$Y(C*R(ch+i!Mm)O&hZgyoyENgCS^wh?P>4FFXXi+CJWCDVD z15ssCyVXRv!70V36fB@8D0IiJ&TvW*7bM!-g9Y@6gjK1tW3r=tvV#q_Lp-L?*}^Gh zWI)4+wow5>OMedz4(pv5BRNym(jx*6Kmp(Y6rfEc_lV@d0r#`L<37Pz8PYW;2}@nz zybF6qL8WkGa3Bmz197W{P~?3qjPtlBN2A03ilcstlh{^E!e7V-XBKA1TwyWNr7jQz zp-A6iwey)khpHfFdj6Gh{;lyLghpZ=2NskBx|9aFRz>(QO|A&@pe`UsoRRT`5Z{tu zAKZ?ZeIdbZNet8{s=MP<9i%&jyWwcWkLPvpYItSHyc(lJn=@j|;-r9f*nerlAQJ1+619ah z3rOT7HsqyT%+#VFXw<>L4!e*XQl1%kAz9s-6M>ugC_8_4d}nTYN4`kPW&ar2kZ35% zXv>VJWi-8ooj&~~9^GUH8aC(*+p>lZY`$K4{C?f}nNjP#9y-xB=k;v$ta-LUcT8M3wv+Q0Z@@I(X20`hMG)7pBJ7BLh?o&wD$U zOr~X1$1m5Wv8{t&#N)9l`t|w*OjJsYzumd}dS>$dZRyG{&*p!BeE*l*H$TiwzMUC+ zHs1Z|+RXjl&a>-Mla*@_>a6$n!pxD3aNrFKy5&||%FEm5!(1S(2ZlouBm@jlC@+#UfAFJO?ZIgPc(4c~Zv0Wu{6OZK6!E z+l%HslUvKk7$EqD1)zi2l+sn4R3Qpp z`qz}@p zC&--Ykt^7*_%j*-S6d-e5UnB0fgb^bznv%wzyc3@Yj-;*>p-Pj!ba8K;LU2un@@8d+YJO0}CnE3;##G2mQD=rxy&+pSwEWkAty7YCS z90l;DLUhbf1yWW^v>Qy~rdU-O>3sf5a?N0cZFW|!Q-BCAvDVfI&G4p!P>R+p!%c~Q zDJ4TT=G96&;YY-zfEfXW0E-FNMi(XWbR3EZtl_{zZM)Npyt zI8oq}L2dw23E|!q>RY8%x2J0G7ix*uTnO?m4e>t_fOo1I7SHLpkb^3FL~#g7VGv=t zaXirPOpxkykl%6NVE(|z!@bF+Db@O;Q-fKgj|)4W9bcQNZHfU4qI_U-pG{VOk0v=h zXgG;+o%&*WTzP72SB7?WeZpj3++c2^K1+x99-1F`=zZzYu$0QRVZ_sziqg9>V>(kq zIseyXXu3D*hKf=~vZ9Sek;bB!?);dcjfuSlk==!nSQ0gDiXSS7pDaocP1izgN4};< z+LSn4lz?0E(9Zn9-5Un>74;u17(cP;PTBXj&g~)2VCskB;nUwwR_+@+zyET{*=r@o z1`cG8A1<6fnt$WiM)J~XH>Oo=+1$7nzG&@@_GYL(i^jIM!@V#2x|r)eYAk)*U?usv_*0()PZ%xKmJq=Ggn_n55AGg;(7#M$O z8op}iel$JxcKXKhx+^gM-RMIgtYW>B%|;hQ_s)<}@qR?Ab|6IbT2Ue}i#in< z0BwQ!PJK!!3EnL!fd+{@G2(t9lon|*c%TQv$N*8%?QPLFH%HvwN(i#Bm;e#JO^~?) z{L8ar0D^b{<^{4FC{A+5?2zs>e?xjeM~Yu?S=p>N}M_iO4 zy0CpoL2DQu*o4{H#=0nUZi*Z?1+N_tqh3BAt%4eXzdCPHL#75eAnbLNiXSbcERd>G7a~;PEW{bJ+5k28_TX5(>1;5K03$ zMrM-LGD7-NRQNLuW&~qT3PQ@9QqnhOHl$oGO1xA^@Np==A8^+c>H-r|kVvgo`r55_ zv$t|wy~<$)p#gSm!=QjL{#hl`Y1rUt&j_KxpTGMfMnrYv>DI+a7;wcQW!qrp6>7 zTjmAPvm3*~0{;6cAgRKroZx6d*@a0Acl`|F0)GW{AZPPJr2`7{Y;1@e9FmoaL?;DU zKr_(7DHSrbA`cfv1VtW_GgyEJ1@CQ(Ly7$kZx47xyn%Tu2m!tiJ%2%#V-|qua;ux| zE)NAe|G@w+nn)O2Q8-{;3U`9V)Qp=fe2QqFf*@jfIU>yDEhWrbe3Xc)zV}sfPGL&G z>F9e&VAC{dT0}5Q}$df_T#Yuz(sg09=b+niiqeo+t$5NNHGOmaSSHdeb!mtj; zDc^;cMOA_t{wC-E7L>%nP9#*ck*i(e^^TOJbLg0(; zCl{T(O062R4SL3O-PUu)@$3dB5TsZv9V}h7utqUXG>-c_M`~MHYC+#hV`zGGo@=9 zl0(aqLORxybgvy=AK#xJ+q*8gGdISR9my$cq$sXAC$c6>Q=b~rmlLJWh!B1hSuvCb zrkvOTsUWT;C#E?+VQ5zo6NszFwp==}?Z)99H;)uu*_(S~KLX_ZJ4biEDJi{Qy#MmK zf~zNXk8asIx+Ck#rVM^qD05Hj>W0juUD>0UvFK0J7)fUX7pb!4gWgb`?|0B zr^$g|$A=#E4ZSvXzUi!c(_8YwRQ{hTFc}ME5)q)l74D%| zE>8`}zL8Bzr#5N<0v6})u4EsiG;N9AHBoL5Feq4Y3IhvJ1hHviR|ytyh6W2b$4Z|6 zWu^aWD<%iDSfcH%aH=VE7wS4l;vA4TCe<@v%Fs|6=yig&COA*)Vi+Y)Zip4=l^=<( zHE0Bkp>trLm;EHT!dA~tB}lH89ua*jh(p}NBLOhZ{wP2DGo>K@0R{N&K?D*pr)U;s z3;HO2tFpV2+$I{xWqKVuo=p&_7*|ju&}1tMqIai^wO*@Q{hgQf3J&AK2V&()w>8!> z7Koxi?&bX5aE{IU8#73dgTMmrf-(dIFe&(k2%?i?$tI>RM7_Y6fV~}PVTpdz>QxjD zd?S}A5m*S&NT}gbxnea^GDgO9lPC>n8F|@RJFWhcJfh%|1q3iGu*?f=q&wR*5AdMa zDX;)S5s}A?2H5#;?t)5`L|(;>or%B!BLgnM0^T2@MOegyN%;Hm#{&z~F9@c(xGj=rIBv!X~7n&QeV6*Kmi&@ zw0tOeg$n?#dGK6`S|*tat1!;(STcx_L6|o~WQbAxcm@GH=&S}EK`>PWfyFRIkq_gj z#N*E=gr1KJIUgBR5*}C{8FC=Z7oX`v8sF0~YP>4Bc_>U6mY&pvo{m&YNuhlDnG!Rz zh3a%MF$k&$l+Ti6Nh>8smBca7h#1J!>eFKmCPkGeVKwDL9gZbwX=-F$c3ew(_;6v^ zKtXhGfsR_GJT=s?Inlf+X&PIhw6L~}C{YmdB z{XdWPQ5SqPcYYb`eLpq&a-ippsrglB<$OcQ>)x}k`VAk3858tAH4Q=k#B=)pn7=Rm z(~bGp#;Ol}CD@RDnZEjVZ1D3?Z_NYmMoo{qTJaZp&{}r4zIee`?a(|vz?_~@tW)4yKs#;xL&q3v&1#($b_ z``guiC`QlpVoLGO-0*VP_bv`*(?9pzw`V815S)iKpwnWVH$w6|p-m*?uv!uB^yVUw-2&3ARA2g54#RBoid z8sKS3197y-Z6Id5^4_8@5GJKDDxBBx)5Q|hAVCX8uvMf*DNMVZZIxp`fn}FAVE-I) zeUqpQm=VZWAYY*tfW?nLC9%E?jv3f8EU?Uu>9&N>Fko*bLk0>zk!2j5D2jP6Gr$0% z@TZJ(v>xdxJ~ znyknbe|BH}9RpkE)hmRDgr!w)>Cgx|k0=fP&JSYqX2}x(uKar}kQ+qA8CxtyMYJU- zz?LpA3w>yn7#Wa`Y00(W@|!A6h8ZdXnK;BZvV0tD{S@{fg1qy~C_qI(jUdB;bZcA0 zJ>txEM3Hfc2gTieNsI=V5x^LLF-A9#(tslZtODQwLsryh00DIY^&x*e6dd{lA9!Pg z0hdO4p9*z@*CP(*-fnqr$}~qi@{SXg$~c7sSipZj!vdi%P$&vql^eWWEj=Pn7b1)? zspd^f%?lRLEXsGnl|>;k&O8(_%)o-(DnT6G?CVJ9XDbrMK=18=9&qYpHZ=?iNOXuX z5vFlTt5FP>{oOI?LV7Gl27C&FJQ%^!R>G%|s2C>3bmv8nh)yP0z)miU3;4o6Uaybz zZ^V%&(jUbca6p;BDi8H+(1nz1eZd0yMU)1lq18mIm?OwofKO=^vNBx|1SDZK6yPGu z#o)6t4TI^43jhPW3vr6T`}M60UL4ut=KH0?IPO55|XMIz5;h+nX7U^sFu`xgk3VLD_Uhct1&J zXasV?4C}&4nd0DNUZ32%F{^7`!eC*dxgcg}Lqcn=wzDv)yC4B&*zg-*t*L%~q zJDLs`Z@Or_;bRZN2qER8AD<9`VUovrA^C`DI zo${1c1>0-YkTU`lvUh)f;ez?2+N9;`g%ZJq1* zpMtIIFdCxmLzpBKeh|T9^>==2pnQrkfmkSmsT5Y>8x7@CI0><+1LU3i4=mt@9BMC9 zeLw^X1i7z76(EBOh{BTR#bQigWBY9ZEj&Aw1>Y_|Os+<#DHtxZ_%8N;p<=MIQ8_4r z6ixy5j=%wz(w!aAU;#kD1bO~I%Dw$M=Ec``Cf?kmyS6jw($+Yx&!INiEJn%9j)fCN ze#l6!nlpi17l5TG?GRWX$~qA&2%c=rjE2dqNw&30Q930k6tRvDF$zo4r6bX14l)*S zgxTaPx${s;018{G1F&GHk0;^9!mZBRg~LDkN<4V+okLT$lUyfXr!4`_43T$)cq63* zEM&d}j8kT0s1JYudC<)Lcwx{Z;#-&(fCVh5nRJ{E`#GKRx2KDXIpB2%;Q_ z_NYnlCkhAWBaEU+6=N~9{@&l|XrL=@6U;Dh6_PlvWBkche=gh?AYd_LJIVMt3LiON zY(+T{ai{_>kVhQ%hh^$}P8&$z7|D~hNl^#X9)<4KxJi^pMqJd!?)LV={ujehQfN@J z?F;oh6YWFDd{t~D*H0(-ccn(O>QEAd?u*wP(0EqHNge=!ApIo-Ri$Z|hYTgD@FT5G zi!VuxY|V%xhNhjodl8r%oTrxp)5f{P|P&O7>noRA?&7?Ae%a+*Q!AA+tI)>q16)-CkYm#dFuY zjgNc#9@bYbcU=5!to`SquJ;3-42xg&G(9u4fCU(c5+=iRmwOhv^$*%gAqsuOWOUL< z7R`db@l|_?^vi75$I00rXYN1Nw?Aq-{Yrmfd7%6C@bI15)AQBEue%%HO$|f#82)0X-wuH!NU3|3@qURK67$a@UAU zDvJNfFS3}_F;=V4VyZ;!8-HZ#EP#L_urbPw20R>n1XOId zXoB&XEA(*D*;&UqC}QmGBJFKs7#}Mf;FqQ;ow5<2*{-3k&2y0)Hv0UbprM{+^WWrZ zNiKj9t@7GQS`F@_1l)Kiws;6h#fXi!In>5Am#peW5IdXlhx=ihZi-Xp(NM4dU^2u>sVwkWuL)5nOqiJzwa(Z-x;V7@X=CE8CZnwn&h0>b|>{z3;*V$SRQIFHY5N*~Ng zYDkZ(&yB@&q8Br+jj{Ty@Q%Egk?ooNxzVil>?q7AiZdfB)5DrGLJ2ac&xkJ5MV9Hp z+BYPP!`sM-Y{9W+d(!xp#7ojn-SC!#ker<<=LXfUk2||z|KaT?%Z~0JzOe6Z&GC<8v%fGD7&1NTZCUKCrup-#l>)ysE#;!NxBeaZgkK>&Eu3!Ji(E4)V;-|3|QYb%87h7p z)4w+MJZ^2gUVi9N{SR-uYwvY6-|OhO)l&0vz(|&{h^-vzz2AQEU*`t!sd(62|9SWl zespj9`k%I3d}nC5+gbCdrS^GG^Zkwr>X64B6*oJ|9<T@;BIfzd~eS~lll4Z z$im3P;?%&>+{1Wk7w?6 zx9N+2IJqGqIo{QsGgh{TTb`E-b5`_dSmou#uoC+Vb zIc_Le;MASac%32`N#oNJ8_0&%F2(tFrKt=SCOvQ<`1|W42pOjTL$LYSx-eQsayjsA zb_^EKCnnT#c1t|v06Q`7gVDlRq6P-?BYEF&^rlBd+n_bx7j8BUQu?9-3ta5!3b50o zH4CA|4J&@-caj%v?mtentLPbp+uKDu+T&Wlv}*(Yl$Ho+Jm#s`3FgqFMM+V^fg%=p z5bjUDpfeyzW|VAcVni_094{bPMlAX4%6x%&fnb(qh+G>QSS+d3Vd+gtMB|8jaJC9|o+L-BKg9I(NQE&Lyj^MAC7B>F@aEZ`}4gp2~;hR8q&+#{Zar(>(*dnfv`SRpY( zS+*nL>aIlA+!n4U^H!MMtfe}bhB~$>dXgxkBD9Dxqj~UqMUVtG<(=`~U_re|X%`1; zJP_Eqw|d|(e+Sl z{Jq?%3s4y#u0(Xt2#gTqg8?4c^9oBwOKbs_yvz~yqCVi*K$K!EbXwI!v%)5dBGJ;{qDK(+Mm#B#1qxZP08a-73Jjw;$cu9D%AWoS6cp0lEdG1Y{Q<4078Z;&uXUTdW^eLq{~OqzoE$u?>kaSlvqr z{%r|zpQ=8;nDOy9Z-RqM23yCe()FrFWCj_5J(R5^M zh6)k~Q{#Jdi5+PP?U^xyc`?H}wYgAZ$cxbDM-Ok-amegS4XH^Ex`4%GZcJ}(j5(Wn zLD!laTbrY8%#I#FUzQu)lBGdkFt{yqYTO(Y*-xZd})|2dlHZxzDL|G6q{g>{T|m>v2|bM@yo%oAb~MrRdc21aW!8te!QbaE z|F>69|8npChr73@&BoI|?9GeQ=)631N~dIdN1cm9vJ)a@+YAdLq$_Pw?boI`Sn-*X z=LLl>)?fh&{rxHz-Z#f1M0f|J>DIWQ4pasbIhWZXhTIUmoFQgX7k~wP`X_{HK!Adb z1su955V+26$R!7Guz(o>!(!-}?8g)Z_>c6%&d(LbL=0(L;yqiF{GltsXeM+4E+BrX z_$$FK#JDZg-a!S69xPxh6`gU5`2wuRP)GYHM@NkbPpuwT(5VqXUf7-qmDV&li8n^qF-BkF?TJV}^Y zgJ8e`r&|La-e?N)Blrf&9k74~5lzwQbunWbqA3%45><7A|EEl}S%q3o7&%yyXV}Qu zlG&|Uf1Kj~V04Ol0hnN8mY3Yuk%2&5N|p#?wsf9C27+(hA)b*X=O4&ez}_wl>(*GQ ztZcyoWN18vj0Iv+Y$KegeQkLj@)DR^tP)Q}()}8%0DGlc=}c=#t_Z%t0biA_qBYy1 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

CM#Zk%c}5evRqoceKb9@gOF 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
Aw(;*b*8k(-;=gYw|1@O#rnUN4 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�G0T|j0%MX_C`<_TgMVP+M4}8! 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

rwx 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

ez~LT+kIR9ywLISHuzYM-Pyn8)9r2F?(6^l zz|apzr|zvyLR17U8CN{~@#Nf3r?-MdCPl%?1@wp>p56W69JTw`tNS0GTmI$v&Y#XM zKfJtj=i>G|XLdb0xANP$!w-)gy#4HR&#kStRhLOw1jx1Ivx53C3*+q|^5J$E5^}6u zh=p@hxtYKMlz1>A23rg)Fu`_+S%`=vs76thy6JRFP7dg2GKb8Eq#m&aSsIGY(-v%2 zWn{Fte9umGo+vY2s*PUit~`-aZ;zO!i!8Ir;BrlDwb{R~3O%C0@s`9|WAs3^e}9$l zAS#6l&r+FlrP6z(A&Pzx_+voEQl%fFQY_LVDuEiwwxirNUt*t6dJs}P;MWg_t&=_z zxPyfvH|Y^UTQphZm@aXQM2#p4P!9Asbz1_~;jq2eW9avp&=l(SJAnm_HdTv#y-j3O zfkJ4v>YEJm!H}y?r>Im)>$P%78hS12ev@oAqMz|A=G>w=2kTgwez%XmHzeKWOw(Jc|)?bH`UP@uBtNnqY|x`ClO@`mHAR5S7wpOky9z53nYbdlbCV^ zL^{kgb8}ei0zR`)DC22EmMBJmOZ09hS7|KdYw~cA6>7N(0d{qU67nU8fq+SIz2C;u zs0)cjg%ZX?$WklhOA4hLt_eH8hHnm9Vose$!VoDqGON-Ww8diHGAGof`dEE=U%-(H z*psbPdEZ#aY+wB-bg31|E@Z6LH}8bqb<9=fbT&2CZmkPcD>i1a{`eRjwr>#aKfXbh zD;VzIw{y=^61aK({=e}HH}E%LgqrE#!!wdUo@jjO%Fy%B6-Gyhbdlgd2aigao~{D{xKXZ1R8)5J2hIr^nC0Km!qQgaoGGqetdgk(|pYKnL2y{(rNez?78*b4)NE2)uzc8vM^pES6uZtrRoyGB67@ z8d87`nUs`KjHb}CU%Ac7pVqSh3eYyM1hnv{M%U;ZW(fkSV{!c|hKP%8$P`-+8~W7@ zB%gs60BZm)*$DCIxtIwl1!uzs*bG5P`Yasi$~`#hW4FikaM4D9 zu#&?6ZVgqvKV0+fc;&lP)u-Fq&@B33t_7t5=8!RRfTG~T`BrTEq#W4Z_0`e<7G8j& z0Ii{PMR0ow)j|LFhql}~G4(QA9~_-}bad{Q(=$Jv z*!tJ=TYot>_u%-{>^a4|)u z4xlu`^C$-hI+VCjDXcFK7zAwo+Y%T^Kq=swE%HxB-CIioNHL~R7YuqdxNa-+Q3?A{ z(1^o-Z_wBmw)RFGJyFMyQ#a~0jrdH!h%TqL-KB4J={kL;b&G0!r(K84w0aG{)gXiv zso$xD3GSR*e8JE)V{Cx$iGmhJL#|_|y5mpUw@fXCY7gc8LN_0GPlt zAe+D1Uk?@O=X{p*7$LfCX>&28nfbPXKs}u_D#;UY?-O=-`Y4lUNbaRKQdi2I1sO|GzHxP zB{Gs_d2|ckWEJRPKLHOT5Uw(+P@v*yA^OL3G6oR}Hs6zRbi6SCBi(BQDRL7D^uaRAhe^=7OFbg5wazV+?9wi=&c=tJ4L`zUY_hKDIaTV zpwK3Y2LTP^{mm0$jZOS`W?=!`MYE)v^M#w~wZ*ktr*<#T9kB4sxqtZ2^gk3xGdCNU zVl!W*EM&aC_~h=%8SUeLpg;a6?AbW8!{$LJ0C}5*T_1ZtOs-{l6y&4?4DeW(g%JcE z8j5fU!0$0ofQQ&)8Vury`2bG-xCa)H5CRMmLsyExA$-?5cL1b72Z>A+bm2vG93%DmM>zC}kk000M#QcCa|G`>N+=_p7)a zQZ{@uV1J`1$Wj)9O~^$f0jX#f5iG$ts0%{Of;f-Upp^FOWz!ZJ+CgOS*euvi#sn0{ z5>}+zAcg=L+@Oqc>WB3xpkXHnbSYsy6VibZ zei8%5B^E#c4*XY2OcxVIEFv8G$1|2E%j^&sT~3&uNjdQ(>Ih%~Cdx2QfF2Q004h>k zUuucG){#Ir2te>!ck!D&Niw?GNfkkY91-94Z0M2$cyf;$HWzT4mb!@;4u`v-qG zxaHoV;d_The>^_*^QqbUYm<+TP5pdw;m70DU(PN5dT#L{b&~q!EKp$f*YmqT7W{l} z?~i9!9-doyZ~<%Y{fkRKUf6l>{DIpS_Pu-N#86cgH{(wbpQ!Ud^)Vo9#%VvuD)6vr z7%;%z0t+mB0<2s%4xdnlK^ctd09fFL6&+M!e2y(I*T|X8;}1zG^>s_#atR~%RJo`qCs zw%9#e?1I1E8MyMY!)_?&uq*{`WP{=kAbpi#35osB*4|q*z86mW$$7}BLnh;um zdpHes+SHgRATtS8d5=vt;g(M${@pKK@CuhAvXz8tDXN_J3U;`8^A6sanKxwOjoHPE zR6u^Z$^w(1kG5B0SBIShcKE+NIsVfHpuq57oA3>L75s8> z=$8xQ4^H*nS#1K#@ZG_d&zH(?%@yCEDqiagz1r!1zS#<*V$i^X@iwpkBo0_PMP8OX zKTDdknF#n;tPq1mz1$LbtsRnv5Nzg91>o2ZAJR|8Q}1s{VgU;P1Z1?JF9aYU)xlr_ z^9KLKf?ER-f(0F(SL>XwHu|5c(p@dnTq!ai30QYTVrR$3Up;>L%d?m7?`wRqQk&ul z(VDN26*O?ftyX7Drqr@1PCA5Gl1p}^{Jbm>$LJB^3Oy&T>m)KM2Vg>tE9hJvV$m2Z zSjidKB2%GAy6ImO8IN1og>ki_%4%)2xw;(wE#By8xOzBP+2bmy)_FrhjfEu!xr{=< zr*t9Dz$8QqpN+H|CB+nD;tQ%yRt6IiP(h(k%9i+a&W>13t0!45cPiKQG1vr=nWJQi z`S}u=&{|s5Sr@M`3Dt1XHVb6DO)!GvDp*QPBk;31DwZ4;*qm%8Hh=8=pnJ_SR}}Su z$Rx}`iUJRz$WdDf2G1haBvq4aYfAMbeKkeSs;1K3s(4#bu-@w^ihgh$2lhUXWH(wSyt^~i`LJ5jFfupy z7PY+bIPy;UqBkFx>VVudd=4VTCHsaHZ7vPhu%*{3M zIK^Cg8DxAyeo`!K)2qiFdYDiwScLON(VRiJ%^+Ab@`>Y|R|PG@s#k&iA5PXQe#=g` zanvB(qGm3;Wsm|<=w1Q{$W%bF4Oum(Lb?kvGfX8e#x3U}hBOuc1;_|N8IoK{2>>j> zGf2M2GigvjjewPY5?4?Rm^y%J2o(Voq__eO$Xr2d^jcT(D{ZltJK`8Ec)h3OjXtWB z3>XZgU`zC7e;Fu)w};E$8LhlU)uJxIyaDP0%o}_-*N%r@?(8Kb!feYodj_xo1h{^; zG6W#N`f?9Ip%**<539ppE_DG5zF!&mAFu#*!B5AhQ4~BpKK|R;h2PF^e?*<00v0?v zGxwK^dw#pL{Og64pU&_9@%;ab1$WOKymM~nZ%>{2+bdUYoIBQ9UBk`UAbV^BydJUh z+h{bnFZg+MeSRidMn*aYSZE~nCO^*x*&68)VVVl_#!M#~fP4<*L%;=VZZ6tK$WF$4 zN63sLw+*rdWuvL6RA; z06J3G-61lw%Pj44C`R0}37=wH7(TjuA|;9`49L1rx_&y}`^!aO!65d3AO+w6#uLPf z=v?o;`|K8Am z8R#@GP#E@vy_%F!Mfff{_0k~pXEPVqz33$~(R)mLz zIXQXRS-HqO$j(Co5>CJx*zV?M=Wl+Dp0SCWnI+AF@hx4S#dI)vP8Q$A7UH05DB$P| zIYy4yCR7m12r;tBBv6UMiB3%A!#Ia0$rJ0iNTYEkT=A5@xG`4Iov5xhc>IMDVIgME zGO+8RiVzhF5N2u8#bH`k9WGMPx#+W_btTDTf<)lu@G%;INd|2Ayey(hlC#8em?x>d zVQVsK2nRKO=$W)EtyN?TXoG%DAZCt3<{T*x*TLK_6>O}GkYKd>vfikt0!BrxoqJnb z_aI;m0I_|?#lFtDQnQD#@ef&I>>EEEd4aI^Fm}<1X!>jil76pAjLB+dDq(uueW3GFN7>62vWTEm%X&0g8HZz7FNA9 zRP!pl*K4B?5IJ`&U4tnT@6UH`jFI~WH(TGPiHCISxc zKif76Yw+2&;oooS|LuleF8?q0jDF6VX!d-`M6hdwN#X1LVdesMM0bv?ynA@%-D69? zKCt59$u-}eS${8lV#9+|t8X7)`{2|Tu;9Vz?RQV_xP59n3!-n%?D*!~&d-kTe0b^D z{d2p&Jhl7I&5N&`KG0iTVVwIo%n%xNg6D7_z_73Z8B(buf(3ka zV@-e^5kRmep?wUvk)`+fZaV5pMTAPj}eT(5!-J;ltD8kIqkl1?-3( zoEv|1aRSOfOa$T#-#;@7cN|#_@tNDlC&(lP2>!UM@6+v_x7Jm@vbg-UiK^!p7M^RR zz>k?EdD3U0u8k52D%438$&^S4mZGM#B3apH()E~=r{IpC>kLH7Y+i#ers00L;`K#8 z84V&kqPG^6K^DB!9{>@4h5&$o18eZw0({H<>#f;iyOAdz%SwdF7#-n~qK$*=i1bW} zT%^}YRk}DT$!I=P(1>PLg8*Tp+hFIRopiYdU#QksR^u(HbmtdYoVmJGOROweDf|ya zU$CxH#VX7xuA0h$!G&8pD;t0S_EvBkki|$>HL+^;LLNhoRh2t&aTR?w0e?Vfv_!)lq5n=dmG0(st21Z`Wi~R>PuV8a_d?;)=n%v zP9!R^*`xC}tyr?BwW1|kqE-Jf2y|$iM)rWC>8XNpUf=Sb*{P{|5`$`7jHhAZ6{t zf7uc3=>G!?m<#?tv4EWty=5FWLcjqS!Rt?(BBnfMhiEYkdG5QWlwwHChsIqQC;OLLe@gQoytdwSu95Wp%km+iSOuJ1xr` z$A@lgbHTp6^xeMHZN&^WDtnl_6!KT0U9`90f(=G05cgnFAi37{fGG{a$X;6d~>4tjj_g8hwI*3(!qOPx%oLD z0y?5UZyx^r`hoYC&jTq?5PiJ5?@!Z=yY;<)oL=z9>G{704z>+`y?5k`9Sh+L zzyjuiFLsZD1z#Ny=kC!}_m8f=cYN752UmXk^xE&vPTxNfo(2-`p4f2jhm+ZZ(lv}-l^ja!Mv1TJq{xP?~hEV zBsB#efoaZ@bPn+lz+5ofQ6$NTo{Q0d9T8Z-;DCWJ5=+Nta2)V!4RfD#gq3PyXc-=k zE$n=KS=W(}*W___cLcXK1porh_GSSGNQTI*TOV?B z`7;PGBk%^wfG-J9XbHkB5LB_E%uRF=!XY??wKaL%{qPGYi^AOh?1ff`0^y)*84iS? zdv$3JGNa`s-idrCRPt15V5~4_QE@i(fp~>7C?eL#G3d(z3r2#zMTH(dBnf*_z)lDq ze8J+Ptg%4q@}Ol+Fm+R53dAuwA}j`5^HX-03CF=2uWnhkYI9NA$@Zz-7spFJTvtc! z3=1N#fVtq&%;dK-lMl~N+!suNI7|e0o?gT&Fu^yVEEQSRCkNOOeZFsiY|{@m2=@7f z@xmJmgO}%dPc=D!pD{;Li;)y<1yLYi0e{mxP$BLrP)aIP(gvNZLoc7z5q0>%f>#%^ z#w>jeEEuVLWvCdw0PdI>fuR5q5h!r8$IGT@)?C17P$a^v7YXYD=cV4f7rMO{n>^?1 zoinwrQzf4L#d#MNjl8&f+np=dzd5sQS9w9JrL@@Y2-yPp=>_Wer)yLut=gbf8C7ads!A;a{$mA{@S9}mO^&cG&71D1^_BXQ zZMk}@MXH4qFem9*gkr(q&!m>d%H!sM1z6pZrO94LF(q$=joh2(dQy-^dG)PyP>+)J^X~XeUXX{;7rPY_}aqF|P)EVIl zPf4+}gvp`1evI<8mdbv{gzEgdN?${3)8hX58z<(k&Q0-F<9Lgh|C30Hb0Ta@CEFMTyizR4(@~)pc?xan;)=%wGaPgN9F=10_Fk`ff<3h zKxCE9?ub|uu{Db9hF!k2L$RLQaM@ zX=O;zVIqbV0Ioz-$<&KuV`1v%nM+BeF{Q`G|{7iJw!U(@;TGAWy2$ z>gPKhV_D{lD7u4&Q#~mRC-wg zK^KQlmf3Kf9nMd~BfxFXlJi29`(!YaF9Qt#0qDR3KbQRMlYb7Ee`HMHLt!zSMS;jf zz~{v{&=h#FvjiZx(UgC!-hZP#@41dV^xGo&tFM^K5Guxb!5b*hTrrLP($(nv4G+o*GhYkIoZs`5(+IfH2 z*!Snn{hx1L@YSx!fFR)D>-~$77~w&KK4vbse{}i%W9x1o2|s#z)1xz6msV3}CbJeAtYyhm=)Y?n1VB70&24K=t72;C9OYDI!0F_zH)a{*XT zkgP*14YG%kA!BZ4AUrwH{`_#=Q^m=LYVF%X4z@Zhh>z>a8lYe{5Tw68M=iM*pZ ze|vKQQviD*2m(Z>5lzvaSsNN^A|L=WG7%LZ0)o<2m2R+r@8seK3t$$Im_jZrFAcj` z7~wTrRpAq^<3i`!axVoq_|9O8Nh!kKFjbZ}S>hilc5%i^J)^}rBS88ZT34F6u_S$4Y1(w2dRM7&TT#m9Lc^wj3YFhHJlz{UZB($aS2~(%DLR+W;8%b^n72zO9RE21zsEszCT$l?Djln3U>tylf)aNHiiF zrAjV)9RZ2Ds02c+;lenYIdPPpnWQROZ8&LsKMseuSSW3NLAol{k3_XO-Iebq0XhX{)Y58ZEHna zYwJXR&0v|k+#okd=Sq_1O8Glm(oo;$wtc$&;CnN#PLz~p#mURFp+sb+Cso?V{`cd% z&L3XAHJhNnU;G!NoN^e2F%l@XI;Cf!Gu=9Z2QO1wxj{gNZ4*BAlYL z#XpI03@kuY2o_Z96hmg^NUC(um?W@3tC*Lp%ERXn6O$fGu}u;aMVc%oPb#HYw^*%f zOt(zt1(xPImS$?F-N`)TPdijp9rIp9k(Ro*mN*w@>4&VzQ%=LKV*80o=d9|7py`|= z1d@?MjhmQHajT;R0t=7>JzZ>tGC)Lxj~GPYdIt;m@xIa^cw``e4}YErm;%5Bkwj6S z%Wra{wGbe9p|$9GL*Qm}!AspivRWcW9y+34U0Ctva5ZoMaR7b%@<6yM^6rh{dJfd` zJChx66H&Lc`?qWQx%@v~)AR1qwvX3!vr1xp1Q2k*g%4NuaQKGbuIc`GRo5qLBB$ez zn|i<4Ht?tEzOVLr0%G5LH_cDkF5+kU{8DTzRpti|9p}tik&S`!)$~C-186w z?0hhaZL6i>%(0bBqMBSWAn>JHKXU;dM?z z72b_3jLN+r!p7=+en;|&=)GB5;m2YCSuj@SA1!cBmgY>9c%~}zhKgLU$qNdy2Z8{B ztH+bcTrgRj3l@+}O3vx9&q4^@rc&$9O54uzwC%yB9gp!mU#m4DC%4Wae zV3qw!xIgdR)m4Al-$l$EHTHkIu;hn}OS$|XU04iXAh2L23_5@XKkbOljl&&$eSCpv zxIfzW`GNjF@9FtmsJ!}V`3uKr+gJqBdx19U`GT{0ISCAu|1 zdR+lkmteuWBW275uk?%Z1F+x*;dDKjSK2&h${feM)`LFJYs-fIaQx)`mtMX#R=+jF z(r%NjsSJ(z%4Rkm_+Vpoty0aygjya>WCf&rl8aUiA{d^CXW?&%N}%1yCf8(2RUBIH z#D{u4T{QwDD7lyET#6J@E!>J!lTyiY30DFhG!+sac}iZYv%uiYk((S6Jw_}_jydFQ zkgsJ=kk1w&C$ZO|HOH8!5TVsZMgX=wab)X=3_OMt#sOV|LiQwLCiN_DokY$NmSm$u z2Rj_})Ry>L%d9n}S=ICt$YYg>QIeD-y(UhzqOu1OtTa`Ar1AJ$$)Xa3XUYlUC z8~oMzE!71L0b4<~!C}*ySx<%261Cp6oP0+)SWpw}>#P}SubkIX+SuMSRAw)zu$S~T zOaLL-Ns{fla|tWJf*qgCr; z6)92wxudrC($Q;`X{pA?A5+O?6jSQ|WsXvs@ZYfj#|eA^8dEk$xhj2aYBCA)?0rSz z#BAsU+h4FCa@%7=01IG{nG3)IT5wn~i7<-USZZUl%P4!>0M|7#ycZ#6uazPOA z3)l#;BjTHR!#77Jg~%^tB6zN&2si*B_~p+u_?ZY^Y%O}Vv-EnaA2_(#S%9gNycYx; z0Kv-(%3dF=ePgKZwT0oDm*tiKiRdUvYrH_N)v6rn77cUjB( z%esEIcK+|zE#URj^#dTqZuj%}3Q{SIA_I|pq1L6Qp zDOm93zKL%REQthD+&i`!?wB3X?L({Jj_)2{_f`0yfCSnM?w{Pwg6P|GV8N!_XV!mx zX49Q>yY62+aQE7=+n0C47d$w<`|Gm@Kc6}N)%gQ|JAL4b=dbMxPh@Kq?0NFF$vKH~ z^W11S9Y#SICWrv?PO_zmG@OA2@WpOrB7#N{V9KPROrqolKLS4o;dIsmQL*)wv`eGi z*ZND2RhbXe*|$_@ZEf&J)TH}5OLn&vZLaeoDBaspyt&4`t2w}j({(;}L_6EdcXozY z`0Q=T-(2O|)#%51AQDR(@|g>O16~CX)Og7zq5_A#kYEPNJWL9FerZYAL9#V-!G_vG zfB;)EK)~jR>YMQ**UH+$@lx+Ve)d#N5vdfQL%7V#Trgbh>C1P{54t&MN(m=IQ_5T* zVk`WaV*%SJdJpyS@8e`(RsRRM(&R~RR+4v88=KWz; z=kK=7dvA5a&C%ecUjNCu^qqy8wLaxym%7cESRju@!JDJhQZY>)6lq_T8fB9~*PvI` zs3i4TdH7@tg5V-f+15VFw@%AP7K# z_a{QH&o2;mv-zUu?2S&}h0dI7?YYl2WnC>d9r5Z9)s_5d^RBJ zBpn9xPc|)kZCO#JCP5edm~L)(j*1*of*&MunKX_c3c{wL3;+lo-I4k*Bbeg3G^j3? z@>FlrCfigRhf?EKlXaKuRgx8+o~6{wqj`9bF{_jrQdX5}3M`2#nsq3MggO=1lvIJV zhb<1~0<%o*N5cV$k51b6X%)vc|{x!?fYbBqhlNz-w6qm1+_fnzhTb4Wkwr zk)hLB`sHTnxJB8bmFMsWM~a%1M6nIAMKqjMYqj+%DTe=UN5-mv7t`@mMV5ns*a&#=Kabt?Y=!lFW!AY0*O}7n^A(;; zHQtN#u2%YET8(kR|oRP)AgEu`|h6HRXp zhTa{oe-A0qSOY)+Q}EW(_M5{sAFP^(xaj?rc+lE;eRFZshpW4Pw_*N!OPl|^W#G5# zy5S2xTHX1{+IhcQ-^2NO&-h<<4D_uV`H)T7IX@6H@}c;)!lGl%b7 zI`-xH!*{Qo{OszP$;OcWiC?2m$yMPPBi|;PNI}|39V#Iu;@>f|o?k(wr2+{9@%32G z2&Q8?a5CTV0}&G+<_FRoBOePmUtHXNVPWmwko|B~#{XfN;c05 zkfv+HVx7bnm=?f^_4P%fKeHkSn?G6Z7Z<)iYuM);3S=`E z^yQOqnmtmGi@sqZUg_K)a_kMJoUBeiUST*HNhG^yd1t(J$nDCQqv9?nmWzKok3akHMpkqBBR4rcFlkYF1hBAV4J( zdrHSB_7^PeW~Se@RY5R!UBeDR)535=x8DT2NiwPE`U2iy5*a ze)rb01vSBein5-jiVkmz({ITuDea(gxvh3VOJQA3qNc>`2<8^m`U~o5j?$|gbJdf> zyN?`wrN68y=0E)hLz31QEtmb%W6zv?;jJSVtL2XyqW@W~R{md6VZ$6a`3M#W?w2t^ z7SE%798f?UsxfgcyL=kakbL7TWz-i?kPxM1O&=G7pA6D~QGij3zZcY7%oD7aM4*u< zH5Qq6?28#p5Uv3!Y>D{f?3aFO!!g8$Xq*m9f<(UNIRnC0wrZTnf2`&zQwhL+(tAU--;wbFbF> zo@wwt+vvO2?0v4)4;uUo1zh|ubQjZW`SOB_FmM1CaQGNP`L#j9D5`)00O7sSI&c6q zcx$x&?a3y#LFkEI8moV6aTAW@cbBw+4b8@W$`2X#efHo{v^{ zad`9REjW_d#5(tIlbw- z^K6MWkX*-y56|!Tc4p^;bK4)B+X)ohJ-06c1&^LNdHdqgdsj~I`o)?3_ikRmg4W=2 zASR{VKx_z=B-{{48;f8V)(HtPjAbs#UQ&|DB`%pHTM|z|sW+^YLmV^f8KUE8F35 z2Jp#@4+K_Bp*F3|MME@PkcGDZC>YCg59hlF3*G%hQ@Ar1=AW>dZEkx!Rortcec@A`SA4czdp14 z(Zyx|cy8U_uC2LuZtS}Y<9ANRhCqk1qT;{T9o=c@-=dV;!tR8s;&5)C> zB#Ld!iK5G$qh?@HG2{B6Hxr!Bgt5|uuI=#YQovlq{e&DwtT!KFYv31yrVT98)R*%_VU@b1pETzm? z^2=D77ML9X0;UOO3RI@}5oYNFFM$_mSTofov)ZbcScuQAFYbmSC@07+tabnuzVv*8 zRD0@&dm9HkE9bS9w1omy&B4yPlKC~2eZ8&2Rj!IWYk7IaKx55<;eplj8y48(RoegZ zE4NxdTpVmligV0)T>h)X@v6bwzx)39`t9^h@%*oSG7kLQJi7VIcRpR|PBqN=1#wO2 zQT0&*^MnE@I#%e2M2SzlP?|=-z?>w)=v)#7f5WCEskpS0B)WuIX%>C-LLe%@fbvnm zAcf3oi7XOEO>8xu0!SQ}P74^Y*9Q#5!hmm!i6zm9y%R?)nn*vEB;YVBNDk{<32`1t z0-hI4ZdA(-nYAJ-&X=|=&oZ5zvc{%_6drb@)g)`PXYqq81_QE9BCXPC8?;LDf?KWT zNq6?7S-07rO0vXShkmIoC2TXSc3BRVkscAa)?CP3fL!!g&?TM16~DjFdIV$7(Ck;c)qRZ zxt6@En2zh+;K2)>1j|ul>>4QS8RwURe6yUflApH`d=Kg9uN- z$@$;TEO~Hl5+vZTHTve{&{xM70tT27I3I3l{$O*{+p9w_O$M*@xQ~Yn1Q5+POIuUr zcyIzTDRyH~7ATLWQIpo3YK^=jMbl}})@o#gdX*%r!dKh#M1s0dH4sT%f_#)U5qlvH z;{ew_pultx0Rpx|?1=b~p@8Xt!b`SE?1*0K%zdph_j-rGf^#)ia!U6VS&wygoEcfM zwJmR<&D?A)=rvhOH7dO}88XQk_c$>U3<8?Ou!M>lcwvJ=spjcB@u!<#Jjo|WlF`a@ z+t2z7WC`&+w)5UV=4O)62q6|l$0CV|Gb&ZiM1@(Qpje%91GoTjE5{{(3mkStis*RA zTbteS6MV^4t)kvBK*h> zt&Lty>f(_u(RK{ukfCw4hZfWnwBj~y2&DLpF{y#{qL8n-BhYl+7+}#OGbjh>6+3Wb(}XYDr#+8e%+F zo){-(Fd*F_Nel*tggFqqIdXb{67Yr5HACbW7B%4xm^BfTU&$^D1a3JG1m>mqb{DFga#_C{~Umps+IZ`KLOBc7kH%k`3JtZ_n zj0C&^3m6GF!lAspjq}0E4#op+eqJLgQ?^5#zwR9Q%dRm0jLgyoQ}>Q6V?D&S2rKfP zBg-j3yLVzONv8MXSaa`k1ien4j2p`TsZKiIZMYv}xLu`0>&24>SCYlGAG!Q7l&uT70R@CZObG0DHig^~EQm10 zzyY6xS&oF%@u<%m=;p|%AfEa82Rr}?ctuwl0RwPiRarJbz=ueS7z4lp?8blxSio!m zuYeg@phHz)vcxqJ6f&XNlRFX2!FoL3=jhF`juhA@@;noH_90)|fGd62Wt{Y<(vCo9 z0cxw=!Q}mAVZ&3UDF-XlcNH7ApQX{OH2chv(su>A4?6O7zW%L9|0(9h(mj{PiG3!_6OUZn(9! z>gDmGOI@ymWht1;y3MMPMqZ>+7OK?+DpfF6nMC=TUzu2t6pwzWBTd_3REJcFMT+>K zUOq+D9^y6*qEdvU!dJGa?Bk_%5io!lU;yAXvLxcoyJKQ)1Q;+Rup#;x3|^hb5550# zOAcD1zq)Gkv8kSUdRezK(3|N-Q>K?E@NH?N-McnX&YzM$1dx@Y(3&(3`Z?XH&Va>ZRTygn6&_QzDq1a{lSqX! zlB29-8w_!}%$TLKT9Qn5g8|l}z!@+lnNt$ebIgTA4+R_*#o>%%dy+F~D{n2C$IfX% z{esrQnrc^3k<(jbD=PCf;yPQSAs-0?SnHnFSp4U9uQ8lkV%e%I+46$T$ z!Y|We=gQ~CN*<3Jau?ov{lh~`S9hqivA=vm5*yW0-v8}yes?uI*se%;;$Qwn6&Iz7 zo&#SzyIYG3N5DWPnh;2~#(11UXH{e{;P!?v;O=EhBvk#e^d1X5Kx_&Ua|pfue}e&p zfkUMvO^$~{@PPMV0lyVc!9)Qe4Q!By&sRyg3~0k@w9XV^k!VSxM4veY&X^LKbvDf= zmwwu3Ty4`%n3b>ytwv2i8i!gvVx42QfCH;i$#K1g(o*|u_P%805?9Ky4DDoU5|*>4 zid+W^vX1!DPvoXvF0wKhKm@b;fiO5)VvmFl9m}_!3YS_=m1I(1$%^P~nM-t+RbV!- z0|VsKafCcbEQ)54pdLoS4Wn?OMjRUKuhd~k$a$tNM~n*pz9nK&^h{$8Y{88-Muh@_ z1ymRO4{(6rfTaNB}74Y0ITnDrFzmSuXMpWhF4fi~Ukw9pS>hi<rwb`FVY>XNIgWNf1PcAmE~}Q>qx!%P>q@Fy|W$emnX|U+BDVt*MmKGPAmWn zzQ3^KyGtwoc5U6GE359F9T#$e08Yzv;D-__56N& z(1bGbDfxER0YTF&OYwK_m~A z{JbQ((eA#{;aYWr&q4=f+_hV_QT59f!R=3Lz#0c1C=jo0xnxSF*vXP!W_Pi<-ke z2ag#HK@yf~saz(HSNu5lM|oJP6((URcN}8@za9@T$)R3L9+d;ZjPe4D7ilFM5u~gx zqur)6W@v%=`q zrXe2kr)5`qD(#wVqg<;DM>Df%Z5nHCnsAc zYw{Vrcn%1qXs_%ma+X6i2U6YjxuvD9KtW~!s-?m}Q(J9+b6#6jpbPt1cjt;78%_-` z*wEHEJXYVcGCyz3tnV=?q;sFt%!x__#{QT8HN0p3;!m%=j$kVd!O)YBR}^&Kd*jxt zd)9Z#_z{;c+~@C%_o+5RUfG935q( z@FrTUiiDh$o*`07g`70ue_Rp)1ZHVifB`!KRz$3giJ)Uk1Z4mLA$$pp6ftygB36yf z(WuErC2t5g$c&4sGw2tjr!3A)-s&}P%TA^(b)84Q%Bq=6Q;cQmTl7iLU~U>Op)f=$ zYFx2KU8Pl&rE04(E%R)SHnnV_C22#JadX(6exxktSeg5P-*PNJbEYioMq}Qo5*zF> ztDlnz}s_{c$?H z5O{zuU~lw?P4h)S-L^pn11!j7RD8XE>FtBd@gF}pwgwm4!{b6*^yuVTqA0+Eho`1z z;b1dxfX4LR(_8<3_0Yrfd%nAL@Y@Uf|Mu*0DCBRio&XDec>eVF*G}G>IehQx$!}l2 zvaX}1-f2mD;#b(rGQ#{zVx=bvOeNgH3>@CX)Z9N`B!N{LsUWWx|THwtx_GchJt zB|kCTa%Hdr;mx5Y-_~IISdN*Soa>!e?thqI4xqqi_VON9coq>NL^AK05a0(QcmX1W z`PPUEl__C+YbhfEYap=+szE0t1_Mq+XT(=o4>1pb1l#XUrUwX?1hXK3H`MYA z^J&RkQI?D36n`>p2k1%{6$$o$l7lhADZGy1!p!lYb6FsJiI41wv3-r=D!FJ-aaf%@s8tZ*D~x^x1(ftOftLvg+^8 ztbKHO^}U&;_s%YUcy9b#s?5$Vjx345g4@Ry-abOt{rs;F^!#C8?`QkweY&;bgSBPv zED2ui&OT9>xy7qoWYIKeRq^@pQ3yy2G}`bA2v^cKTTPQKO)Kvc3#&vu9`}$1E!JNG5yuu-?4%#muGq6yQ{rW!`pZHIS zzkd9mB(ZZz7@{)(J*lviDP^)GqDvE{q}?zZNQ8z+6CI~y_n#<1Sj2`rU`TVNq!<-) zHakLy6dfBEAEl8dNM&Lzq*E!GF?gehj^<()p{G~{6eiriRsNPhYA|TcH{l#3l_N=y zAIxb;&oa=2qeM{z{{X|FOH9;EB}zaPolHfKrQhU5PnyJ^kL?k0Ni3kE6H=6^{;YsS znP!$4TpDX2HK*2FZDSWDp|CSS8>gYo#+&Z5B&8F4Vbi3gDl?37bB5BIrF9i#27MX9 z;+#5*b~Yzc?&ZFjs732!oHG1OF^Nty11aVvtgjMxT7xEQ_~n; zIkA6w>5=|_zzH>3v~m`uXeu)@da_(?dexv!x5JaZB`bNK-^_W+XM!2v<`+F=vsi$V2rQtN z_*_-axk}HeVywmNk8D5y8zS~Z5iGb=n|(Swn@d51!R(3%(g3bN%m!Cx2Ls;!gbg)r zkl<>CGqNOcW8~#A|NP9}|MS+16)Ex( zgHnJ2TR>E$vr_^8zTk$im1iiVW*J(9=(m3z1Zo#(Bb0sYH#35pXYQ7 zAw-@l3j*)1X?SN{9eba@9PK5F=!c8T|MBd)@2;%5KePP)xsIs_7~DOB1zF$$(R2(3 zcaII;1rMI;{_}zP_{;!<_m&sEKIWTg$v9SH+2YfTnH6J>)HNkT0RVn4E^RbDCb<^f5O@Gr%>TSJD!L#Y zLLd(;Ns()ayuhJ=Cz@aEb9thFF_-Y6w0KjEyCy9*)unSJN2yrUFo)!rJ%#onPL|H@ zO0lKM^z4I*vP0gqf+A~~KdsQ8SsZYNbaML?f+ehDj#RhbSsL_&sseR&fjV5tHl@j* z8fdMU-_X6iP-B3-X+%{j~bsQ|sI#!)?tiXJ%Fq3GaLq!=Fj)|f}RSFiI4wq#_1_L%k zr%RkCgEl@yRSIlGq(orB>=8hKs`Pqe?p3M`>RlHa-Ip6ZyuViCx?br71%$DniSP+O zSnzC9?oUgimOQZF23^O^fuBbM-~bLeqAUtC6|f{?J@j06kfyWOhpXP1sE0Q|ZUmX| z_M-ZCM;hP2c`#Ck=JeL$79>W$MQS=Kv_>B<@A|{WL0o9RT{}PGONMHW1XMsHLnFW* ze6)5R{$oN+p$bHH9hJztC%)J{$#eh&{MWPL>3av4JvhAL`_r2N1FdKm<`0>7;?>z#ZR}_0z6tg+Xg-M>Q5KQtoyP;yw(h}cj(6Kn*jfrKd$hxE;Yjwc7%5Pfgx2z## zm7Mfi=kZ3zGrd02;x2YLugr7b94>fey!7gVz%vW;-&$Gw?)s_vzZ{wWk7t+6W|S`e z+toEcJhP730P27x(GN2dV8ORDQydtB`zIDXJhABhk%iyv@A=D-!7mT>|7mCAt!4SI zF3LIEn0~y*y0gGIZcH3XSJbEys0T!{4HnetG|d`iSBj$7sP0cw_ZXAfb&@8vv|gjA z*Qus1xB4kDxY1qs62j7AsNVtu~1dFR+-{=$cH3`1odo4PuE zvL}d~IJT_3$r~WBQu^bs!rVvPMS?3PxH>9M5yftYM|~Cg($S?cyyXZC!&!-T`NJlirS7kEB2T8e)I_xYd}tdUSEUw|H@L zpC==&P?tW^K6rl3>YGPT1e4T-PAAPH;;)?S>X;a2usE3_0X$5e8%?(Wt=OXV2F(Yy zjHpxq*do1EbVd=T^neN!C@h^f&f&GtYC5ja*C%%NyC@U$^Z%8JHg4Poj z`w@d0{Bd$L?rWq*_x{Ul4Gj6`BoV@aLzYSej&l4gUh$7&j~8J60N2l72AQFr7RkCr-*mu90F z!bxzxIu{6FS#%`N%uUaeKSVOVG7h)?`7rX)V%xb=2M3ecOt}-i=;@#p4*^Uv=VEoP zun|<{U_N`Mxd8L=p`>+3_+Vox;D#KPz|iyPlt z+<0rM={I4qD&nvt`gFs>50KJnU!H%8 zgP7Ir`x8u}9a={@bh1{Poq04M~zJdx}=)W+nZ;X3E@RAn+}q9o#3Auasm+Djr49ms3QtEeg9Qs3TGO5*8~V*Bzkr;wNe5>#Ar^J76?T|>`u zF31u21po=n$Vg|KR-0_fuZ zdTr&uKD*){&n*AP)g_N+APmOnv;h%NoZdS*D9X)_58OXG|L);F90{LpZ~f!8#y7{k zuPn&A(d{@{Z{1mLou8W6o~94c7ORmpCM!8DMooiW!JGL;#R9XoQ5)ZqrmWV>p%7?} zVx1Je)>U}DD?gH5P3#2WL)`F!7#Iz`3l@x50|Y$t3pk+elHTLts<%d}`8;2JZ%pt9 zu*k3U=e^XId%e|tts&=fb=HMY`my5V9l6N|gE?o1hjy3PHq`emt8UDXjw@7}FO0OV zw8{Vi%&WTia2$6kjwP-zaj`_jBF7P)1H_>iVUtLzPLM~%QC!Ua*`rT!>h%=bqX89d z#tH0fSn2#kHgkXT8MHnE4%ih*Z5MAGYQEOkYRs;+Fb>&f3lzcWI8^=dx7<3tOv#E&ZKq``Xt{ z4eeYvxv{gTq%GIoYO^<`+6yz?l3&eXB}T%;+{gYoQ%fTo>H7J3d-}n1XTP~};@-8> zzdOFG&1vb%bK@stytF6487Jf_l|oOdQesF43-}~MCc0pr6&NGK)|jZVa`(Qj(5arv znfV3B+XKsdnHwuz>nr_R>kHZQ>~3TE6WG@1WB)@s5kRmh#8QacJ^&m!8JAFiqWbYttSWi_9yZ+d5G)wF;qsF2FHSx@H~QU$2@oN&DSAMs*@=aBkMw_Yp!@6n^S<8K zf&S>$ijvnxJTDJqKhtU7;#aQEPwh)h>`2o$=#pyHQjEo@^SaC_*ozzWiiMVx`DVT( zfhi!Ss9u-UmZI)5>V&EkEV$V#p7xmwgsPO$faJNcN{D1$#qwuSDX*N@V2j6p0s@k) znIJG6Fcd_v;Ds(9bHSx*+r=vLsS4Bf9Q}HG%G1q_y9@nOP2DH@D~6Meo?oS$Y0g<> z(8fRZnAq_oghiF2Z<;5 z1V#X{yq_&P5H^L`!)ga30}uEJ=fMJfbi7%r&rWf=()>m4nwI=}DkoDC)L;Psr1{@? zI8hQb{bTx%N-Y3_mPQy7gpySv6Eua4a!vj?8OoFlxdD$CfpR1cDd+qs{V_Idgfz%3 zGRCKpMwgNx)h8-bWO|1-vn;!;GCKrHWNEXoxY1!yme-h*nOEkkC5A5OtS)uemAOJr zofEw&`zL#{gPHdgg_@%i5c37qz#q z9b2@su`pcU>h(A0cth4KTBR9SR8cJPX{m|j|CMyPraU{pFVwcMrPY$4o9GyMZrk>g zYgcdX=qk5mCH?w8@pngv6VM@%#wE!G7|>b9)sLnpAeE6dO4vDIU{%UUhOj5bis;u_ ze?eq0fF#iV7&pbgB2ir|lhdXhnGB$a+5O~b6~q#83q;TW91!G#u%n4a1PsaOP5Cx1 z2YMW$knL$e}7wKb5j-jg(xJu3|2(bVcBS=>ag{J0npQm2Y>#ccWL}(+fj@4{XBn5ZmLD_);WEC+LfCoSXJ0o}k zHbejbsKA`SU;r@Onrw)G0kgq-lg)2WHi_FmysB3)$SdbDC2+t500BPXw`+QF8sItx z4L;p8K<5p0n4j$&XFfnsL{Q!ASpiFM_xO4akwhTF&tP!x%+5QfcilU?7chwU3z!NR z5|9yb0E2%#f9}r3o8flU;$eMOkag?b9^{d)i8Q z*5B2dzq6Gh8$ly)s`ee|EThN_FaQdKzNcD)Y?AnphD)@g zkONEx%Zr`Z2e#A)*Htn!zOaI%=^?(7vbesqn zfCqp9?gM6nyT=EAFr))y*TJPQ=f9W(XusPzcR6-p@U2m!~e5EY_8Xzl;_|1R< zh66YOm;nxs0`P&)h$QQOKfnUt#t~l{3^Ex22ru@!U+&3!p)K%CJ$uuPnOX~KqK#R` zZmW6BU;Fi2hkvuSw4Wf`xFkpP;|Pkl=!K}Cd^#4_Nr`cKqJ?I?1nh*wQ~xZd$t5gS z85HQMbi_{}WYM@qD?B#5L4( z){oYDO7hGuvP#8@2*GL?K2)Z`8^#>L0*XbEY>tRTMMRnun;?yfRmA=}MV_d}9x2sv zMVDq5d(+(6$#(RmiBC#0)FjRMwK0$kiODjhfzkqrktcfup?J(PRaOem^zlaeY>ETb z9&2HBVQaa!F_hcbSkO}GD)$>b;p9ZUDJhLDk;mv`ILNc)V@k-&@V5B-2HHkjYFkTv z6```;_IWG1TgIyG#kJM*n_HGFTDWC=-lS+aHl}(~3;~P9pW&ud0VgomBsO4wx{VBs zp6Yp>^$puc)^}HQo!GGP^75r!cAHs=BP^bRWT7XG4M!s)QUG~8!pFvEt5o^P8U)E) z*O8|;cx3v`k$OP+;^^b52Mi*+e^7_qYH_#o)KAP)Yy#dhENUnU2^-=U^4~pUL4-PH zdJt;TSb#tjXCfm4Z=jA{Vam}HKLw=pgIJl9EO3r;p6M>FdUrR_~^{$hi8P2 z2!jE1G5o;8nf+oQm=Pfqj0G%;9$Y%id3gEA-<~`3=(;!$ z*V@K3Z9%f4I9cb^C<(2jbdQ1xeiTv&yNZrsETH@#9S>sET-He8QnemA=eFwnQypa& z`twis6ksq|TWO=cfP7MN=ytUD_I9!XLQqr)hkUrZl4$@A0rr3c7ED*=fDP02sELIA zY)74cpCB1Tj1gEs3mOX{GKqwhpxQs(5aiBhB?K$5t~Ri-AzXmFV6xDGh?GtPa;ukC z=8BRt+RmT|ipenb(sM&2G7UFqM=_pFg}kFB?!kZ!FqkZIP375{3?f*tw$QY#(t4o5 zeWE>ZtXNTE5=f!`}bXtCly0Ry%~w~x-heW;hQ;PYLrpHA1jv#j|2mF3TN z+s`&zP%EwSz_}%j*pr)66!lsucRsJR>cn=FCi1>UEw55anHBhCr%5$vO<811=}VP| zug@!jE_l8NQCl&7Gp>D}_u-1)2Mb2ah$Ur85c{E7AfVnrDzIG!+uLrn+N$SBY>CSBXl zfMUSSmh>cTIdR0@k&~o|L)aQc5)S~8t}-g46!^-D?0Lmm1zG7CNl{8mk|Ss@WrxIe zMnFq~f~WdSrG>sU(nt%P#aP@jRW{|5s*0ipGOzvi(txeJ$X;2JRbJ<-DKz`VmdK*c za2h;0seVWUIuO#NspOben=2QzjkeEQ)YiOkxOe4H?~2CC9%>N&Z?fJyy6yYg^8N44 zT65>Vc}Z+Z>;)YJ8$hCv00Dvx1OXE4y%(`}ik%Qib*lH?3)Opf?{?yn*l~#+$B83b z%_?@vy}5JezRwp(Ja=Z+`Ud$CBqiFG&iTbS3{x7b_fEb(ZylK=0& z$s;9JZE|XyUM%tl1z_rFRmYRD)=<27W^}5juyaN4@{eD6_1eV95@%MjT9O*0W~L+d zNr7Xq7#OsqusH;p2KaDuZcje7!OxCo&ia!BiWVu}4a(W8-^LlE^|MNPIRm zaf98s-(}d9rKKZ){pA1zN8I|OxrQT7BUs>X4gNPQ5M~lZRw_SO04`AcMg1?epD#3D zD6+6bO11YX2*gz%qTo`MKmp1-cYd${(%@=k+Ks9Vrlc=4IeDc;evwg7V>YjR_+qmg z>KIU9ZuD{+a(#6BMIgd!-Gvl>fdzQiz0e9s2v5^jy9xwjJW?%02Yn^L0k3>0uwbgz2DvB+}q;XUYALoXEH=T z02Ul*Edm7~3V;J%#dD);S96}&IIYZLN`xS7eMS13veeBDxpimFqGx5i5QlcJZHW4d%Q@Abtl=mM|+_L$HD%07$%Sn$iy!gojVe=&?SvH*(M zhXqBiFQHi|;=Jn=p4&T*zO zFDJR!W2?wD7tlL+QgXfV5`6RYDY16?0*BtkkVr3OYu1vVm|I=m-qJQU+O>RD&$_Y2 zvyC-7WPaeI3hNikgxF#keJue+{8>hryB^AD$b~->SP+Kd80&Bx`RK4h1Qxhd(eQlOODY%ql)tR( z0;Z{DWwBBAkY||B!5B00{|6QX;ZdX{JJq)_N|8tF0TwVX!iX65SQyg?`y$~{L_>jf z2!}7whu~Np!DqP>SS4ZU-iVNVX+)h`=`}@9CK6g7y~dwdoNe%$HC-`b6G`f+Wc8#` z39DQ!S?G!g1Pl1@#SJrCp{&;>G9#idXiZS8$V^&i)9~kbwK6E_ajJ^z8QCvok z=NeDsnvc4S$8(eZj~S6y*h!S6`q^VYOTaVlT*REZI0gBD9}6y*r~0QrsLWst=mNOv z^QKr4qR!W3T`aX+MVVY`xm<3&RhJ1O_&78xU%+B1h(MbFpTMhMVelg5zb*HrHg7IZ zFSA3`UC4Q*!{f&SAb@EReSsel7!tj`qzsD+-~hiO-^{2UICy8Q9?K#kFh5w)@#*>j zf{>~I#Gdg?Sn>y}dOlu1^y~HgA8!&^@SAN*zT7+U&Hm+g53jF5Lhtg#Dp|` zOR?=_gX{F-blBtdMGgiyo5~$f#5)_DV8Nc|?41n`9IN30wp2N23V;bffjuK$d51&J z4X&nO!RGP|S_33$c$$db%ZUQ}Olg(~wkaV$IcqA{hVYomj{^lJbbT%}?nJ`{WL^qeQjv4-GI^cGS*KyO z%doY`bfiA@YM=9^@%;B!RDZdx^_#sNU+-?dv%CJAJq_RPZGLc|e{~pzI?zW-f&O z04#WSypZ$$I7Su4tdzbzPyi6T*6n_&EA{0L#|vb&H6pi3m@kSwQfSt6iwJ)9pO{Hd^<_cc0H|Qr61l)L3nH;byvsEeLy9mN>;VqaxK1#g zzzdYCx43=#1jS$h(}}3a5DKtwpd_|`m<|cLAUuNp0xcCKj_W)+U}|ET!ChN4SW`M$ zoMgr7G(jq*^x@nb=?w@ay>h%~(iR=d)s`6ti8}NJEQbOIOsv>}#0e?v83fXD1#l25 ziwTi95=}V-2mGG*@lSr~K!V+gkRhDN)TbyWAnZX70 zZn-IC*`~r&ZB}x0N_Mi-YtvdG73d4V0$KwyFj;Ult1(c@E%Ma1HS`bHjSW{XU0gL* zTh-ImJ}})fI?z1P(ljyDyK=UBGC#qjeCAnbZfRhoNu_bd#p3m1Toe$qFf1uL#XGjK zv#x#F(AM=!HokH7_U_VLXV{`L!WDu7VxUYSLLg{Q?9pDmWGFs#L@)18P!M=I zs+Y~0)vMBU{RS1zq}bv^2C5i&oz66p(#do zpa59#YG*!Sm=Fd+bkJQ$I{=yN9~QkiSOT|<6Fi6j7Q8pvAZUZpI&zV5EFue;2xJg} zXiV}iL4*(I2Hs!U^U>OYU#%5b@WqaiPqqzx&Q|HJr2v5+3-F*2c{X>Ct$J{3Et^Di z2VlYD^V`7!2m`Qy84-Pf--JT+2v?3UAi|u8O(LNAbg8dN)fvo9KxLdEMN=3JCtUm+V3b$Io04i z(~^Fu-m$f^2!YqOYL^%UHRkMYa%`_l-&&InE+luK0{5wP-0%uFT6MJiV z2e81uNkm@&iLkNWy_x}08A&!-424)B-B_Ow9FTNBSM8oD@)C7yLt-#pn9jflEPxzF zM!-18-xnY^rY`^sy3>t)*%so>dR^w;924)1xy%fg#vO^14n0_~mVE6>+r`eD*Sy8Q znydcJ=Jsz74n8uayO$yF2P0?rZ+xc<;S~9V`Yt^qw5TiU@1E zr`K0vP50p9Gz|jX0a!r18CZZ(HCS->ct2S1)$W$Bb~S&zq4J$+*Gv8Oo1M0UWpOkG zlVjhb<6d=u3$$z92DO$q;L zlZe=3Hi=*X-k+%W&|3)>d@!8%{&4;W<0V8F_^9JTV$a?l&ina@hZqAfK^hVRqSt$J zU+c(uuFdj7YsT${^c%G>ZQ4^M@kfhHbLQxQM7ul8l%Hg8G`hNr%ddIMj%pQA3ls`z z7-I=vwpkE5q;PGRM1k8+NSG`Zn{pv-{_5eouiBGf5y)*?q;Ps{R#3JeF#Nm4oHbRr`;A}qqY zC`6}9$VwJ{0rouf1(@Xdew2tjGU)#q0hG!8ZQ50v+}S4`D5OgA9U)1WPz0W*kG>u5ws7? zhy)gd1z=|F`wJ};2I33C!kH1l7i4G@Oo4n%K?s*YXn$;sfMEV>CV(kHf$S3{Dozs!*{^q@gdEvgz&L~u&G^@daE}5xq7^SU;NGzR6kWeVgX2jNyYoiJ3m;_#jF3}SF3tHTGPk*bmPdc z*7W~+-4Iyt$>yOic8`6wV;C&>V(a+t_e_7iZg`X7+f-rRQ*OP` z>N(w_qA|RgGSWYr~LRinOsd51aQy#BvI6H~N0@Chh z5E+zYLuF$>w5BR=IzNNM10V7xvG@2^Pn2XYDX(}R- z57%Yh94h!=b@lIdH2?9?@cm=s-<=%!;llXeu1-BYGj#7r&*S;QyW4C2b-wT0-A#`U zcRx8f^w{gOrDG8E@XB)FfWCkRft4Z_iyoYxWK4t)5qtrgL}0<^+v-2vRQ#Rjoe>L2e*BbgC#f%Mn}fC|G; z=0y<7>JVvEutXCiiCDM*io$P`LDQm@DCuDoi^38jHYdl}(hZITl_^u3Q&rm0QqkL3 z)YjEDGTJfG=1*Kh^R_z&UsGDl*tZ@hQp(G7C=U8nX&tBAu*9tUt(-0~V2#6ZZ^0Tj~aFOq*WYX)<;j^^=x_&6&mn z?!&V#^u7a3*JI*_af|`TmR`iBek5x&?_vD z<|ok&FdRBvViJa>g~l@l#&bnxzCetNO4F`Zr7#M*QOh*Q3O=Ai5R^it<7$PK+JCLm z1`dD#H*3;3JhO+2_XG<>@Ww>jT&}kBdZRJZ3uQoez$;p0rbe&#lmHMMa&g!>eQU4+ z!y;CUIH(TZ9jo$-(B2-adUK?L*SAJ1d3}Fr!)v2exR|0n#;OkgI=?9eG&18Nc1b_q z1YI!j`Ihmo_DubL&&+RkOwtzIJGAQVLGMbifRHn|f;)$W)PU8}?@n*y{BUV6OQnx4 z?j^$J{)N4mR)2qU-ro?=0Z{vWeZX;i>b^O5;M?=Uph)PD|M96iS5HGGe0$}{&en9@ zvkOTyvuR?iQZi(vLT@0AAXFtOA~=SYkap1)ET74YIoxR5Uv50z=swe2xFJu!vo8C1 zZ_CPZJC4m1_NU+3J~XDkr0>_ zTB!YNu{LeWTje3R($0q~tFpaCsW?$1BAX-Mcv-1^%$+n_k_JYQKESH!^8B>*6>b)X zrVH$|cvZWtGzViYD@4ImLB>ddFsYk#8b%!k5oF*>8_qONW@=}g$t!Y_S3C4uJ*GTi~i~1hlkql9%w}h-o{c8mJ&z{ zzB}uEd~xRCmFY*KIatno=;4J4(hB_fHTRG9vOxrO{D&jmpKY)I_1e<+z0NoKlAr6a z%~vPRWy*$4k^MptGYthBlAu3Lcs?tPOsKXhcqBLL!4==|`SrAJWFvg-MNK_5{ z7lUTfny}Pv@FIVwA7zi|?@a++z!<|KH}fB^{Se0-Mn;T@$TlPM_|1WQXaZJ@c;}sw zf}fAlETEWozSxs{YcaVUnP9=Ca?=SVX8s*9grpy#oaidm+i9;Lt^j;2mPZV^fWVjZHHxHA^b3#reh*uzR#bUfYVw*EH}-ec^i|nPa`f2+21j>Q`$c4+muBY(`5s|X0d zPXljKdB}pukN_WFAQ1+DNYCst1x8jCF)|YI00SrhxLv0rqFk@F`ebC7Pl)Vn+?z1{ z3k-y)#_L-!!rbyOq{d`O1e=AEV}jOTbYR^6k9`HbVfro<7 zj#qVpdTD}UG+rXq^9IF`PBLy(&ZQ-8cUpF2Cz5237I`)~x?iU*l!gKZj2&owTuOCS zthz2%jo_?R7rR8SSz*yo_YddlnGSKyM?7{SKZ)?N<3;9E<(c!COcbV`FW}fN(G9R1 zRF>+c`U3`3|7#WEde6CvlAtX0Qkj_ib7%(u0}e_8F+?g!zEEnSgE(KJKVQTiQ7TAq ztJVoZT&b|}`s1YNT9uI9pg&_MghmZK00yqtvrUw9vndM*;5^sj1tOe0i3KB{4B_Rj zVhl{*=*I=J6cySV{cw2IA5!!OAdxHm2l^OkG8T3`uv*GNZNNe)ufN?m=wB-(>gJPm zgCDQ!`fv{Jxc7@~-Y<7ee7E{*nm6ZL4piB14HSMb z*YwrC-bZJ~9$j4a=j*Hfc5D0JZms|Ga7R-}mH1@8kLYN8I;MjXw3B z_x^Bs`Co3V{_g4wVDRMHGWdeW@WtmRgwE{j7+~1|V>@fov!4U_cZ4w3&{zgEs!-6#yaKHoY00o!_KFgd( zWU7ep-ALcpOED$|4ulF>iZofO4c8MT*3!JJuC%kvoRiC{rA$p}_xA-7FR=tc!QAle zx+GVk#qPrbxC9bj@D?KahOfp4i64ks3mjlKDteEA2#ZcjkTN!@z7_@CQiv?fP?_|Z zFxHB4lQOb&DbWEk)gq-W!IAH%w#TPiV^V*_SRQ-!$W7sWft0t3(E(3y4Q^l?dYvoY7Q`^#pG2N z4PSqHP2SL(iNf{ii9)?B729VJ&J4IaR zAP&g6q$L0d*y}-v#-S_VfC#?PkRS^LcMR*|3qPhYKw*aU0HS0(2r?yM)!rESNQ!PU znNlA+o~Rm4RFY&iWm2t8({9f;fC3v*qc_@x_-rOg)2mgKsU+q={PF1+BXgoO)!Hbg zM$L)w-N^#=+t}RD})7InZ*kV z`0GFS{&NM%Vt1&-%EQ%C3-%J%EA7Am+G55@XG$#Wl%6Xx@!{nP^SMG?jEvW-vZ?uC z0k3{6p#B2~dR6&>K9xeiAI8{(pCMp32VyxIi1gGp`(h2)8fXy?*lHpq@>h!&p$(VW`Ew`V-ZKBY!Cf~BV zrF?5c4nrQ+f%Y*Dsuj*dhz)p?K7rX0OaTpmFdwSU-cpgZrA){QAdWfgof3h`;?T;{ zw3$Nd7P2kNGnW;odJC)^=0a3@>iwE(;w)J!^+F_Puw%-mDZ=7ux5&K2p%n8{>`B1_ z7zBU3<&Zmd%9A?fHq%95TM9soI!rT8)3`l;RgQ5xQub!Y%j4xAu5bRsfqsH1@tOOV z+Z+DJi(CH3^IQMz_J)7Eu?~v($=T8ShuR+=>3#@ze60WO@xi;^`4P-WpIlu2`1-QP zS7#qx@o~qOmqH@I8naOP-HCy(4|e=^ck?G(Yd>6H`l}UGT-2eP!75#&{8eGra43O+n$?!}$Qg z8~yH=yEC8bBs*DP!L{n-|BMCCk1ly*<mTfFl1j}J|!y+*mWi+o3_e!{q zaw)}sh=QM_icMf~h>1(2jHZCf@2}WC^_T#HA7?~A_648-`$A%62);mM*of8uazPN# zGO03HZdIl?6b!dDEi3ob7aCLP3#{r`wvs6Su*@>_1?&j%%~*`4YIJztu{6nw5~PJH zgdq25d{KpFEmTDAh>97(Po^L|EtXbh5d^jnr|~BF1RxN70bI2~5uanQxs0jgnaLMO z5)`IfJ1(Y4sd4u7L?^36C64;SjG7#CA>9Gebr&dLjkj}*nxuG{j@L|c7AeS$bpuNW z*Ywp6)m3%X6tuVvx%@)SbxS5kcaKeM8}3_Ik<*%%QdL$kRgzvsEDt;fhyapl)ymLC zff1py=Em+dD>tql@J^M~5Dpx&Feor8(WpzZEcglkkPO&_W{ydk0J=p1*-=q=i|0p0 zI@C%O+pG)`IFc3_gxNfn0ouSob(jdPL^uj-OsVI(N7{`hFp$b*|wQI8Qi z05+JufKk!uQtO!t`_WvTNGmAgjxPrPoU2fif zrO9a0P8B7KaI?xZzVm!>G8;sI0=)tLtpPwl>?N%M#4(0-6n}DVfCI3ALu()s zF};mAQXnpScWD!HGZ2AS-~e&KZ#E8nwxR!%4NE@TyyT1RlV9y#%ADvAdtnNef4y(n z@Al68;lT25k9ya9du;BTqigOTM_jP^>G@ss1y3$vKEYb)u5ZuoVw?2Qb#z1PG2lzJ3Z&U_!*4$d3+wAQ0Ta&2!(~I&tsf?k6u?-PKk=d}&fJst_4iz@Hm% z+=3IL1WAs_w)M!>2fVfEcscLPPdot^(^{|-w`zoB%_WDrinrEeZm)A3Xf5>H(P1pX zcxX=@oq{;K>gX48wpAf0$lg{V{HwtW!583YDzb30Ru$Wk7jLX~A~z%9n84%pwQjO3 z2`pfbXnBbp7dkeJyqHWd7-HEJrP-9*3KopJ%wWNUD+T{jCPeTE!mV0Ni&7zr$uk~x zCIJK!*~Z!2lu5gGMYeuNsrh`D`>kcwpKb5Bb8PtW`RVU(uKnAKJO2HpP5=JJrKrEO>HGSd~7S zA7qvE_j{W^+g$bjiu|`Hb6)IAyHu|~QEA%bPcpFzbQ>7XfUA|-Y#Su<{q#ubbGwF0L7hzrOsAlQu702k7C zC(B;$bNzh0N_+Gly@=FXSyF0CJ74P=`dc8e<}yE)pU{76M`_HY|NUo{|)m7A#=D2thJGpOi5cJ2Vm{ zsc12TG%pI^d--X=0!VJzf*|+;jqp2_5Qm1?%N}FEmm)!KNHgTv)CQynTLQ{zGrdEk~!~|!G^J-yhc}A8P;~i?uOdp z>XxRlo`$xz9Cu$ybz@=ms?m+R=JqzasvJ6dOlXvxV4j82pZ-%&yv8;;wqg0`^6|Q! zDs74_LcwxWZc~3(M|XjAp>TbQ{0A1WVT&JiPIQ!8t#qj)GO+PRu^l1D@rS?1snT%f z^KgB{8Bp!n4O9gQg%AV-f3y8;0knZpDk0U(4+LNV(;>!0Vp0?$4t;_DU^&5_62}@I zLcB(u#v9Qe7r7)lbcH=}MXGkru3Kx1qxkP}CSoH;YUQ@9c*aEQQ)3aG`TBwgve4LD zWrmffjcG8%G$yEVBwCVc@>*hN^^toWamGw@>ptpSswS9{s;78#hJ1Lytm+FwrA`(KGUKzH`Ox9L|ii%}eWw5;vD zsm4!Mc7g(ImLfW4trUI1r<+GV-!}f`PVaAbOmV*0<^ApMrC`Cm6JEUNHbEIf7~DIt z2`qR>cW`m_B1Ce#=Z#!3Mf0uh=W9E#R}D?(IwpguIPGCFRbx5{>?ChcIEb-pI;OpAMe zt$TAtHW|dH`pdu>e7LdY&S8LH z_WR2#pWNK|x0kp6+eOj7tRyk9>jT~`SZ<{zgX&eX)x_toAp$c z{$Pn|E=@gdlJq4+w#7ztYNc30Q{>zADh}I3ED^P61sq^XiproRCahbp7)p*FG^xfd zF_YG~v1Ij>H3oe_CT09JWCDXlU;)8qKOZjUpeaC8_Q4d6L|9Pdzc*F>+7i!8{jS%R z6udd=8ypQ6&=kCb=xi|W_1Q%6d$c-Cy7}ol_a2$>`#0%i)fLS$_pIXbb2RQI!0k8iD79c%Co{Zvvkr7`E5Ww*w z5eo~(iZdcNC1cbd{ZUDwqaK}PBfULk*;bQ}WnSFo- z%!ssdby|!88EqoDkeE{lk!_fmOofo<;`2%h6oF^J65Mg302my$p3GWTN-^}YH&L3v9#N9UM9Kn@2?6)84w0vx?sj$VZwyFPnc($`@&+!|lk00r>C`1Pl8WtJs zMVcql9w^jq3=N}{>GEK^nl&Sw1LRJP2E{Sv0a(fC0v5$Y1hM}^8CC=@z>Gc>H39#g zeEXub1^@vb7Q6$03?k4GfD|BtUt&NRKxM|!FIr@Y2)BfV*unxC@HBfh5liADXZ6xe zPUFTb{WgalZ#g_lx2MPKbtUe~N!XGRyE#2(gFR*@DT>)lF0JoqH44> zzmm3um=TL%xh;N^EoxUr^szi61ELc-`gxZ@v<3yqCs_h5v0N%j67{;$Hd{oYh@{yiju`1k*^D&s*7z>q{k&GOouL(n$H$k&lMZQ>QPzJ zrLq(uL#wcJ00K5n`H;hdFsSn_k)k`kMBo|8281Cm79;|bA;A}b1w7FqAVPb&1B1FM zW<+2Cd;uK+Kp^nXEg^yQse70eb z8PR9!he^KwY}5FsTLwShI>n6W>jSI4+Pj?d`+X~Ze_-WZ?{V~H8~=E8?%_O$AjU*Q z*q}QG3*ZZw5q*1V=l9Hi&Y?RNSipIV#Q5UhCqfK`{H%emS(v9Uz>?z8je~!5uuvsL& zpxgnhtgp>kRYp1*CzBFR2S8xi%Bq~@%!^8}p78qIO3|7X;X=pykedd984=JR0t@m5 z5HKSeb=xLg0t?tFf>fT(HP54-1l?A1(NFTkGBVG3Gr_a2ma_@n2rq z{;w}>`RnbK|MvWvzg}DV9lgN(5KRHwL_Dx!^zh8YBkzT2B5e4Er&m@zxxC`>rCG2* zjD`p=nD77gXxH!eEG7l>kGtwVUtjXpc*b+xwo6SZ$19RHWyj50l_LhpfL_Xi5U1au z7&ORmq;A#9g)en19D$UnQKLrIuG6%|h4tuht(Hur#xHm1CoG!D6wS2FhXps=9Jf21 z%!pVh{pDmOhvZ|pV*(1;9fCXdlf`fc?@yM!f(&`A=;xDo*NIUQVzf8u3pz3Yl$$M? ze!k#x1_DSZJ3HWsN@Nn$iqDHOKcsrk7@Lm~E=A{ZQr?WLf|7@3kEn%^KLDi;5X*idDX z%9LZtb;KC7p=z+8IIpd(d1+-q7bezO`fM+q13Ae$nU<*JIB86xN@t8tOpMZHrQ|m+ zUP9&XuNiKr9;h$xZ7k_+>sZ>=Jkimya*aZR$gounW z5hEZ1kELQv1R}6Y&K8k>MkGGP1PMZcnA3=eG?^?-CUL9ft!7=1H&M05uG^JkSZ9yg zkQ%i!Gakt>$pgC`y4^1Qu3W>WwCFjDVsl135`#g#ibW@L(1H|sq*)^OM62rJ!oobe; z3{wmW@Zg67Uj5uL_kVzZS9$@VHKQXCmUXGD7F`fLbRy5!Yf|_W^Z^|K0)!v2z>f$R zP+YFgqy?bfg9X>>G8hmsCW1Tmvji`;c|Cj%AYee`*CfB*Cj!qnU;#}57Dd1TiBsSL zJEd(N z7&9VJ;ESEpU+$j$-M-~u!9DMZ4I~`jIkuJ=5m>;O2)+QDYPN`&5y2hbKfCAY<)aVI z?*ERRq07e}TsZvQeNtkW<&rY zL+lC}CK_c56W1qv!@>it(vSh0)qA+kw!@QjtRf98I9{KAq@`$OVa8ld_I#)3c$a5K zea5;9EADhG678yS?Wu8X#+SO@&Ey9Z*k0oX8c>t*^_y!P2nz5c!k!4Z!J2|pumF() zpITc@WTtClWzL#n(vGv)CY`Nt_@d1mYb(9DlcqB>5>6DkDI(R9|e z00hi>EMNigmP1*_DQDueBLUXfn`>L`G_G;RAFMIIy0rMS9gDv?zU0yQ*@qWbKDZ7R z?EUL2Yk#;o_b<;);WKf6z8eVm;mpY6lS2UtJ9lJc2T~wBqTd z6;Ccrg9S7N_fPcRJKh5pU_bQbrt)8}aKAc`a=q1Zy4G@_$gtY3nYOBijq(Aba!GPD zuYdwJ6rDOHrqmq7#Vyg|ERIn$Yh)eT2!LQTMKfuSn@-mP1Y;%z3s5+fWM$gsnub2>WUDB60J^Q93EYE5lWq8m^Jc zsqjfM4TV=plDlYOg41{o4!<#|?2jiz;vJQ|QNXSyn zu)BL}+8fi#3XFxd`R(P7ib9<&L!+fHU`FKc3*=s4#!UML5r8hkdv&H$HhpZ;^i?~Wn7WFwxMaD zy{3P0VP``{UrkAOU13*!%h*8E^s>PXD~1kq7q@2;3H`Hhb5!E8y6&x=?G;8t%+D5K zoRn#DcGfM~Ftc}NXwyi~`j(!JZudZY&)T^S^9R-)**`Qe9rX-rvdq%d5nd@+z`%$q zjkBan5n&4b8CF87MWKnIqAwtdf5-WRq-p~95{Ah1P7B5lr%QZyQ3+PyK7IeYxx9OK3`)n>cupeuo3 z;^TQ{qHH#%#jZ|`+L5heOtdLIZh4BPCtm7_SZE1eXj4j4q%s07$?`)!IiQc9FzIl> zI+Ur~lMy4L?%l>CS=y6sBf2p@Jnk{wfD5PTo5kz0$`#(2W0CB*%y*LlMA}9l9MAU!3 ziRl{y#W+;FMItgj)`R8m4p;qRNhRl3I8g|zqPkx$ZT|JLHeNrPZGC^L@v~K3h|bV$9LR6gFVsVKc3w4?V0`e&L8>1sXg!oAOe&D$44k12OYjX zzvJP}tBw~aXWP1RUAQqqkr+ZqY9xR46GNp8iRD4hnj-=SQ&YVADw8)l zv|F`n*4p>gyr*8%es&ZH*f;e7XlD4)qYjsgN8>K5MonQe82J0%a z*U=X+Jc2?%eZ0hBr1--cAVNTs#=Hm_8UnNxWjVM{%zBbV6lPu;>a$h(mQ}e%d?zMd zDXX##>)hJ;mb722t|DEA$QiErkFTt`e{IvhzP9tPFK_wb_RL>y&OW^$%;i7<21LB# zI{M(GpcQ`b!W3K;ab^$B%>V~XmwvcBE40REmOMP!|6slkt?}=+*M7FH@cpUG7rRZD zn@ltXJKWk;>9Nc0%>30uN$N3c{IFRA5KLKABR1XQ7zseoYtVG+)V+q7K4UCc&})zm zq0=$S$1G7Kug#>z&!omq+caJ{Uk(!&gq<0Q2RcjFdNP|8 z>bTHAwMxdV-{<>=wwN)!LrU>yprQ+vB!oz`K@53h(g5KAL1CvIU>n94K^!a%WNA`l z^nwdMj0pGdjea*;MvfsvgwU?Dzr32JRptU)J%eU3GRD|LiAFA729oUF5F z+lyMNd;6M4%UyNOqzrI?8Gp1SCRUn|Wpt;gGYsLDwB!O7LK`c38cI4_N;{hi+Xfp( zMw&;FPfrZ2@AG!fqC4(gJfoGS$exiCUo+QOS(ih$bzlg4QPKL!n&ys<;oi=5-ol1q zcV(L`b9F`0g}%B&Wm$bDjZ+;K91(&z%m8~6uz<}jyC#MtvoyInQ=u`!%aS(}6hb7q zzYn15n*xZURKza|qNsx#UJ{Uru{8w*G5{8%p)esN#kPV6Ccy#%g3uL3=%rFx1GYtQ zqJxRfRLI~U(xj0&(lBoH>@R==xCb3`(niK`FcZRQn&yBvx7wq5-ISu)U{NQnpf4c}KiiY3JOo&3v)Z`BFHk7Vl>17 z2wq<7LU)Y34AB|Hfxjnsp`B!dGPX*Y68QyZBKLBzfU` ze?C+J5OCg^#KOMjgW0x^SM`0c6tbXM^aU&1-kl)_8LincOaUnH+4hOgcTfFx@6zAw znEY(p6j(r0@b#g&-ydA_heLCJJVKh;I{JgB7kA#B-*D%|#zz-GfbF2cqYFo<{ddnE zczosf8@WDl94?Ou4QwYg=LR4tLzKlEg!0#zT#{n`+!! z>hf@#JJ?)!q`g$+)3gGEF_g7|-ojpFch@Ug}25@nsm~(ETEMb zGs#wD=vHMLVUWEHcF>5u(v!!4=)LiBzlaQ`;FsQVzkC2t;DPh*I0h8Ov;&9>zz7CJ zNYZ}3B=61s>^FO|UhQ$xAlz<5gKtJ(aI%o-DD&1#?b;;Gj>Ux=OFiwe@#K#vBto1@ zt>qSv8X!*Um9sCz)=+{}!R98)GV;SB7m8G23N80*7+T+&5NQTdoah*3AU&W*5E^8W zQ4FWRa*5NjvhKCqs5y_#8%wY>H z(r^@YOo)^cu4VyT*U2tRmV`OuH6n#RT*|ER$kd-L22rlyh)-cupWp-s0#@2o= z*y~TPXCWk((LJ0o*51(nkrE#KV30ugm@qJkphJicg(VDTFqEYfZb=!Eh&eR{!A(R zKN-Bq{D%joJA!`F;2%f; z7=R5NzyM1lRL6dQI=TQl1o{MweV=d1;oNQ#LNu5HmWTj@SGr4H>?mZ92xB6o$GpBa zRQhs%(JTFxZ;jNyIaK{huaF*inH;^|!!);=I2&L5W%K*f?SR3Dvtmeund$q>0E6C- z)((EMVfd3xBcE&?`(*prr#r@fzkk`6yJ!84!SD91{Bqw)@ZiqTjb9&H{q>PG#25I% z;QpCycTQ~n_SCjV2ntSBKtQjM?RPa|>&a{XEj-?u4Fpt=*!G5^ev!ynF zTYcf~hJ5yg4!4yc7T8dmy}7})wklJ^A6Gf{x8z|-z1>^u1RMYZOi1yV+fbLwJP5*A z_|W+eZgk~Y&<213UZsLRu5{8)FeJj64lv*=**e9*lwBf>>U@S2Y>;LM5kYarY?;Gb zmw|#bP44E%&|{705<>_AReF@01SBe5ezti za8@>CR#zrvq|2hBf|St_u|>9Qm%*%)$3px1w}_yt;iRQgKH)JmHR?39WC9PurEyXv z{{Kda+CuD&uy-ICID%bQ4!=F$7KvRQ32NB>NM-N}fRaU%po>)du|O6Oz&}I0A~wyC zs+Y&*z1gqgxi40-@JYcMoB2!vbQCN<0>8JjqQ6Q^?EK5FQ zyNLFma1x7frW0&2oUuM!0&?*6un3rz5}Hgu;8ZFy)nd+1&gwuy^m0r5mP~KL9=G8@ zo*pCs4>$+hMv!2WRV|PpEyj-r8*H%zAGgLxJhCvnF-XmEM}$_zMR(aOeYWJmWbKq$ zG#T3+S~6?Ef&;!iq+^A|S*D&V#c|qxEGPae6`;V?a@*elqACqsxLKVJ7GO&U z%y2|k03y^ope#gtP@7I5GC<(ve*zm?v98Vs2B3|xwdR%Pzz+sEP>_ZEa$ni&1C{TL z)V)1YjVRf#J)k`R3lJE*yR_w8k?+>lQrIbY?kbt%TTOw!!cml>lFvqNxf(Q3692T9y zmH9iT_hCqZKM{6y4=*3Qdwws6ho?8^A6!0s|I(pH*N^<^_WTdGPQ0~#tSuHFMX4!V z!d4oAL;?!}Lc#StwOL!e1?B_ANf+vE?8O{v$^#5`HkF83e}x0rA>uE&>u+1^0SxE_ z0E2av>BO9^qX#HULq!I2!04Y9(rtCQumV(g=mFq>2N7^zjtbc-9IH#yNHF6-2Z%Wl z31+2aR9co5iI_`aRzzp8qRfG19biD+r#YC+Pe)X?#A&51@D@7I8{m_Ky1?s7UY>7W zk(abG-?X|gd4t=qr_6G_&;8-ry5H|<|K{)jLgIhDwc*K?rGL7P>D>6klY@^=_CGq- zeg8n~y}d0DkMwd-7tk0yxxhB*6k9}V0Rw>qmu88xd~jy?!TiA8Bkf=BYxr_!)t6h! zKU$ghQm^H9yY)g{G83Ymx$$e$qrd_@=~kp`X6+iVfYHxLQWQ%lMxs9XT&`Arc^}GLQWse{=ynG0#AQ zzg6(RFFqVCcy}c47sI){iibhhTfL6gyE0zx%6YRdR}6{jQf}7SknbPN)idZ_Yqw5# zvU<~O1rZA7Ih0O{G3)&%sfyiEUAR{aiKy*pc!hru_kOYiC@H!Gol4EUo0&WdMt}k` zWrzXhLEPb~+^p_Uxdl}$laNITE+F+{52-RecS%X(;#5zTJUJyy5fcz936it0-Hb-Br9#pnIeo+SnYW(?+Na5{+;*4HTnzO{6;AXiteTAv4eg%gMuu4p*7uQmP7@ z+UkZX^P2PRr6uVV-YQ2^d1ez*0f(hhugS_xDsWp%l9VYW&W5J4Zcc4}YeR8cU&C;3 z{gNto9a=D3aIij5-jv_e+c;ET)ZA6oyP!^0!J-j}!DzOe1+sddZux3+eq zW<>n-pJIa-=w*;J&nm;8#m6ZmI51Srl<1$E;c z?4gE*AT1+kIY%Zy$XHI3q%cO{WzpkV_g33CPTv;-h;KG~)&}vV?BQ39CdPMuBH}i0eILp!22hyf_QdDR?bF06+i=z%2s`_)zn}*8v3h(D4c` zaCksz;Oi~~qfApk@dpSv%!#P{^a8xY@plA%Xb>F%4%cNi+=%>GKsXw;|9Z6@_aV^~ zc$*;>a_9}f0_H;y1IW=JkLe8ri`-MhSm@;*;b9Fl;8h0}ygeiqOd*fql7Bu?!$#>Z zr(55hYz@+c zIWosO5$Xaz7JPSpH}Ye#OGJnbdNUDoc^EiAcm^E6A0tKfW5JW_M`;J{U)+E9{GR(4 z_rV{3cl9Wr!o%pVw~qbg#-Te$*Auy=Ul^Pi7=|SnT_QIT#ll7IsEC7g>6`Ptq(PdG zlp6NrCu}dz+|gK!x?o3xXI)Y1-sb%Ip}GzA&W#N@8|$3NiGhPvmFavaW~wsDTE|u zVbso&5hwr_&>J8sfG40UU{HihDLORFD^L`$KLmL^mKitgPF&_O?kusLKtwoN{L#Al zulIFQ;lIDM>`zx$KeKH7b9hfBJ zSez@%=?eUzmVD1QhuVL)v+lDkWgoB2`-K;J*LJ; z)U-`KmaJMr_=iCWh1_FMbGj0hh{^y0bOo(CGzO7u7x7`AP723BQ!tvO;u+PM_hwVZ zi|skD_vYg+fw};(8Qw!^48Q`qgZ~=~pa&QX{bJa|5p2P5-Wvls2n?QYcfH!3N9ysd zrnFnlnWrnP2Mdx>3$04c=yPOtXJ!?vb)**#)9f1r2mneH}m{;7=1$oRkJ%T%a z5YPVc5EYsOMxgBl5m+8&vD3FR6vCW{nk^h5!lm+XX$0nUGPGnDfpaaXa%BxLGL z2C16OCccy}U^WD3G0^%u7O;5A_eVtjhz0ZoRC|j`i^m&XiXu2t9xO{uOwH7%+B63G z0u%^ffg(s@jJ9B4?X={j>oSNy^HyZm*SR|?a@vVkD9LFn&uew3mb$F@bw!=^#T@`a znX|sBv}2^h3mjDB)MO{5MF&V#&r+?UnhHg~;IbALWR#Y>n|rG#yBkKfPR(7K+%P}3 zvc0r2&+alOb?4Z%$4)!jJ2>5SNs$g4am=jke8G{{P zuuXV)nnZ4Ae#ej~EQn$bhrrGd_i;)+P69p@KyoIqfOmiZfB-n)f%?yz2$fMLvp>WI zkSMYYxin9u%#Mg~$wSx$>d{3_=+r9=>P=o-^j1gQmTb%;@C{1Zo*w(-`TIMmn(Z0d z)t1=4ctwp$;s_5FTdoRufg++&A77!C*K6c`iBS^<<(72aA(s)!F;p=wL>NzSP#rVq zC!CD!B3vgZ{=#>TO3#`pTcBk&FIqCL^xWtDm7EICl>cI}SRvy0wuopJgcSvfgySwP zZ^AtAAzvfPK8WD!4)_&*L;-#gKT?QE5d=k5I=>%4Kx@E^hzJA<|Bae79~OAUsEChQ zECLId5J4~d!wmcl0@^cx;Ki{vL?Qv+ymQVv$H-!E3|SWZQhUzUSk) z?q9F&`So0{Ftgq=hNwVL1wJ_Vbn7I$L=Xl73%owk;OoQd?;Kh8?Q!yKwlOgJ!_f_B zkMEt@Nyg< zKD~0_>E*rOU)*!LqadA;<)niKJ4(q9OF@ui8}=oB0|iTS2&>y;0@>t@Sb2i z#OcpWUXrStcBM>Y8L%atb{l7MjT_2Sg@0;E%F+7tn*(_ttgifeUprX9deC?0X8w9> z*}vXe{==mS)`1=#>taCk&93^dx7Q#!=6rWz5TlAGmu8=OudI9md3<%%pRO%ug$UOP zU!rB-or7(^-Cpy_`qE#rKeWVly~S{5sfA(Sto@s zV6T*d&x{B-fI0BvLU)3)Jq|882A9%7y#g$lw#JT_l$igH*%Aa6yxi%2qp#o%;*1C2 zg9RK2ESRY98(8xoV(ym+>pI?fdx&Kt!5=^#qfF+!(x3NYkLx-?P3`%Y8?vr7JFYfm zpD4HQFJVh8Wo2gW;uL#hnxjCSXpM+UQbgfF9Ty&MlBEk7c7Vh zm-EHMC99<|`PQ5PPf3m6MAes>HO|WN)FZ$dgi1oY`1YI8g5CX(%6rCn(CUVE3ug-BjUf zEOFGfRrOBxE@Kc>nOm1*@Z_4D#5gC*V+lau&8DipTz6$wdQV>IL}k-ZV|#y1-B49- zYh!Wez~uJzllyvGrX6V&G3r!_)QBGu{t~6?=$Yg+rxd$Z?|%&sXGK%)l14k!+IWmL z5NvR3lSmvgRhk%#1;<4MGvvW_h=C7xI=q150|IzQiw;>zN{zq*MneDrVnw~e!h+d*EmBDu665N%ntqF6X{vE`s_tN(d4HCUpc=$x z^FAOrT95=5;9Jd52#Zp}%sBW_(<7Y7NnmA&a*n{j_5#9S-^HG1paCqvoYW5l)O>(| z;?IXC^Aedfo$}}b2v}&e2Yf#w1Ti40NIjjW=X-$wngTy4&?!7$?*MOTG{6GLV_E~S zz`tX9t1jd3SO9^{fXJ^gpz^=k>3Ojo{=nno4?KcA=qh`uqvYkzyw~~=1L0Lvf*}QM z!vD|Kdq=f-=KH?)&$HIq=bV`oW7ARZfB+#0AtV73q6mZpqW5YH7;Iy3d)*7}9ar4# z*p5r=xTg0unaL#6l1wHulRjyaOxgR~b@#rXM{jn{UU%KKo}(kGo!QCreSg1iV|Vn5 zm=PLDGJR#D?X_jytchM;-U$|`wev;~_Is*=b_jvEJclRxSckfC(W(bLdmgoq& z(oG*o$2R@p_-3%+lQTO$zp&@)M-Ray|MB#Wuc$G*e3*($K!F1yi1g~~vmE*iI6weE zfGwH#-`+X}7T`ws%k?9lUOD#HJLlOQfdwMx`r7gDZ=HU5dTE1aTdWjc*^bT-Ykwa5w>AW5H|GB58#XrjsjeY`NHm#6iva?bLTra9 zJ6>Jm5|zg>shHmd<-kP1j))`A1&ju;$LnI{EQmzSeU)!*$V1N=aRF4 z1-t6qV8Lul(c=q)G**6ka^x=;7GoPg8v4(B>;CQD`tPnU|1ypRU!ENJ^l;Z_hdLMv zL{>EsrH?KL3%-*c-~7!jfdzlRjhvKnOMwN15Pf`n;JrPqZ%;>lxgq?-i2Hg+-syyo?151(XvkbXgV_n1O?_Jj0?qs07Q>f^1Y9 z6Zsl|V5-10S(v%B$oc~oyf9kx+(_l~qg8SgoiG(l*5f^syKO|tB}lQjmd`x1umT~` zbBk-9URZs9wCah4HTOoVZ!f5Nd_m)5{k0d{0#^`dwE6*pqYb5d!`>|w4V|vy?$WAA zW`R$UiE0$*7Aiz;##}+BN+M~3eZ0K15%;qq9nBDgF#y5mdH9DxP|g+6`J`5Gm?Prf ztQ3Ve@XtyU4VA3w-TEw#!OVT7OH3flnurK4G(x0t@lrk0=MR=BO_U3O1+0mni?WevHH4><9f3)xf4KNZ|s5 z6*zz|fXe2#8`E{n1qGP}<<3BeNC{OovCx9$P6s2%(oQ9-!kVVG%uAPCy4(t9d6_d( zQ`%is(%sv#loe7_xT`HR&{*CH7DWB6{Y@higDX3t11;e$e{p?tw5Q5jMfzQ-A*asf z8Vg0I>Kex;wk)06HMnR+M^jUaE7;pIx@!HdJhi`gJ??TbZFs>q}ex%B91)hY-D{&VLr6o_W4^b{=3QKLSTp5AX%&NnK? zvs5(KY%I`im5Ow`OAH4CCV3o?cSKMIGHbvmNf$a?X(ySkpH3#7rc{y6nBmeY*p_wW zW%lJ|jXCqkDBV(IrR12pnp5Su@?3DL1`UHqpkOXwSb#E+Yiw>c`{n2%HvL@T5<|fg z9RaX_H{9gdjA4Pf)qk7_{xhG>2~EIg!0QihYVv^$uz;WnxMO~UJPZ7|AOaCMU;)(y zETC91fd%jdkOl07D1QD+6&6i-oueJ*Y z8P)(ScyDGEJEC_FNMOMSM>qanI=T@o_|wVl%mtsE-TCFEgP)$;^YOWTG8SmLfTUA|1 z&Ca@N=hj*`tnqZnwy(bENTc^$xBuy7k@xoXeSUi37v~p&1%JD>>2HtIO0fFdM<>2G zJM!h}1z(*S{Ni}eUygQDOh$S&kij3M2-1qb@q;caji$Q+Na+nfWRQ{h!7Gjb?Vp=fdy~`?1dKC4GRiP zL;3o_Y!#xSNxNmrZJTgr(JQ{fXL!G$eKOf6u8h@ zHXHLEs4Y4a3+xR0*7@uEJQYitdwNT2Lnfz7Z6*qt2TxWlumq-b3Ck;;Hb0nuxn&WA zrak;%yu&h0a0m1bC#IVfIp@{{5YKB#BD#*)c|Kqn7mRp=9h8(`CNK8BV+ zU;*?&YfaDm*0F}lj;`21V?kkGS#3mpj{bjdYz{Tz6wh%e4iK#}{;O9a^|yVA;(0){{%N*@{A`!XVQYRsYhZU&s?}1biP=EL0<@%} zwUC06v@|rPC`}QcQd9t5z!PF8AnK@2ud7ukmRJqrnVJc!c6EVq3xYh!XE@+D9w^l@S8GVkNQMUs{=~|zChcEAN zNzTP;*U4b^nNZ%TQ0{Cf=WNt*t;I)O{b>#NIqezvCn zwbk9PukCt!Q~$50=l^#52ssqLC5K|?Qbq&fO5ff!@y@O(-~hAPpH57FD9vsG3qG9P z%8>B>kxeX!J~_J^Econ^gS^5Nur>Mt3&<^vV*zl$F6gsMhd#f|XO4gK*esvNs4RPx z={)%M@v|c3`sUe>uAKV%-qp`+cNuZgqQ4hO=fW%$q!_)kVtn z0V7xdU$D-rm)ttA0KR}7(P*v;nt=Ns?a)BJjslwwUDA+QvD}_Hnrm5zoP+VI3^ z^R1!!t0N5;2C6R&RzEfxy*XNYe=PdMq6naXIQ4p0$mdrjh(c zXR$7m916GIk}dK~h3Ob|sh}#7=8DcsjS4HV7zO5~aUi2bxn{a3S3q3K;XAXmI&g$P z34CB_WHVThx7zhtR;5Al(|LKu+fp;l|yGOrk5r=%WKGT8@=WvNef$&rN}`4 zWJuGpM?x&+R9j5RdMpPOm7SHL-j=4(`90$cx`z52=Qoshmlrk$iyFEc28X)G%Zux( zgWWAvH4crVwJh9KR+pce4WM9bQ_P)Xn5U$=lN`OOywZT#nf1_v1*wU6y(e>X4*3eE zJejm#ub2G!C%Ouclw?iz*Nyj%tQ;KQK0dW${^ITZhN9!up z=V#7M7n!VPyF+hl$k)WoDJ{ymm8!WpX>%M#1H+v&8L!_wE`FZ#zyZbrlIw)U026{D z6?PB>AyH)XqlJxzT6MbAW`-%yQB^jXquk`u?kO?Plw}_-&p}Bnfo zL#~q{_wkB?Jq5Z00oyt+-5eP$*#>XYT-UsWT8oALno)QDSP|6)mJOwj{pI-we1^+m z+atC4=c;olufbx*LP#J$xaev<7cpW|i4Gfago8{Ds*4Fw;Gtfe1}X}K1A&2nOgRxl zR4cSXe4cI4#ZVqgpbM2b7|;l?AhuNIpk)pMZu(lSjV>Dw=)sQ@Psb~3p__Fg-9oe^ zxA<;IG@tcUP?hj(S0yE9@_>NZ;BIfl{r)P{Ly*IFdxK95VA=^2Jt2n?@&4(d>UeBv zj8_iz28;r4F6(%GDb2`HL_-LOUY+cIX|jvS;H~w2Z*LwTp^jDqRz&Y?9(iXP-hle! z#S+V+k4|oUe`ejg2Umav@CAQ7x$%QzTkx9wes(kG4=1NTJiX)3=XQT|@xUjSXUL`l z5X7#Ci~pin6n%a57_XdfA3KZj;ESs#@g6`XBRBo@(OI|xnMshz1jI-2(!_#}0 z^<_v8*pq)sCNXrKJK40#pLw>yy~}Sr(^g7_&BiL{p`Pf$o(RwN2fD$83KFW14mE9U z@tqp$;{ATU)Z!;=l=RV!v0~vS?y6)UfK{fmW_?4&=GH3CmbR*GU6q^L{Og;18(WHr zv*4SlHWQm5skMqCV=9d4DMp402%sTiCO}5SD~GkxbhUT7mi%gJF3Z+Mf@^F2;K;g~ zB4!04Hw_nIKxRd>JyN)*-hH5<=wQ9``uy^jr)odk(f;ZF-fz#q39tOuyF32xJL~@U z?X^I`m*+=Bui1&dKOJtD_SV4zwdAN_I>mCPO?pjw8mfd z`I*5_PW1lqQ2Vc@Bd;tEyfjgIzR`HD!Fs6D0=>4)Ynt|2Hhax$yt>sMTAcJNiww&O zb&~};&|n<9nKu*n8Ki+|x74K%KU|Hl)F7s+ucr<+Xio)Eb`FVs^ z2k+0XB($1LqURUYzB<+L=Bn1$mNmXS8GCL~?bC}QPmf3MkJLV~u>Ps>CP3l#;->2( zk;fNC?vB^r8w)=%7JhOpd~1H$y}pv0y@8wk6}Nl*H(Fg+n~P2~1h<6BMni#BcF> z^Glw#JeozQPHAW}~p7AY6flRsdQF;tEk1j8m?FI+}SvIghWD2FG zYnTht6B8B55Y-~9&8(D*G?@j&!AlIg05>)=8Z(huJ8Y=dE{FK=x)OJdpL^!wGX9NK5z^OY#HC|MlOZrgSdXe)GJ6 zeCs-Q=H}wuz15O$cer$WV`x)H<4ApNdrj5Ss@UF@TMiz&FuG!UNwB55sB*k2x}rQd zY&N&(E#NUw=rrl`j0$Vw9Jpo+#6i07pD`D}7jU@!p$TOBF>lx%m8vy0I!(Pcqc_LI zsJb{$v$oK@Cty8Lmc36ZG4CreBRWHde6$=95t(!jhJqtyw!?wE{XS7+PkJ@Mb5ys| z*IYDjPQlzcj2Wb{58AVb99Ddl8%ykmLIpz1V2ZIELl%PsPYzby>nlf71e=VwNX{^QW3mlAcx{3jgGR#X-dNH7 z%F?dqm$bh)+4j;@>x;{p$SwUj#^X)%0Rz@VB9LOolHcxHD#!xr&1N=yaCGe-(3eWb zwtjeGJsiPD=XU=2?2bR3+5X2fI{^adbTQAg#VGbv+7xafE-fka{3 z>DH3dU6lxjX1XJ+cOZ5}v;@9_&YE2vP{6^X3+fK`)$M2t;2GP4udF+~yDKE3C_2P~ zh==^?m=D&MWk2-q+BzRJ!G?z7b@kp&O{IJrV8ETvk!m~`inq5`Z)vQc#%2Q>q*keX zdxuyj@d0N`OK^Q<;m)SYjnUxpO5f^ekkD#EODQeb*j%x)x@dW&lPII@^__!&EYD*;P=~FX)>nL__I@^(8vFFbLGF?#A7z`%_AdUogMo8c+ba&J3gQ7`ee4B z3!jvUFRrcq>gJZeN%!{r{obDMZf^bd%BpW3o#Jbsp6dV8(a!hwHvVEm=*7vBXBU;8 zZ^%3w%Q;wX+2glt^%$pprVVZ#69EUZKyn*|+03EkdgqMURD?~CVNEz4DWw#f4Q8nq z+6=?l+6CFlg*L^6OEu|+WmeC(sQL|BiEhg$7le4OpwAdAU?TY0%BI(sH;^A^G`titU!I#8? zI;!=!NleB9E@NT%Wm-_Fkv_8D#&-bAz&DFd0TtDlIFL=@C9h(`1BbzQ5$COe4Z@KbA@~c)e{0@jH{dUd zBZ4Dy$6!HGR(`J1n2{hzj%=mXq0cS1m(&(klDDUSAdxu%eQB;LQmFo1B?CXHkBrwyblsW9fMF=t#J?J=g{obha)Y>RZuN(NSdbRC=Nli?_^g9tqmZ z%!%ga(w4UJI`u<|%t7j;2f!6|;#^|-aut>)e=TWpnMn^><|dl8`oy#()4UXrf}*m% zOzWJv|2^Zs|4+q(KgpW=P^Df{c3O3$nlCD_2;G@gvn!DM)S|YJ_et+<9Dj0t%ZaAi z6&3zgSAL$_O01wR0m?X|P;V$wYuu0p5B-D+Qs`r_fRR9+3V2UUJxLZUh`obQjvSS%6_=a$^i=i0_fvo<@VzhjzfN`i(RCY zj^${YjTvEs(vvc;I6XCDHZ&QP{kF^@n}raHEq>c<)=4b?xF^!aK52l8MLr;H2n zno(?d5&9rfAXK8H3$yqUa1h4=m;=raOP)Ac%w;ZygjxrT0B`^(00*4Qa0Cs7@@ycF z2l5}oZ@*dZ6dR=a0vQXSoB1W;;lI_7P8AUm7Bf+4(^1C0h|vH|5pZy?M-m~Xf>G`& z0}hxF7!2ZL0C#>ZD8PrH1JD3WFgeJGfY}Tb5J0e4#8|U0dTm)J+%Y?%*Vz}X?0jWq z+p8-&Ad#63P!s)n+Za>9?_iKAI@`Zo5XUgcht_aDkdAMV&Bp-2A5U*%F!tiJ{5NvKP+uBya48V^80h1x$%1A&GQ4~cm1@T5? zH%_xHb)Fq{-tA!rSg?0W!V&xh z5XATkP?Ns8Ed0t;4J)eGSJuBYS<88KW#cO=8Ww$uBJqkz0+p=(&;d zd-H=gdi+;g++e}QsDrs+Ut`_ng?%&r$_b~h&*rOETCt)cRA*g)L@3S@Na7(=K0JDh z#S46KoTTNll#h%N-0(bxb5HZlGC&9+59&unIt`b+LGRCJzyfY~h6soTbf;9xuto&y5exXFXYl@!4Zo9JC%iC zY9qh?frqfqae154Es{A&>&@~|Y38<;Mg8pyn#LQwv0`murL!hh(GGV&3r}%wFf%>R zsv&W8aQX16h3%3<=XB@_`lIt}i^~{^C=?KX-ITcuHu_{uQ+b`sY%nD~L<}r}u*j^8 z4qRAi)M_e*Ao}}<-)I|yv(UI6O=$7;U%m3A{cyNDl-m!A$db^=h zGq=%@K2a6uXzVbnm01t|FW5i7M(asVM>yn6nkOVfs6t4jPfa7w8XXaoG3Y?*1Zkpf zm9orW@TaFWnzR^=7ut;Dx%y>x10@C9Jth`JC!~;lw%UG}ESmB>nKRJ7y=GNbph|Wq~%u; zD_2K?5c__i59QgPLynLH^UIz{?EK?*zWhipRHO2TaYGppzyT3teUT6mMMR|yzYcE# z%A}i(CAS(}3$mB zmx|L<#?Aj^eNTd`o8gS%2kpO~m`V5*0rvnQZ4c?G? zIbZ?3m#-{ue|>fLf5n10YcTQtArdIozk6`mZ}v;?Qg0*8uKUCBZSNjl18aZ@`TgUY zem^_?;i>H(o!|G_CGzRwg3`-}WguW%#2ZEffezPxxb3<5sk)Jikg=GFG2trYve2FW zS1kDa=9!nLN6J$YGE)=sQgvtmW_W)0Xr+Bs*{9k|&kckTk%9%pRdbo|=?Wd_uiM*; zG^lc4UuaKv4^i#36SGI3R|O*F8Pa?d{bY8>BK6L_$g$KjM9T$%?RNMQsV)##0ghB)QeKUOLbq z6i6@KTvsw3DS|lO8Fuat+joU>XKL*iI=zq2FMeZH=-uhM&yIF|dZO!_M~41(cK-Kg z2ERGc``1(boX-xmeZ0Tv%cJcu$lshB{p*#f?;cwV#r&_*y{-RxXZmjx-d|hs?W2=_ zIXC>#@ot8KUv8>lL-fqJ?^;LUY)$r&kadU8u+^jA;?;u%YYWq9?BGxbzS5zY%u~?_ zxWuNN!fxg?;U-{|Mz`0MrDZO_r@0_YO_Lds)+2d9fP(Vl{%mzmroL6HUd2O)um&s? zg~viHgk&`CGJZ>n{d{HJFV-~te0A*Q$?%IyYnXm`rRtJ!BKdoOfS0MgTwICE;MK)d z&n&FEJrKOnRz%_Pr8?)ShKeI?%_n-Awt9Wd+13g}wqIdEO6oS~$rX#IOs5+EBTZt< zFZ4C>5(2DbKVpGAEQnh&8;=l>%tF! z1)vdFfO8rw5dfA%k7QD&QXAhU8DJ-}p^Q^9lylN}{x8WXt}d)%G{{Xi;RXQMkPrE6 zC5Ve)3iwr;c?yTonJLZDdkyXid!@_ZsrJOEHx7Fug{Gp6L=(n=!G@usmeE+K(`&EL zCuiBzcG%>x?q&TAON^JrizV@%4_9KBXEPgz%5QIg(LDUnPbiqOq$kjJ$x!9is3gBZ3ml*YlH)vdiT^{D@KfE({d=Bm>6pqq?P3Tq3~ldW?TOnMcy#w>y;trXj#I9mWuAd>0k&2iyreTeN0Fh71P*7nz7cDv)aq}Kf zSmzY|93A=D*wrY;tkNl3a?E`;D{R4HXC{h>1Le;1bsoa0FZ`d?kiY`Dc>#BFjgmY8zT02m_fR04KP;`3~7`01M0;0Rc#c;!C8HTb-hc=akif?T*U3lr znt=#F0PjHo`7;a!Y==Mr{K&it6cFy?814fs$uG$I(iI(y11~S@cyX%z|1%e`BjUWX zZ4nBh_YbXj_rSW}>|g%7gDXEcCT;!T__}uwZTN6@3j@NRPi_12*AuNduqAuceGbyI%cJV;|xUL zGuzrie3ETH1OTXk7KmYCM|0Vpj-ZI7Xf4BEwzC-&sNNbY-%^J}h=>XFr2++HUVv97 z3wVXC9o5tAA&IcMHT9)Zw0L!0$=aBIb)9drx^Swtcx9{{EZ_~FUla8LA#ATUMZF}` z?TEVf)feumu}ufehojC5?L}95ik_b+|M}VwfubMoYhV}j-KqX>W_!Lk-2Ua!&Tmij zesQGZqx~(=$A3BAhX?tuSC)}MN44cY@2;Bu$E}Uu-B|tI)#YDZ{K0Mv7QD5w`lZRh zvkSe#lO47muFBc&HEeO~*Sj=ZiVe&1lec=zC@?k_nI*#MXot0_C+vC{;Sqgzw~tCY#Z6@j6oa^l;g&zS76q_^%`HY$#`c zg?mRhw680+(c@{)u|{%ilnE1nV^I>}Mhu0Zdd>flArUUY`5{+G)CBw=INR8qk1Mo0c&8_nw?sdL3-eTWFZbb zG?2l9$E1+pt~1Q|p%pB4l<=@(fdlHqUCp#wVu@qF!m#k;-v+P{K^k$B8dyLE1$dLA zGK$3N6hUm5lHrK60ycl0udc4R8YPo<4pRnU8EGWY1qy;?t};so_AZUnobQwLZm=L^ zuX5^L^q$oRTkFf)kPJEV%gYL?+RK{<>j%dMmN(bWF9k2u4y&p#?2j!PT-zF1;I#$% z8V0*+I&=>SR-OJ>5>+*GC~gRb+-_rXf}T)SMQSF}9+Nt%OtmqOrOXvLsZ2jeIp%BS*^deJqpPp(}rsvL0AbP0WV5B&cxQJo9l{BF-bNW<4)>Jp}N5t=E@;eZI>0`U>&qVCzM{Jmb&GOKdHs%y>9^(r$w8L8xx z_Byk195WXzwwu=%WgV$KX?DqzFo(0%Qh& zYx}wsaY7b|Od;7I7H_8H(nbixXJqo289_eq1rXG-rU-P9mqU?`C10%&6y zZ^*E|*IRa@h0(wROx$ZPK|aKX*P7k;JN;M;IMSU?umE+b|8`gD;~m9vULAu3TGMCe zS3kcX{M=9tId+T#-26ZQKpJ4hZavK!@+|KKhp{dnWu@**~3w+PKPM zJREaQ2lMtw6`9AHJfu;81t&(^zyco356!QK7eLg5h-iO*!=|RJ1W z1tbu0c(c5waAnlDJX*SpR^w__@XYch-l0yE*dF{?^Y9wtqg;@$tSE@%~UJMzcTdZ~y3E=V!C?zdASm z?G>RrrNZX#cUEnc9mfm>L{xt?+Xq?j!QQ5~H`czi#Q)@iqDPwZ4_BD>`U&vTZ!R*e zEznN;vsXD;GOJhGRLg8Mg{!d);5Z(~K4v%cWGP#X>3w+?+K#)k4P7Qhzd2)(-7w#j zhM@rBV1BNl-K>h~6s_5o8m)4b2vYAZdu~|7RbwmQdVgc8n)BwedeK`j86}cPF0*`b zqWYP!a>~s3jO;aImGr`50y1zMKz0?}8}Qxe_T6YNe7xBKvv#NSmie7yN%}Tc?r1>Kj2FjnK8UqW;|?4{Fh~3`-V^;Ok{LoYF<)u zAXP}k*$c@FA_U`<+_N>J0?nSB6wvF-^x7JOzE+Vs?y!!UGbSwQD_mB(ED4(1U5vxn za=T|LQ$)*M;q|a#2(GA#b zV=mjIGjm5E?^M`DfejD;=R)@LAwYr4p93{eM5h37z`v6J6$^ywKh6f<#rrG87es*G;3xA-~bfh@CHNx z2woT##IXzkBE)nAjZuubfb-fUWi}n6-fTtdOUs&`pJ>8*{0h3FIA8FK4Fhj)8h(2V zTB0$uL}0-?yC;6L7rtO68q(h%+3@aRY1Icuw-HMxu;9dWoIBW#-QbU>cKzw}ZqA?2 z>=8HrBL{iIP{8^0!T~l#A73~C5TGFC{D=jgTs;C1aQVkA$zoH)`~RE~F8t&6fpe3c zg%8gm@hX;Q+FEYfT%I>8H5Hz0F9i#x>%E5u8+h7hu`lL=zR2$G=-$3CSTK!bw7GI; zSJnRh7;^#Uf;bk`uuwuKD&i&@Xc;I1JNPPFe~1A3j5jvI0~A9IY^)cfK^zf83>`!R zB!V1BDl+K6f=w-zNRapdTLDU?RS_Q$u)4lnstZzPL+vHe6Kkv8l;N--+7b2ai54EL zD+I$%w-)aYSx&_APt@gI?r`1cb-%bc_{Oq|cQ?k~USIja&e;1q8-Kke@|&%(_jb0v zx2OGs{av5V4u5`j@z+;Y6Fc!eu|>C6O@DP`!53r>6%0c%%af(I58FWgUKQ z%y+BTdA`xQuS~O}ShLM*Aa`qx!?4wFLxHizsbf0?5G=8&;EP%N^kk;Bo00}>#x@h- zq^6EcLyy%677SPvbU}^hYMBn;4%!WhI#pUonNq1zRO>a;`x}TU|a=p`iwb6d9 zK9{-RP?ZNPnCWic?F)?M+xl#_N)$tgP4q-K8;mK*n6EN3BnVrc#}!Cn;FX0RO9A~# z%cS6u#Tw>659&+#lib{BdAOMIDf0@OnUzMik&%q)>|~|tp#*$tv>lUzm-_G=;apBm z(orF+gB5m{=uokuyGMDKOxA=Qq+`1NWfM5Ktt>hD6kqX`qWc(`q+a1OjEG zD^gRC5@l+%GFjv}}sa0=Z>1MM0xluS5)+ zn4J7TirD=$;RtjPcr9fSV{I<**aJaV6`)Y<4!2izHwMJz-xlc(76t>3vf{kTKzw90JS zip+SeX>!(}4@V;6D5RR-d4c#vG3}6fhCsUwAxL2wpta>bcuj z1`dfxqBaTO!D0}^P=LjZDT4c-%b#(8103+4xd1GHEReTD0D(Lsz!wlq^xVScXUCcd zGks|(eN**l!Cze3@v}AaWxha2i8d~fv49;BrZb4+-|k=b?twLkh=`$hUplhsy(6p9 zl_D_ZkYf!H2wBnDz1;aMg+7?w&do1l!CxOc!FxbKERL=n`~EJiHnW^>Zk_t;oipFx zJNL=e!}86~P{13;0eN3UN9LE;Fa7JCeQzAwieVfMt}ZKmI%wWfVUtd_6rE@*0Sl1r zBODS^&z2xEAw~dzU|U=D&aR3r&3rPzXs~~vj_NTU@;TyqZ>#!YG-&kW2H4tBv#Ym` z%@3l|9X*xXyDPSL!zNeJO2c%(G!Z8ng44}3*LXLfKy3@HYm|b^!`{h|dnFJ5*b15} z7#o&Rav2Rww?)tqtqS?D8?UQyVP>XLjp=2&#+&4+ zdbf2dPq*G!3vyFE6Qjc07#YRQ_fnDV`lIe`X{|LGta9&{GR5pB*fIy4!W9z34=ZV{bL>M7`JM zckQh9k6HQS^P?t{Zr&VrF^JN+{w*4%I^88g=Loc<+k%@pEsdx0WO+hQ0!5&+uGyHqT;sTA4<5C-my2CQS^~`NebR68TO#ecuvPnnmLnnbX zLnILqi%R|l-w%mQ+8m!rojaF>5`e(=L<}8qGZ~);N^pi1nXH(al?h2~j6~XKn)2UM zrS#McWs1q_e9sZ7QoJ!`c+;@@57Z4rquWo1155 zzq6#NdN|iyS&*J!OHo$aE8EKJi!H{oOk>#UZO(7@7RCC8q)@QkW%gB-)KwML6l$D= zTbE>)wgg-IqSAbfXwlM^fu^wq9gD~NmM!dBgfun%;Uv?XdEQKOou@GW;W=srl*U}@ zXmTlCOHQKSJ~b^PCG8>o96pomK-C2}r-jI6|D-orW2dR8DpBE(owY0yWsnkIF|!feBo z&5T=&q|q%UxvTQkYaKemswuRb3EKCUtJU(8&jV7VN|e zvNW|u4RJ@p_pDJhnRQFO`O^F%`(UnVtvlzC-+m^TPp|Qr8ry7j?jsTBrD*Zlnw-l~ z56Ez}o`?0aOJVNo0xE0huH*@xT@j0-3zd1I)2zwELqGEXX%WI?P+!Qlh@#^=jm6in z7jX60I_$|ttE~3k2g!+H^=)Qsm{M%M~u}Wzr1$#%SR4ASYWH>4U^d>>E!Avj3QTvD^Z3t~ zceVs}wfGO9OKmD8weG-R{kHBfzhza-kHU0QQvmT1S3JVdErimwRBVbCBRj=f#@8J(S48vBCl>! zk#@C9y`n%p zkvs!JJ`|>{MpeB!J!Vj|ysg%#La>I9b(h{5EPrYkWhn7Nwa<_7;2#1CURgvgQS1#O zh}avUDq0$5MTEBK`Na`rr+~&w6Ljv?$=^@q89@{;EDk@>!!wlaS}Y%Z;L-ZZ3qu1J zds?2l8Eog%TVU0i>7;}k_t<)C?fQk<%`$} z#gjw1%aNsUmvJ%cRXRnAQk5FF0i>kB19PKu(@``-UAtg&ah&1iO5su$Vj%QHT-aiv zuh3-+5oZ!h9MPCSUwww!nxhnU1|Wci60hRKms9`&hpB`=lGs0oNiRHf%Jguq4HL0CIRS+f!O>*zu{yJ= zlv@6GRkZnUe-3D{rzDGp%U$K!hbr=bf}_RRXoqIXbIBvxS7=z{AbLVoZBRi@J2O;_ zC^3Tyft)m0n2UjCqbK)Bnf+Xas4t^e^>oBe_Ru4>UJ8wY0$~HIbKYyOBr<}PKGkIu z8^@;t9`#E=1My+JlZJ7CQ9(|bU#B|;M>UIogKsYgI>BveacRn!96TttTsGEOr8 z81k2$WZW9Uq}GLa4jSlqTnj%aoZv8AHV;Os6^i9R~Jk7Bb=&L02}m<5;)Km&#a>D$Ln0|i|F-~jJM>Di;l zc~8*+mB?RSC(jfX`7Cev4DbJT?et%+p84$NBS#n3Ri->V?8w+%<2)Ail0kH?yX<6V z8DuOOq*LYgMM1~f=E_wK6&o=Zv$kO+Lkx9uIni-!adx*>@9m20>zATL)NN`B(pm;X zfE(d(U(HNBu}HAX?JRsMH&SKUQi1A-v#V2(&7={LNfd803xW^)c7ZkYSw{UF0D%#J zH4)1r`N$x!zFzniwl$Q~ipGLySH15*gZGdWD@02Q6dbLw9j(hd-cWS3#df60eY7F_ z1T`-0u1DK)?hW~#9;>)JRC;$L@S0S|RPd|q&7YiJ@Y%WX?{2R7`<*R+yEpxhdz*0@ zU@O3GOv(L6hq^vK(Dv@8Fi`O1P{Fmf%u{s*yGxCm3RPx9KcYX=(_K)s5>m$7Ne@)ZfVIjJg`F zI+&3rVHL(~hQRQC9a?R+ zMy1b?#KjL3aF?^nNl&Bqi>6887T`nibdKOfspS|FMCm2&WU44xv#{;PYFtizmqt&* zm0UAJ2{D{6%N)HLyx^)9^=K?`Smv|C0SY((4of2JWAMjFgG^G2xck8Y*{{I$4-LSP z0YOj#=}LZ>pgO$80uAP-;u%(nxND-TA)mF_+W5U}p;-4YIwdayLZ0v67rZyH3yUNtKXpQe`&P_Dk~@&v*-3)BZ(gNHF^x<<+58XZ<2N8}UdPP4}q*l2UlAwEu78O1X zLZH%9or+YxMlAt{)elSnYEdK~v`@%=#k}%)4p0GkOd2WCrFcA8C*`Q8wBZs5g_* zKnP6z)}y6X!Yc4h2H`X^(ijbDO~zJ>4&H0XVZlbZy)^$sx#N7LLsVI!BC2=udMWC? zL}Xl330T0Td%Goo1XLafxc>>HlTjd^Oy`!6dx8Y=4oJTG84Un~yST{WF+=hF5i6v^ z>k+U4@lXLX2(MRaOZi!PkA)VA(zKZCQcWI*H!>FRhQ$!~KlmY-V|-{pK>Q6qf;kO? z!M$!NaI4*WyTbX-u?gmk*C_n}XB zsE+DO8ZV`8-~cS(^+k%2*Y>`-cHn302HxGZ1T0`a_~q77Rz+X|0oLzJhu8k@;F{mf z2qqZ<0WgTmiMEkdhprTLDPRB$Fdck-Rd5DBT9CQ_x%@f2VI~j*!POIgyLBEHGWY+F zSO5xu1$_9o$Ig60;la&E?rvSwWz`Ml%-a(#I9%(J&UO?721lBG(=|?tC`UY5BPF(} zaOqU6Vs%p$OfGs*)H{&D>uO7OwAJ!>&TfdX3B*542ABj`C++X5MnWW_>so_2jCtf2 z=Ht%r_U;J#CI$j_Lnwzp6b>B29%zR4syKxp)d-Pk)ISw0;FUjMV^bAK01Qxl%;12= z6trM=*x6LJgPEefcz;9jp=RIFCeJY{-Ejn{d}q!X3(%moYt9DMwvxgv_X+pO%e zC>t~>L%Er4`iudanbV(VSm??g%+mH6)0_2*cC%0pH5t`m*aCG1V*xf$>2k9hEMP34 zz(BYQmejnmxQ2bu%XHdLMP8Vw;k>vk^4!vzXD6y(T2Y6!KqS+RGXzwF0`Uz|*>e<{ z4F|!6JKY%f9amzG*%0o6%ClWfmwOs!>dSXj1$Nekdkb7VIg%-qmyl7Q7D)`+G%1Kal?xs~B(b<|E~sJUhJtm2bslU(HXd^`Eh){`5F_uA(8*1(hHjyrJC5xunAxvlhEFXu1yt^BJso6 z%;GuJf=P(`7?>>hE#52}gaa-DTwP*RVS<^LD1IZ@T8AuWP`p0qg$21Vw7j7ob)mmaNZUR4}f(B8ke zyMNr}jh0mOx5S2BmaeXDj9KJ@(oXD0S|A!vB#CZ;t5@_JyACuE2m?!`dt3tsK;wiVr zv4DmfMuTddvd*Al$vwh{|)aHuSY z#`}|Hwqw4mQ&7nMoa4c~LnT?mCQZFMwOEtR--&k1)?8~}u6c;mMTcocq2*vj!Re4F zHwFuE7d#RxB9`tV9cHL{8jE3$dF)3*Dz^6xURFf1iimX){x4pEgIg_SVN2!@qxb$&jr&qBpq|gTOH}YJ-X6TO8iNdsmVL%=Xc!Q$oM=W?|poY&sI~c}n01yySgd17L zf@c>-o*oIy(juWQS|pqXuTHhaO~_0K9n=_r1;TH(Vd$+*3x230WElnNU8!{egWhGe2Yp4dicHRSOhPVC?n@z94Scfubt9)Jiy1Lw1g zN0BIwg936!1)ur)%Bhbo9sbL$D{r6PzBW|cXL)!>rA=I# zjgkv2*b^<-QC~zS4fRVSCHCQft3TixEX`*~7%$0PUhbGEwXLl1h)9TVF?Tlm8>zko zwGWa|K?b)}APiz6IM5&2-xq~xfMezy9BdMy67eGtfrWoZH3wwjlbcB&LP#Vvlx=UX z*@`u-rD|<7K$Zo8bZeuf>*@pwAW9diaCAE$?lM{(M!C71N_F*_Rr#4^-x`AX-ISVwQi0nb-_l=0s% zdj^&%1xcFntQ@CKM*;=cFm=c2mLy{JlhcwCRmq8j#Kk2&v`&%~4UMayCs>!NF{G$q za*H&EYO5`p=d7?~6>D^8{<+v8p%DD@tC=Q{ZqkTj)RJV4q(@054cVxq%wYk*6b1xv zz#aM7Uogj@4nqMP0=pyNLH?SYmItnYC>e8;+*Vt_<}xSZJxC)$n|XsEi5#_n4`u<} zWmZCk()8vu6IrDsmKqXOR)xqX&XrYNiO`?7i zqCjKQD-r+OMTn>*d}8c&keza$vqdU3>BRmhBaQo8e%Cfho3(SsgFOZ8qE2xzatV~mC;-cu&(X_yP-`=7lK@1O3jWMu?8 zNWumXcNFu=T!5U2t z399((y&Iq3I(c!tcd>>F$VgC$_?dK#xt|UzFEdWa}w$EGTmg zd2^No?2Afrmjw%^f`zNYf#pFr2|;Y}p?XFCaD*C~Vgl(%l)w%KEr5`SD;#Q>=Y0-0 z|Gw^8IB9@D_M72eAc+pS5_7@Em;@s&w58j-YFR<8r-`wyjM0FhfZxkTNr+Veo5qrT zEv5ULOAj`Sq2O4nZ??@xQ1wy%_AS1XErn-W1E-n`jz&E4jIb}1dpK5jw6Ta+xbf@5 z<@r{@-a`RL@ASC+FN5?sNZEq|A8um9%q(r+&(vo|wKKnq(w!IV=fqu11yWFl_Szug68yTgqIiiz*0!s|W5CuI}ErtO&<0VCT z1DTqBi<KRvAkZEjlQ(B=2av_D`PKA)IL2{1rRVM@EN8C<^sM4f$9ChVzfuk442;TD|)Qe zcBhM1kC+Rh{jSaNgN-wFmCKy=T8)|pbX>0it+mpWO>C_pT|)FJuz-*Uu2o21 zy()u624Wtuo=G8}ng@85B}JJ{cBmnXTBLBcEvPq%N?xAm5eY#lqzKuMFptGAc?e*X zpIB?T#Tg0;b(v(NQb|MA4eNfkLkL90vp|7@-?9GK#Dewq zoM3z9K)In>Z?9f8eP-wK71&A&9(+ihVj%t7l$e;MNy(cx7rsDXfryY$rUL}}q{Lj6 zs@R~R{aB0!Jmkx4u;2+Y&;~iQYC3E{^ zNxj*c;T#axj}6lB&q5w9ZtD5Td<4Gkmca2RxR8 z9`i1rX^HvaPQ3w}alR@gUzv>J0m~XrgZVa{FslV^XQN^eAaX)b$CY-rL!iKATw}2k zOa)*8y*2D(?sb&?*Bucv0#E&50jz<9?h_+{EG&{M%9swWhaIvzSuB4V#5K-RNbLM$ zj!QTd>OAa1sWE;eY-R%mG0h*(c8FO(zWSd>MoW=z`-jk5f$~nxqk4q)xAI8AQVM!O^^I+!-8KTD%vyoYiZw#_YST54Tx}P z11Y8N9^LfY!yA5gc=PX1Y!^UqdiMu#%IEih2yBO74!(T!xWIx(PyXZ1Bi#HTf(!@D z2pnbv*=ff8kEry!+vhPG@c!eAhd;VF``Ptl-`;)ft2^gj-MMB{xp_^Y?hH*fr#d`r z*};NMA?K)$tt}uuDpQ3w!U}sk~+yPjyqg|># zFwn3?=!t@$3rq#!)Z5y^j0rRzY>fB-f|<^$y)6O8fkUmOhgypdGZD1;PIi=>Xcwcw zg+BkuR_Dn^FG8XtH3i4&Z6}+32c!81qmI)Zr6=2p*&~4kFRf`{NA!oI{Q$w2S5|&^ zXEO)(_;1qVYe^vb=EB0yPW69$toyfHBk!yWy}YFK$pzj=8mX>fqngEbXrs@}e?qGZ zO_b2kQat4_kTs(aX=<_rJ8aITT8uKBnN%xb&@y}5!QAPlBj zqlg-{;+S=)GI*74v=`s$4LmVeL4kpc1+R=(|9n~9&sQKPt;JN#r0}!l^-u|Mjv)5@ z60scu3xEk3FP<6k<4JpYJorSv8#uV#>3+0P%mp)*uA{YqOI_icV;#qut6`68R7!ER zWT>mn1+|%Z4y78;ZyKQn)Rkf8VhZ4S9$}}Fr`N=}+|W34MKqjJZ&MqqY_3qAqt5QE z%Fg0(6lF5Bty!h#$(=iu$9aYVE^>Z^OP+8cwjtc&)Y}xOOpY`iw|HhcNzpnnJIoV( zX_ymWRZTS6Fck1(f`ew$1R`KWOBV@AV%a3%AcK+{SOb5y-JvqFF9Hk5SoD~Tb{!SX zB4kyUq02McFbsqWYYMe`c3y0g(7Hkj@DE^93i8&VH00>Ayg9zMiuTeRuhWpnK)^ao zQt|&ioN9b{Ziz-!Y0#Bt=9c9J2U=G)_+n&Lhf3NTsuy&&PQV}MB%A!%PHU3cuCSWdQW3XrMj}Z;#d2rf!YIUJ1JuitAp)}E6!~ek){11!mI+Ybr zo|Y*rg@=DWDRarfR3>UHGcuEej7V6{Qd9gYwO^s?v#L9^$(S6c@l1IibyJDWz>hpw1Nc@ zJOWq%5XeUW!BF*+3#tJE;NV%BFGr)m0Yd=?EI?^Wf+?;u_yX2M%mp%E@bb#8H`fon zwQ=;VEn{!2U+|W28Z7;lw0G*gL(*>!uK4Z2b?+VC2o}71WXpTU2_#}J*aH@jPxSev zeMA)f=Z@&aUoOpldHKYTSit=+^93>%U?;$1EF%IyfTEP4Af8xs=Hn}ezPNFj#G((+ z?x)*wwL?AIm?zO}w!6kU9m-wl&t6=d+h|rqO{!MAl?v0v0dK!OtCzOMBI{^r{(vvP z%VQfY${Q)l8!pbDU!1$BvT%90m|f1=+LFapE(A#Ij_`#EgE7(7^cFOeNg?_SSPJ1o zfIenZ1Zzw$8fzsi3R_#GO6CIcsfE0>rD8=a02XX*CEQ40!TPX!XG6(Md&Qy7^22Q< z$2!D0&h_3=a;CfVbeDjGbA7(!O*yBUi!OE)oN4f!XtK{X7VWOdnyJsd*y}&r;e|@R zF&unzW83@t`>_^$eNFo6y2MZ*;NaH!@1>j4R~N>JZM=f}J^ zyPW4^xd+M(>xy(t1S<>F#7r#8&RCkKov;}eW~qkqO#`|5eyf3TfZM*!B2Igjrad!b zkm>@PiNiPmn_R0&iR#nCI!$>-T7@!$9d5*=6`Nd(zTKW9-RvkKf#R9rYP!v6HIv&5 zUY`iRv!b33%a_I~UtLra?>URSJRW&-dGoW2s-9R7z*+zn5JmCo((32Of?&aOL!PJm zi@<`r-9BcGGZFW(8V_rt^KBLPC;QL$HcmQn8~$Ie-a9zX>&*JB{by_cn6GBW7Dc4a zIR|vk4WJvTk#o)fK>*A-pv9a?F-a7INQ#+a&Z4L+*^(vMmKB_2Te5O=oNuOftJeFw z{nGsA+p6o=Z#TQqAOzlXpXZ$C9IGXS(Sb@=V+q!oU9gcxdA7)^RSPU&GndnkQK*XY znGMj>OVVf~PIs9%RO$|-z2OdDguq2qijIOA!dZb)1ie`;(~9Fg+%K7zd4+8901BOc zFhwm!i49-@&GF(q6`FV$I$#`9s=$GYMIkMZWhcj zfCU`;bsBBKLl0A6Fu{Pnl^{&G12pxfnKQ(=oJOx#7(6C_WvB)$5ZW5K5^};wt6pKG zu<>hjriXrrQ8&|XU_ni&p7AlK(h{@;d{(m|FZ+MkbOl;rX{7x3AO1jDIKwQPnfAD= z-4*FjeMPLJAw4=aoNcY@PupY6M})P3q$NP+0gV|J$;^x?*cI;nE)iyy2{bRCyLH>+ zR~IZku=0`fD>vVGeEB+LX4ayAeYhwO`)PpGr<(!1A^wLlAehXQEzGm3WJXybeV(|@ zMnt`*ARiSGzH+pWP>`bj;@A&fxb$kSOb)O_HKFFeTA{Z{0h<8aVMvGi6pX3V8LCt| z6b*g4e1;sSLx|o?=pDAC+&ikhkA^He{Q3hWuES|BIW+{_XLm*n44XZkcI_&)VzYv> zl<5MzCmsnXM~wf{z|Sy$rdwB3!f&|GxiIKm5U{afFr9FO8RO;%Sp{GLHWR06f)|_1 z&Njr(H2AJ`RNzL6`480Y`G(?~ohgYU00KY+ETriU!60+J-IFZ^3n&ff5kVG9e8DX| zhT0SC_6!^32G3HI24Yw5j@=u`@Z~PIdMGHK8^LBGL63-j5t9mR{*(q19MCcX5f~wm zdPKZk!UC!T*ktk5`m5*>-R>_Fe8B@OfI9{S;EvH1k!m2;aE8}`2vh{QsIvyJ0HeBR zXX7hbN1N!yc`XtaP!6zw103t#Sv`d7JXkP!W7`dLQc#C->l6`sMk(h>CKoF{QyFfZ(fh zq6(1sVt@c)DN8~G#?StI^TdP9v(L^S_?%hgt4F`PeesjaPkeXdBIeeAyLIx`()JB8 zD_F3vG3(w^VSc2{yrR^;An9&4%9^aY_F`MN)jT&IW^lH{B%2j+j3>Q=2~T^-F(>Mq zm-H{Fh|EfOCd#~%C7z{~5!y%dtAZ<=OBoY*q)}i269F3=N;lM(Y-I?!EzP_zgTwH} zaLtUOv492v8T5zX3%2&x0|e`OGuh56CJHunWU#dc3)a;}wlv1}b(J3;%zy$%2h(Ep zl^!2Rof)k-JyQPEKf z!KuHIc7JWn_gB}VAo}Z_tpW>fWLHaA@byz;AMS2@XKm%{OG};^^Iz`q9<6umNT}B* za3i(kA}yUXh%j+k_Svl$=4p5U( z<<%Nx%~o?-UW9O{!DQ(5yE$BSd!574z%-_!G>D#`zyc8pI0F{E4O6h7hEy9-CM<4( z7m(UPlnJlRtNzJ~Hatwx7oj{wYKj{LwZm)kGcV7pesQwm_8=bZ!7E*n>0ANd z)%eW9@iV<`8)BheixHiZ9yxG%^S{Et>=nR5?o-qOjuoO4ahvTg-VOsK#z!)Iti7$n5rSJ zHC5Y-JxU4(9ST!~Nw5jT)7#`(jYnnhD~(=*o{gQ3mD^~*-wsY%K!ehV_|;q>S|?$P z1&Wl#P0(aw)`1UZb^(!&u25gBakiJ#wS+5p7oR7h*kk~kl9Iu$u~-WAR-KJe<5 z=57rc%9%F?`S2hLXU!q)Ln>1~7D*t74p|a^dw|h2LrDfE{?t9S10x;tSIphfR)brA zN5UjFaK;&|GHtP*xdt;HNQQ^*&oy&(($rEfZuxdkK}om9F%8%!x=TKsD4= za-}o*RF#`15d1JxW6}f}V`bC5_wz@* z8EFuzQSsuggmm&}^9KUXHTopU==Dx4>LPb~cxB>lPwcs&N-@Kn3p9`{il{`eBH~G| z_!cpBT+Ra^M|u%wek|&44W{qq>VkWNgx*yBXtEJc3VZ@2mpb?YT&-Eu1r!2=9y~wA zv_Tu(F?@kk9sD#qfG5RIR`wt?#l|!jhdlhwnpwiGbocTPb}k|0?ET#<-r1F1`pf;R z-y`m9-?HEBU-g@PEB<(N!{<+JW9kf}I;5pvpL-nnP;L=^OyH%^3vu}W?#iLR-aPiF zYe&Ah^u+g94|Bsa+`tk1`Q{mfL!=pecm2#a*H3?X;pnGN9}~$2x1Rdq%EdokI`Q4@ zr{8&O=lTjOE)K`DE#B#oZ_mVTEZqf^ohZnP8)dCW+Ty50Ilx30>jXmjX> zoYvu>d%))ykNCzy9<;>^O2hM#qH8p_G%&9$xUf93q$<8FLp)^(i)37+2v=(%1)1#o*FJY-d}RH-FK}gcBVaaq{(-zBa9oxktXNCI^&K;=aYT0$C}+2 z$5O9m+dtSn_WQ%LzdX0-`)jNIdTZ@}Jh$~fU)cHgI~%{dFumlP6XV|=8~*rE&#!ml zOj_~6RP0)x_e_i9aK`jlxqd@PgTx{m)=x*QSWYiZdfEJE2i?QiOdzzg>gqLebU|%K zWv^95$UR=wcn?p7o&8Qd)LoC;+U2%as%52Gb%jA)X^=PD$%s|9=#|68j&Yw?U;%jp z_r@zX{Ff%n-&o!%CXLY%EvR_|ig{5T#4(F` zvlk}HpBawd>W|*&OOPeSKkvO2-aVCx%M<;VX7z7PB|3~`oC+++kp1o{PFrmO94Md- zIFduj(tXk93l)z<0SM-A1tbd~Fe#Ash#+KMzz)v|oy9{9YW^RDJ%@>6r!`F(lK*DYexuH6n0~b)sa7-_)V&7vphb%>;vBnrmEW*A zZr@(&e6-xRGvxyUm?PMkF!L+2znqzZtQTxJQWxBta6VQZAgEwp+PSyXye(#4xY5OHkd-1j3f<|V1Q0SNws~&Y`2hlUeQwzPxq<^(EK6DJ`8?oC zPytxLwtpWBa48+BesMH&cSt-bVF3|0QqT={)i2I%X3-;(>H-h}EC3V)3M}p53Y82N z{46`ldVj;@&o@r}V(a{$Z=Q#y^n*Ps-`kU2fhiGi@S8o$Kis$SBdn|sOfzwYz7%mO z%F?gSKE{X{>&tToa3GS(0k{CN&HjG-(a=Z5QFZ$9&I9$h5mZ`9FqlKT|WN( zjkDj~Jp1L96JK09@#U4{c$k6(pItfox96^Ybo$V~_QlRM|CcZgaoW+FNYv_c}&G#e;rlpWDi7=p)UE`^RJ6iG+Vn zX=q+5GCv(%P#$9~tca6GHm}SNzpyM5Uy%{M)5wrS;m|~2Wjx!I&aUmOU)R;JsjHT` zWO_;4dMnqomZDE$ECGq?fq~3pI86+dpC4~JJz9NoBzkagIaI903D1!){Z* z!`QB8|5vvdHH~^rqe0be(~T4x$I+L1O;E{wHZ>JNt4Y&pGr$YrB35qHg9Wu#O{>$; zVpbu~o(TECf-G2Y134SPW|NuM=Hoq$-(2Hc&;j$fZ=x;$2&fCNpAdt`j2`5&4Hz+? zDER3r%2!#=VYX;CP7ce$crG{hOWR&NFH^FZhs~h?f};B-*KA+Bo`+&K zI2UpN7O=?|8?DqAG-=$No8`!d6i9@^Ml)S}_HsT2RjPO+L^GpiS&aY;!7l5x`ho)H zhVh|*LBPZaDjCI1$ZBO{1_C^KJvTV9vGjR)7L|grEgD2NjRl*z5@)0~P!`oYaXca> z8R;o?4m1QbG@C3SBrGN>+N+YyZ52I@75#m6lOCCi9{qI68?Q^0lewe#w;AF)wb}3w z^_z@@G9!J`&M3mc&ZcsVbWUu4bE6ktmM7JPAfA7M5Ru;8nw4+96# z!Q9Xkf;dJ^#0@$k>IJc`5n^_RakDQOE4X(0+Z$)TzIN)XE2loY_~hr8j(mCb0$A|< zolE@D`8my`a;?iI9GK|0nhmrtnk~9&O@4(=kun*ZT*kp*afi)}F>Se3Q*Jjjx_FtX z&2D6OYcgwzHtKO(`aHIgpmWG?hgJp)Km?o%2mSV;fMZtF!;`b)zOhL0+*FXlVL>{G zQN^m-xJP?c9#`v)V0Y=<9t48oW;qCV1ub z`L*|!)>9OGdVJBx$LD`{dHTDntN(U;9h%ZVT_@(A(6i}zpFcT_v*`yrn}514^YVh^ zjiJD~HuvEg>!YQ*%`w&bgk^H-N1 z1ds^XrQE_;^vs#sqI~qPlot9z4(XOscZ9RKbtW~8+N(1AHCFg#kc&M%db(Z$X|LtF=;R&k3iRws_@&zh`&&WZJ0wR|}g`OE4vqNo31yhS= zE!nhkORYa{%f~ibt9_W@9Y?abtU1|S7piGX*S3es95R!+$mGd4H>P`+O{}h`*(28& zX67-yhd-=UR$$AU!Ax+=hmo+vqJ7Z>*Q`v%C$G+WS|D(fXw3!0sUO3s>M(cS3Km*%M0mcbq?)--8{?b zm>Y8A$#tnFbOKM(mNH;7DERgsDZr)tc_r{8D;NWME3}RYGY4GMsZU%m_cKnU(C|H0+ z-LD>9_TJ9LZ*R@cBmMZ@-OJzGx#**VYXAb2rXTE^Mq&zmfPColQ+x3z1q%=n5q=C1 zfC6yAj1Mq7AdL^u5n}Uanjkk&AZE>Y{__h@esS^mS65Gpb>-A2Pagyh;Ew-z@zlpp zAOH5+$(J|ISzBV5pJnHAm@_(Koz0F1ZMCkbT(3aIkk%=i?UpLFlFW**R?h58mBmyc zS3-HBeL)%DY|~4)K!Gq6a5Y&p?M`E#-!T|+vj&2$p>XkV#4}kI8H@WTO2e}fKB|T# z)g_B6qAd3Q`Q_pHmGSJt>g0l|#FE;w>E;R+=5%7-xU~YiI!4s?^i~|7RdaTt_RL82 zg^9Wg6V>PG5zR^+A50$ZiNPa3Ia0Bu-b;w?hDyiQO!1z^Af|Qun1dfKJv%G){EC)W zvn{_rIQ7NJrJtQziUHkUZm#*yXE*)lGaH#O`}W+TZ%<86eR_ECH@jMXy|WF+>lf!H zuJs2_wRjHJICiD1o07(rLDSNJFqLDhrpr)7MZowy13Xm*OS#5Sr6D%Z*lH12fUFd+ zYB*)sWO_%PHbaA6nN}2}l`@O~GDc&SR@LS-QEAa5nuz%3M1w;vXZG4a+4aF(;4#@| z^XgxjNAn*NxemTSc-1Xw{?QVwDM&Q{CTiddMBv%Vc6vmJi+(=c@#?&4o~Jr^eopnX z<7M=Sm@l~98)3xYM5F&eg=1SPyrnYnWMAjH^2%Dh0r?3%iY9lM2zBfP0_v>JuhnxR zZ(o3uqGe%YD_0@a%lM7o@F;L4!Iwz4%})I zhyOE;QQAQ)Q3y1~s18oohAy|4feT>4mG%-wk71B=;!uGF4}gFJJ_{iD|6@T81q7o& zUBHzt5~Koe!+Q=Oksbm8R1jkGrxwW72wZuHXi1_2fCK)BXGEu{Mbrf>sZ+!iL}1H@ z0T2~Hjv~lPIR-qSX9T-|ODXvV#2P>lu`JHPJZYQbvz|g{Jh;>{1-8KiIpRp3(0f zpZ@*9b>PCU9>=6;9Xv9#W}lrD?$z)GUo$C&84>$=t}gie{83>tbmbI=L*HLJ^QY@) z??1eJRKf_b;IpTX(jbB|$khdh=@fl)^XX46o&Cevi$-(&Dr8PfV+wzA)lb@el^yT@L-&|UY z>BRr@+}8hkX8m6-EhXOU+mq9?KRH0MaRXtN&&`cf6rAt$o@n+xUgOzRYNa(qt(9s`txm(XpHmR=FGV{+o#eK3n6*ttHA4jK|0%VS zpJGO*Z?c#=U6y7OUe(6AiO}qzci8R9ULj^_D1B$Fim1z%<^Tt^R0pir=GG!BqDLfQ z0qJETv}QpKC_rgIT_AbbNkxH}HKPWaodOH)^ha)V1+R8S&NTU-sIYA=39Ky*?Q3sa zQ<-Vtcntrm@0gf0U6-cH3ubZ) zoZ2OB9nQL&BBpII>&~QWXNl+0bZ|$BgOvL1Njuj)<(|D2SueIk+&z|Y9jtO;T)HW2 zn{ryPNr}+YlI1ZTU1ilm9%8hDn_o5wxe&hD6kxK9b`S{%tf%lNZH&?;!kCECfJ%W# z%NyNk#6?Ix2^YRa0{uT5L~QK<0at*4Bme!n02Pp+0CGfvgas4=yho}OxJvJ#E|7`> z_J0~gQe6O9z~)Z{B4Gj2BOdYvSvcBBMFDWYpE9lRpaPIy3^ZgV=72j1HlPN`wgC%- zpmZz)5P%4DgfJ?VMhxf?5kf_2z?FZ!bcZDFn9@K30_pmEnXGyO_deq`H^RU*WVew?M!_?-swz%!}HdBkk+UBzN z28;WHo>qskgT2z{?C@BJqMj^xz<3*X<7JVlsDKv(?nuH@t0k;ghhhq{Budc#k42aj|G=^arr>}x7M z(iOP5p!~<{8b5qu-L(zUtIi`(^Fp`ogVq!9)gWC zFU(Kg91EUrcOR{@V@45(PgcJ=uau@)MX;qt3pB8MbC~}pQb5>(1(XJbV1Yp{{)q07XzD06 zL{&!dq}CXQ!Ooe&2*OPyO{76!#Ygk5D>*P|&ncZX^SId+m&u*|LR(CeZy zHUGhE`2}nVbc_3)T9nd@BXncqXWNsv+Jd>svILaD$!4)=7F}sCJ6{t92qY}PgF;Mz zH3S(h01p1!HeVw3d%yw^L0|#fJNq_`9kzO&%3VvJ?Gph8poO$}4{rbzBrE_3BGV}EZ`ZbeFQ-83?d@nK++LOZ6b*^1{&xT0SW-Y%L`jXr)XIZSn&4h;n$b-fe83f zATee7jG?m+b}oK*M|R=6I~KjMagx#iAfPC~mI5sJ@W{4b9oo$3@y9tE3g(V6p!kAd zvw!jhe>`{Ki%Unyw)_O^x{HTNxa7(L3#bd=jzI^hE&vOt3%x#w07jAY%4Mzb7kTgGN#>+WPyEba>hkRB zb7LvUg7Xs<$A?pob;cM#rxW9!Ju%()-j@2;SEt`tR(WqC@pOmh zaE(Z~-&o>cxOkq|KzavRmGpd?4XUAlJEIYzP})8mnHsbzDg|%O)+L&)bzq+)eEyz&ySWo z(-*nji;N?9pv<_lDxNJ3FNsBm?4D|)J#4dLJpqzcIJ{)g$IMx)gavkCpjo6<6cQyY zCWx_>Ku4t36&p+bh#gw02mk_IVZL6bCM?XZF}d|-xilJ4l2s93Kt!}6tkB3{Q=0Cn@crGF&-3+z0C~Gq2=`4jtpU&Hp=?=Jk z>U`!KWEkMZY{g6zKu3f$7HghL6bWjz1L+gFo*GL_d24%lr|+Q|4vj5gur=D??I{S%g|CNpuRl$j-2=IV%=o-Vu^)W#qw%)CK?p_Y5Ax9D@fBzyKI{ZE^RHmh}91MXyvF zU}60Z^9F<)>{$5D&P5CxWDyoYB)`9J8Y>EBkAHJyEAwWAAxpMI_|p+zgH^Re7<@(m z=G7+&vEhcRbWheLHG||&M`7^Exg(!lJVuk~^NUY0b^P_!^PgNg_QkbJpI$uu$@$0r z-onB{3&;8{hZVQmYOSKeqAN3zx?*h63d~3w zv{e=(7KqhmU9HWCXrW9cqj>}{lxvk0Iu$qA@?&bq^Vr*h2USKxi9&SETii~9vl(Zv zwpjoJYJ+C0y3Qa&rPP%Tc^f_MZkJ`MEH)<{qe7UjPp+*C9q2EAq9=KzJ$!CBb!sSi ztUn4Xe5f}L7#thU++C2ts^^6T>D%Ms+p{A#rs5YSl21>SU6@^UX?E((O`X5o*U!B1 z|Gd5as|%0({q7!oh|mvVI`Nm&liwd5{&-KvPuEqwvMhOLEVSriSMjl0)Bd!PSYw*3 zb6wg&V-W#mER2LOWPu4r5>%~IgJ?*In$(3oCi$3KJL(ecp+2Xv-6m2C(2|Oz8jXT5 zscM6v++eJCx|;O-MD3`s5Mc}l93wvGc+lHrF=fv{arKqm8mqiLTET)sX2$rfi8VaGHAsw2kIUY}d@+EnF>vr3*HO)!3QtB2#5 z?@Uec;YR=Z%J7Pc%BfIkhuvH0urqHKQ5oYpXIk&7HfLRqhx6If3kx2W7ZmCXRYDbn za$SXNMa%*N3F`a;%qcjK)2N{^;2{e}LAa4>HTc<~Ju>DM5(1F2y5m+Sy?s~*Oi$?$ zc?-1xnFubRk))hiKvjUQ2y|iCjD%#u%naGQLg?&-$q_PJfD0Puf*8&dWUGi^Rw?;% zR4SAQQmcsXgB!j@U^dZ>6XdvC4IH? z`s%tH;w=eVWz?J=Y8ap0F`4p|ubI1HdfB?y2HLiGH9=0@7G=(qNkMjiy`j1#>MpUs zO#C2^NrTejDE%sZk*?NZa~GLhh0e4+>@_<}s%j>uW_6|fL7551*M!YffeoSGy|g?v z=klpA=>*&l~=;DT2H=dZxAPNbPJX3T$1nTVoC!!TOxm@F0n+gK(p3Y#~?%uAg`(|!$Zq&rjY zU1csR0ffezs$DxF2ucHc6M=0>-^S9cdt14CPnGA%i0WY6I^QmWH9|%`U8tb4(67m> zF)Dh3wjP(3i2Fkop$j$P%XPkUwGKAX^Yy-yRn8OD#Uxll6|s5}{{IpuIL;FXTkSRdC5jh{TxL+{Tv{ zG`~10ghbCxA}VTN@a$!ri4YYn?|EfG^Xp4-qYx=K1Yo`aPq1d}&FSG6mkqwNW#LOJ zhJUhd>ZhCLzq>2D?B(gPU+i4^-uBhMeS9qmn7?^qH73^Y?q7v1-S3V*`uV9{x&Cde*W|!!p*+EeB}G<$Ds`{rzW#N3NPUP{SF6RI6ZBnDjLk zQ?-d6lYwi-ZmqJK%T0zXwufo-mS!XHP(%KQueihSg=Bzpo}UV>s*Y}GDBaqU+TY~b z-{L;rpJ1-wP-lomk#K!Z%`+?N?yji4Ilt`ctmuvL0TerO&UdeS2%q zuO1uy^r?A&xxDf}u4n&xb>*L~toZH%7Iky}bZ+XKW1}DLm~MG%Ma8T0lF#+~&$YRB z*IBnz+Siu~n+eQ@2#D^~YTFFDDxD&sktOwt5{;a*SBBC_D~A=J252{FxWS6L+h(9) zME?kGoiPnil*))VW{{lvU4t$(y2i<v$xLv4{sI{SIv$ujG!$_ zy$}W!$^u3UK!8jVm8E1D!IN}pz=HptZ>eJ5KqERwU;(+Aq|}E|l;S3x!vbo6fZPyL z2pbDHW;GNky&;MRjgHwWfIw)E3guZoi6|U$1&XmNRgvg|6}5&1bqm|fw$BH%xRLJJ z`~e8Cz=BT(y>o-fsW&ib01#kcTIwySE2;LHZ0y_&EgOrB72&$>n%T99hD@}+GE^6~ zmX>*HM_Q-It#_#0t2bt^E?s?Ov~xkRve;`3+7xyx-6Dk|RA6Y0mR1B(W`$E30O zGv^egTv<$=Ns1z7l_i>)8i9g>Rupi+lDGt97Tn(@WD_4Rw5WVh;xBJ>moaIKAq5i! zqA`>ULk13B8p+U0f_WCAqFI@{<6=EKS^EqCF}wcWL_Ju5Aq8;o92sbHn?ZrM@S#}I z!;As^G3fB>(jE}ujWy%%?^yh!>Cv|~PQ8gg(T+vgR~{LqF!<%8)4$r6rB(Fn1FHzW z{LSGFG=@Gqz5lb5JHY~?42Zk@^vwRx&L0K~Sbscy=(BS$2S-`xim)7F#+Zd#^qZ@v zzP@tutIJRb_t%$~o&p6VEMU?=44&OQ&ElDp6WJOJtmt{vI5-MuFwUfd)8@7GxJ@V@ z!GboIvDslrYYQ_LEm**D0RkX*HP9XcBY*=IrxE}HOi5`}Nwty)JQ7iXgEE7PJv640 zCACUMYZ3?^h-y-ivZ1912}_ashasCb8Xv4$r@hu;ZLphRo6)5%Dhn*H2(79Jt*@{@ zQfAzeaX#K2WOCr*M8!+1+kdjL@70ZMudHi&aYg0b1tm9TN6+^8PIUUu4koV6EqQ6W z;paR0e{*0KSn&OYWq-Z03U6w#;M=DcetmZGn^WVT9~vMV`Sm3$%U+yB$>uuIWZzk9 zS(CD$9GbLi`pxoAtE?5fcD;^@C#ES%=;TSQ95Ohg)wbwV-Bx3d&D3txQX>#g!?jK= z0|;vLs#=4Z8y0ZDPZTm`Di)X>_R<)djE6?UUMA3Bpz){6K22fE(IbZiSXZMZ0t;TA zTZ0=N;!)@Uu29ILTg1GhHOth-nQ6f3nF1*5{)>a*P<#f0%C znSi+hj`7f^Fu8Qc#h#yAXg*OF(Zx{~6yQV0-V9Fw{}7^&jyn({A8g;$DjMx^ojs

xwhw{_+Z_<1n#;9x*oQAqzskO76F<`M0joZTpUxsU+K zMJJ7=lZn^35E8*8;bB=|0Yw1| z$7)>aq|jr$s#(+pw234v;Ng{q@b%`HC=E~)5na<3C35l}lfT&)^qr2&Y*4G-^j zmOa~3_I!W&b1(;@g~T{<>`q_uO1+r3)Y-3I~@Zg3w9fCCm40a$>#NYa(kHM%`o z2^`#;RSOo}9j|=`?J3p4RO7u|fgqAe=7R`g%z#QkBwkJrzPz~Wjp;EwiNJ!NZk&TH z(fhlyOMbRx9*z{he00_OJC}h4?_yK5f5mSPu181&ZT#s;k#okRfq;gykFn=tNG(c( zvq!i=MG95S>=~Jsxpf#6U`cTBzaau42f5PVi_6DYKm*kQ>+S5`m190bg{r6)+SsCM zby?b-_WlSuQAfYmIuLZg>UR6>Ewn#;wvo~h!~ly95(^*zJ^+Ghv(U>(k{Pf7Qh^OW zrW8`=5`!|XQA9A&Rmq|%;{0SRZm`cH&xv%uEY`Z{;qXStiP?qO zVb@gDwIUr@oUl))9eY|sh)VCRZ2HNj&bPO8{(N`$&vtaYMNs|fs%PfLPWL!ZbQNEo zU3z1F*{f@s-`_j*yF(LT0bbPr!S@%J{^iQDZ_m&B>g4$6PY#iA|BJQLHP{b5I~Kgs z<~`Ej!nSXD(#)Z1#H{W#Dq1Xxa(Pj?N*+@c29^17y@GBTTnRjTlU~(fHFVica07@( zA(iX&$_%X`ol;QCIwh_{9d1-r&K{o&;~{`xG7=c@IEH+#0k0c>I)>0djqD|U`w+0@ z8bo);tFbHP+e^DRK^&I%Wb*OdViOw6L1tv{$ACVL)j>T|nsZ z#a0USz{yx>sSnQHJu6W$l}J_T^=Q%A#7ZpQl)+VQ%-U@a&4dQlD2lKH)#ob#0(328 z2EznPL^5>&yEhavSFiw35L~iInW5#aBu9Wg68ZFTvjdXYlwXAYhhx7&rG!G@lc)>G zrNpRCOd88XPK{8nis%6ip~noH>ES3S4S*jyQ;-#WuwW`MG}Y>*29ZP?0|8(Gi+A!z z?52K`N$6qGe_~yoCpe0r-JP(xXg3)P@=bC^*C=BYPLnI@Pj=OG0|ZXBD`1LI7qq4a zNF{4ZwN4j3q-e|Z?0NL`rp>2Q!Jf8?vFcc(kMvA(5(>1c|Lb3pD(y&VL&lK|n}Yp~ zlWY3t&#&vNu?6sp@M>iaWxh>`AI1*}c&3aI<`meyYBZ!XW47&rZ{`#)7cO%g@KH4r!Er12Ec*TEXpAY7NsH}lOq?3B!2bS ztp^;&*$#1vVJ?7)m}Oz(nvh!~b&4LY>ld?dFo4qAq0S%&D&`m`S4$=}9Nd839$e9orjZ{8M5avW3(Z>WJ zOK`y88KNSJ0ycj%Mo`Q2kpzXjT!fsxMzGBz!#`U`n8BR4){Y}2`pMeyUu@0J|JkNF z3>^G=&#Di0Ek{oDi(QL<@#r$FOMwGC={`BWh1knaPwW5}B)$L$c(7;?v7~Tg4C(%S z^Atk`q6)~tfrJQLStyDaJYyj}WY-NuiWw@XM@r)~F^vFlfCYj)wrI(4uQwZ{(ttJ*zd#UK{GLX& zim+Pr9D_=hotH&&>J!*vLl*dVaN|`R&!yRZJS+8uFiO4KQi5 zB4L~pG+;kEXwfrQOq(>VRj2eC04=C4it3fLiRgGiiPWhTEhaq<)Qu(`J3qTRyt$yx zOMnK+hyB9yJsKGHyZb%jNs59No2A3$$daNd;9v-8X$mb7x>5lI zOdv05#(_dw*blMLlHx!itcc)}b4fNibGinw0CPHqmS38xe13N7_7Fy;-V1Gkb4`Jx zmCl2)_!ycnqji2|!-|^v28%hOP_aW-dFiPKsw`QTeFkv_MOwn@nf{XN#AYnaruD*R z4!J(@#d!sEbpQe&03eVSpdcy;W{GntWncj=&UhH1m4|Vlk5nWVs(dU;J^5PNgwc&Ua zCRbFc<>1CI_OQdU!0XILU5{t{r&>bin!Qw<$b&A{iveB<4gdoDsV`-7gaLh`2Vek6 z00u~4K%eMAVIUC(6b3Yjp6kmAOLIM<`w)-=f?R1JbVig3LSxzy=fDnlFfhQ*4+Kye z&?%xK01>!es`X~s>pA^PTmShw4>xp$zyJV1G?;SAQ(%CXNeCe-8|*8Z1=)NP-VUQ9 zC}iLO5o~W-R0o6QV#WYNiXraPq9Vv~$5_;1R42)aAP%0N#Zj#JrKxNas6d(l{4tOK zoeY1Bs)$hoIz+E6X@3<*iq(BA5-%|>g+G38^PD%=jFNIg0OrrPOrbEPI$#_bn<9qI zNIUz((TyJ++mwsG+)QbJIT4cvpPzj~Dh)n8_XLZS0Y*rQr~RW zt1EqVN%LFV`z0WF=h4>p_O$+LZ~J@Ovkh-PQvT|)vODu)*CyiE=cVs1DSvZQ`-dbP zAD#2X$$8(MU;O8b%f5el5mt0xpP2aM(7=bg+uz+t7C^h1{VMpXw;3299v9vunAgKxgXvf!y%&vJRp|< z7gF$`(`D;+iZvDv^cUNul7Mk;*n&2PjgDMLu`_$T!6(E-!weZzK07-j4H>*NCxeWL zGC*n%NnikT@Y>QQhy=iZab#TU7(2L+2TSYVm0z4h1I;{S>PCO$YIhVccsyxd?e#Ti zm>_Wg2Fo*bZ60^hV2r8lmEKsjGnlbui*ZO`7o#u$44euPP=@wLH2rfXL!v8GL`I5E zZ1Kz)Nb?6Wg_yu%(^d(09U&Uc=}Fm>*}B0Dc3_%B5C##og~C9DN*0Q_GztS+DKN*p zOt`eM+XDu;q@wRBR_YOMGOBDVVt3V%jm)4JNjmKNyqeEriMMHVEWSU9TELwM*r1h# zsa(k7#5O`$S>$G%C2t2x5adUQkeC(-+WcL$gO%Y%r^f5n`Dzl)BW?4h2Rj&p?4vhS zQzhjELn2EZ7inEwQz9O{O*yY%~2Ol*G3wxaz}ZfuCuhSr+O&qODA2i zP@%=2uhabSA+c$bH>uFsXJP`5kEsTR7%?fo?Mwnd81Mo?1W-2Q#xp{aFm9FIgCd&`4oS`wt%BUZlD9>rehauY7n^yJ0jq39DeNnUhiR0Yrj5(G%J zF^Is8pbDS>V37rLOvrtNyN zZ)uBhrC}st19bxELbbsn3^Nyw9OULgtw(AwNyPx@Ai)7hake?Yw*nkwv276w*S@lg z-MFEaK^U+Ee>@-oz<1A9m%Oy&wPl^GH&*vZ-6Gtq-`O~hiRn8Vv*W+mOd9f>cel@bZ~H>Ltl!_c0_Fg1 zDPZu2qwD{0cg_t_p+-5(daPZ= z78ZS?!H~1pXYTQuSmPmgmqXvhgqcmptU#B~$wUI}eSrm5gE$%^Gcst(^(yp6=ub=N z8EMr?iUFmJ!#`L+ViSGN2W2xhnPP5+1}HHr1iEtWK}iifc!~-rCV&KZ24>&-JeF*I z;^bt*E9-iGxp(lxCk8(}*#Eo3gCN1L_qM&WG4sl@`11>5H>aYP#^V>qOI}%3`-^Qo z9~~V3{MgjjC+Ge7{F1+1Sp28+3%_}4;>)A6K044#Rq)d_)vqp`E@Q&%Y_o$i)3UH> z*sFsmY0_(I)j~&$pq4yYsu)p@15HLPKnL7`dyPg@quI-oH;NtGlX}1h|-D4qtf3dU6ZUG1gF#rWx?N;c%j9w?O0M39W5gj71fP6F90x@$Y zEqo~!GI`v{dU;X(iwkNY5?)>;{OVXD>t<;~Zq>c9sO6<8VOEM4#kJlL26g<4Jy2qS z(@4l=wGPy}HIs>ClgB}8BdW3`ZN8MnQ)$h*B)1&3tbqN}A=d}Bf+wH}BYcT+_7a@+ z>E1{W*;(0!Io8ve0SLktJG~(|X0~$)2&f+*7{Cz}Mu;&>jIOlBBaz4Si8wB6m12;L z?VMTwrrDdttxm4;nk@JdVN(YpU|foW9?J!b0375LOcEUM!9W9VmI?zTmO`qkH2_QK zJn2PoMdHM0162sxQz;Lbk7rH{eJXwxsbG0)Wlv*SSKOUW1u{+P&gp^X1qg!lp z74LHyqpjtg%SNZyt=v1Scd5NVzq(`O{K^eI4tImaH&EH==rnys6^^8How%zzvLVYdkLr<_etn6c zjZqPS2+#vq(;*>}dP9UW?Zls?)VwLA-w|`Hk7S)>vC<6)=?$bI_(_vc%EI!z7PE#4 zn`JTQ)};Md9etJ5({+L*X5T#9;6v?0hlrCk$7-;Eh9n&#;DEY7;t3=;cz^}e2(*W2 z`+x{JAP`u1JC!SB*FkJKu81@ zz!~sI?Eli@i-IvA4WGdqCGr>ukjUc)Tr#r=V)VZ|nWgw(>hlIQI)e!VDG3V%h1{Q_ zNhB2pfiD!2;L<_?b?IVlSufCv>WaHATf5l3Y9M@oZojfM_2(ozQ6 z@KuK)z+fE*cV_X0sft3Dl}uK6U@t1L73Pa$4`M=u*ai8VrAYs#b434WE?rJqc&pms zga2?~_~XMve|U2Alaq5kI@tG{J?(F=t$blY9~CL$+ z3|b_NTI7CFTzfU__NpqBv^q8398}H%2u!A0qk*0nT_jK-rc+WmARA)7g3^Fe23>BS z+cD^N4!9h{eotSqlNzDbW}!XA^j(w9TBX%wPq&68Q7LtSh(4aErb8r@qc8*u?hhFV zchVKD6a~P+OAG4=F#ryz4qjg_I0Io~y10fn-We&yh=O%}AacDQ$KcS8psLzxAXvSz zI5@8)GvM`A*$febKBBbZ-cxFFSKG72PC7vl2J%9ZBdH4l8Y5d9n=WU24)7fE*=WrW z%%sj}w9p2kWFQ-+P)=j0A`nJDL{Ef6FdTz`3FJLFUID^@Dj=bERNDQJ$9RUaJu`L; z7VvdEMl(T*xO|Sc%;SFEMn@%+lUHDr=?JvJMb4u%+4Gg!0<|iSS!sjc8fmQ>Y^fNmiZw@E$?3Xi z+eq&t3m!Q&Fn@1j<*a}*5LCHl*Ys^!wsq0KVn@C%q&1Ayv_rArmDgL@Sur)X?MJMr6+5z zR}^^jejuWRW)|`f)T1bfs|%Q+To5oXWh$-8b)q(Su_k)D+{+Gsxhr|H#&w}VO)GAa&U;z{|uR%*BNr-YT6hc&Vy(@L2B@Smmr|7CU!pG?ONNt~+*^Y$RjNx%5 z{m?%ZMPLB~V4TwhOu#L4CWV%?GbRwBDFhrq6~GhlPZuO6!W>W+00%(83sWsG&24*ap|GqLex)nBSZ`+g-dQ{R-i9%*qFLw0Ks` zJsh%*M(iVD+o(qf3a}={yBaJQi1^SIp+;@7vWM#1oWh_&Org;x(z6ShN(zh83T0ZY zPRJGE!lH;=33CZCB@tol`dR+Rl1@JS&eKbU6BLcqT=5_@b80mV!|Gbk$*I~OZ|?i; z{=rWV4gc}b(C-e9esp5$^P^)Q?j>2e>II5|@xZx$|I;JMXP2~46nyyD$fr+EJ-~wR z&n@`!#B6}z^FxDw*w^*$#@Zh(Pu&@t4xDTx)>XFJZ<*zQ29{N7Lak(~xZY^0(HkmtI)Dy-qs*uSIB;&l>6PvoSb$V$JQ|v0fX?q_ zQ4|0KlnLz)8%6^7nm!VnG+4kxZn)A`lDG#^H2?%u8T9r| z26UeA5VSi2T3vv-WOY_=QyPp#dbeIL9Ng3bX>uoj;b@BTh;IV#JGLpl5V_1$AXFV< z%Ap9lyGZ(;_+Y9Osuvc+vV0!jG~X+YCPvwqbSBCGZ*9)(Jjv8^z~*g8)wO5Z>q_e? zv;OkRXv4yV+cxibdhwF|E%kG}wv^KlN|m-xj;&rW^hi+aXEM4wRTI=Wie;XL^enT% z`NM}Ewwf&wXDDt@;9cR=*nEn7d*KX2!9$DM+WH z2*7MksHJEE$>m^y91$x`FCKG)BM4=JG;&6c8T3FdzEVb|Ayh7((5^g`=p;_wDt_c}8#Z9}@jxBLLv3wh1MjoCX{1#DZ(0@zkyXhL4i$y)!3OyFe3$F>jU zdcMJRt-F+pKs@X$VWNy7FRp}@vF!r{^oVE;p(}+&hAa@zG=#`8;|eIyDY}8Es4aP| zF>)uH(*uc^~OkcUA@JBxcW}qcPb|g{A+}xum06SVkocR&AKHHO|5yUHb28`jJ zq9E6PA{B?0QSfqO@dfx}T0_Jg@Rl47@zq#7gdm{w$O@hyw-}lL+?YjU1ergOOsqj8 z$-L;&M?(HSqRo;Z%gQ=x1v&rdT`r>z(u8+dB2z-HU#^Z^;L{ z7yNS1;t!u#_4^|t=!OQ-ACGPR_}ErrkdYQKX7KUpeXQRe0|g)q4zhAH26T-WJ0{1B zNrR(|9MD0M>IIO3Q3P@f5D$HP?!dPuf>QkRzIr;LQRUI~Ev!jUK z2g=b7f1t~2?Qj_Yg7Kuk&ui-UnL&ghzj?@SogFJ43p<&YqFID3Gv3vMUZxS$R02C~~Ug__cG~ z6NI2#!IQAdm^yB)b>CRr_{Nr=k2%;MANu~>tZ&ZD`t0QJU(XEvdPl=^^W&F>!sq%z zj3D1$SoYf5+V^*LQ!;$|GTo2HZ%QL4%|mrU09Y9+#a$V0JV#8V%yU(MmoL6Kjy{2(hfjTC+K0wp3fJACOpP8z>$H>9bCTfA#7ghlW zKV8}M#)>8?g&!?SVN-N(s_sUA?B0<7dY>3G!=9{MrYJYt6FTd{bj`A|Gz~0{eXas6 z)^y?r{|`-;4H!!}wn_GLj@Y8dk#iyCiX@1=mVJ!{UjSLa37wV<9eU9X7e=CjKjw|% zy($fVDnSERUJNLpF=8KNhZfJkJ*!kyA3VwV7Po$%n$0__73MxlGn*iXe5|SINl_`_ zVnI>B5>TYk@{zy~aKM{I;Q=Rsm7PLC8%q!yxlaNwXgmcqqR`+;wtb2VI0!Jsq%lad z3ZMoL$&w-TEb0u^CTgm)Wv$immbUVNRSUMQTCrz*V*Oy>sz`BTz?-g156vH5Hrfo6 zY{#Y*YdQWTP4!P{q6%SAc+6GfHNMET4Z4bXSoO zMKp41Z*&};2F;MwFvqR~3-BLW=GCnYn>HuR5CK~g23$zDM2wrGX4b~A5z1h9+Qr&m zW!qJ1;mH*~Q=dr@FUUURnE6ASf|+JOx-hPmV@5pNXIT|-Zb`WIq`c>m?=^@P5QcL( zk*Lt%Uui?GmcV(Aq5$^?P~alC&>SJMj9Nfa5di@p0#~Ai=@Bt|%(~ej+C&m}02bV7 zM@U3Rh;u$0Fk5sFAu|=%yGo&M@Aa2Ug9kiGr-&=fBEcYZgl@M35Ru!RVbOTP*19_k zx{!({HHD}Mm?C5Gnj39_D;=?m6yQ(^SXSq{Pjsnxm(=8<&z0qW3?=`6&7F6Y6la#@ zL*DhAGuvYKK+z>Djud1j_!R*MEEN3! z!8u$4dJ13d%71Na$?N0GSTqbNI%FY5mPrJWHK0$PR3lixi8ZtnK`7H;^v?7)NQ6)3 z_k1+m1s3373J833D!AOSP@bw8fCMz1|2N{J8(cR5m?X}vh_rr<1@Wuyr#~8 zwZm^2m*&Mwq0MdW@HxN&>?;~UE$}u(vJ6MpPeI|C%$;1_0lt~*S2>2v~3Uw_>TvN zZftJ-Y0LPpAFumz$*7N}X1?C(e!kAWp>)_bJ)~_m#8qq5%maoAX0mIRRz*)NUp6g? zRwy++*4WFHf&vC33s4{(C^Z}T;jo1itsL4^+F*q@hsn_7bwC-nQ5y1ldP4rrupgya zgU^AsnlOy)8W2HnS8OyDnaufmQ*2*j#-X;HV@y#RTl`92>DeJjVUZCiSfDfyou5^w zREJ(3D0+3U49Wl#>vyM@y)&)!gIQI~J;t(#zS46OD-gN7+?98>C+kF8ctdGmoLSRk zvz6KGb^ger>iWm)YPzF-+IQ16R?5$!BSjk{__NU#s$O=kbn*~H3Hu5hC}c6{zzLiD z+wDDU+eK_o!ge&7_|FNc0ThGcSHVM`MR-8K1|R?ef;6$5FwEOR84w)(s0(PF2R;y5 zF(HiZeIffzPKFDHiXfOXSB4=7aKV5I!JlnE*dyAEQiMQ3Z10f}$e_SC=6jF}fKvG2 zWms(Bg}9>DKspe@VGT?w+K+@{nTt4wT9S3@KPDOCH374CxS^o2DyOccqN}xPJXS?h zC#)LkU)9vsI`1Eupnx4vi+A=vLOyo5Ur(R*Yh_S3zXD=BUd?+ z6p$JSk2*C&c95ARVq8a)Cwv?IL;MZJ@&%uOPL~-hm|)jV^P6V|O!FdUuwZG1X?33c z$vo?dka2Z}eO-YEg81<)>#BU`6UDxzd5$$X)+e)U3xXEZ2xI`>#MnqdPNy397svzz zS|B&+Wxjt+j$?bVkGz1H#&nBfM<=rY>5Ppz))+bjWl$@KW5tV9fdhtE692i4 zb(<_uxMOA3F%G2Qh0;@m_Ux6>xkBoNT8x5`f(1~lRvpC@)$iX?#z#Sw7907$FThmW>=Dki1-z}ubr+bUfj4NefYmI9iB_kjJ zA8Wjea4=;C=37%Sq^N#tDs#`o^fMMzGFX72HF<$zWqo1M*w2>6`k)QIT|N2z1>@*8 zRi+zYXN`TS>{K_0X$Is4Kkj|<+O8+a3%=X2>e8;&-|t>SoCgBXA+s*;-2fKcVvtcF zY@u+(v)scHnly?+(8nkCGQbVf3;%}$-se7+9V6s*pU>+Uw%)DJanqHJ-Pbm@UfD4Ehb?VPro6hL?!$$|$Fw6op(DNNrv?RU3>JL(MEmy}Tj(79 zVe9yxwv7F!y**bp)Lq>$=G!HsKA%_gc7NKD2IuBd+v4nD2Qvq770pYGM{~yxA2kHI zK!zUOgPPCIrt+iL;3`z2)sYdfZ~)6ut4IL^WT=ud)mUw?+ZQ}Ct`p5ZXRD9NKpygf z&VZM5ocl0%s&?K~ZG#s~Gbl0$bBa8jF}Axd3>F;kDST;M30Oczpa{$aWjwi(nU>5k z0}+4&h+~l*OcIpAThl8(m{a-TTxQycxyOt$!0TGhDe7P8E&7Wiz;fCk1AvC1R%!*VvmloWXVo_OpEn1C2Rr~G=U(FwZa>eG7eFbkWTm{`tmFj zFX5+APWA|@CTU=U#83NNHu{={7igb`cDI97gx|z=tipZjow^mw63IiTvz|> zy0ZRJxjo}L7WQ^6tf(9)E*dMw9+dVLrPW64nQ8XCQJJ+9Y9{8H9T~|ZM!QlLlvm6v zZl6`%K)*3O0x}1ZDLgdH@d?yCQ3Z!_0Uw#bFRd^XKJ;0czTq=1`EzZ;p8N` zK6q>XRV*#Uu)@13-@d=Xx3|(qk!WX$cP|r->oNsZT;)GLI{a)k57ULVpc%QOlBzQoqzp`&5NI->%@{p1P za6(@ZrbJvPVGz$A+6j^H*JJx-*#Z4S!o&z)JN$}%iyhnl>yhW64n&r4>bX~zPHDDj z#B|H7NJH3NZPQXG8WVQOrB{^ORWZ=NjwYGwV0lQPZ^q@QZ_KT{Yp&km$^*|ju> z7U~VzD&f6H`)iP4wuvLcI+B+ZA;HI})u6*`lw?3j39ud|&4DeZrw=?JH-KuXb=d3d z_R&rktZ<9Z(-RK$M#5de02+cS{F_YLN~eY21PePSeiX(DJ>qC9xS$6GpT&*b!eLe8rXDfJ4RS3oa-#LQ20Dzj{sTPRh5a(b6 zEv3qo0;)uS0r%iot-t{Fq1#0xD1{Sv{Xhw~;z24PffA2UpDBz1r5z>K3r2TzHa-4? zUluW$tvNAS*{O^2eXD3pJ=a-utR{#OP3{{?$F_(n(QPmQ21pBTfhqADT@xHS*@_gJ!A&&4tKmW zxBK(u6Te$K`}?QnfCs40E^S_PW9N#mo)#yN$yc_mWZKy!2;@C$v90@lH@v|!O2kK7 zz*6u)Rw7d<+O0Sd0R#Wx#B=|A@}Mk3+xg4U9oG+Tym4qVlh1xRviIlb5Bv%wTzhW& zUrz4%Z1d_#S$PO1Hb^aA{vW&qaMbXF#>sf zMiAY>{|yX8hpA3YIR(RORz5xz1|6utW}A&S9YQhmWh`<8Ai+=5L~r*Q}UQ~T$O|t-lZ9O+Ob+Y&WhOza_Yd&05{oX>cK3r0FVR`-4 zb$wSiv|e0WdwoOu#U~rTeX{bxf}(e4mcH8IKicfuQs$T&(s!6t<*CE!EVVYG(jkH7 z>wp2S!=uD z^U>^jCe{E4c#`t)Pm{_xvM@6h>f`AZ=Vy=lAXf8HtR9m({D{B;G16v2@k?FVXF7A? z`0yy67I0381ZiGvi=+(~SIo-JLHt(g_GRk4vaKin6EQXYjVuvssnk=2k@wGpbdf7S zqMK|vPH%?UK>>*}4d_5w=nvw(_yFDu_L+6_P33%qcUQhH zFhQySOt7FozyiKBbcXiPcoK{ve>AFdkTxg_P~d0dCt;EG3>y>mv>OF+zgC&1w)M>) zT0k05UEDik`ZG(HZC$(O$n?o8dfTQ~X0@i7e0|mJh2e0HGp9PMKIF_x3y!K8)zj73 zmLFtRr7~A=69_oR z4_k3BlCc0FfG9x3lB-E3eZ_{Z!)0wVr?zMl7`;6)gul9WdQiV0%dt4yA@l^<0D&M4 z7UX#rX4=4o_4&4SIhLn$>|g;YL7&rHs*ZQZ{gHfw$(o^*mEzKhUi=Ha!Wo~z>(6?-(vw5*Yxy28W4tw|7^}d1R^mZnIq??TMAxoj*to9 zYH^}INDlB~L#~)}k57?YB0|qhssK_Ptq#B#fDuP)qf~~-3Pcku&8PU{wdU+Ab&~=J zEZ~y}{w#t&AE^+?+@v577ZvvSrB>Xpb5C~&AfSOr@vx?W2)bCAZSdxxAdt}`Qzbe- zef0SmZNz+X0F=nWp$-~(cFUh8*H9(mI@B?>BCz1XqS#o9Md#=jxV)->r|47+l@994sI=z?ew*6zyNHWCa{45y|S~ogATyDHo9s00g%t z-0c6$(fz+XFPe;GN?|8#0}3_Hx%kt;eZR#{J$L=tofzBwaB%mgp2~V7q=9Ob%TR6C zV=9d?9hO8mQ2+;2j7Sd<8T98et1Kwy4n*Cwo%W>rX*g2S17v8ot3(wx1B*T*Bnb56 zvm+*GvIvDZJrWj?9S~|`>GTSTUQ-pEW*{j!q(-V4$BxR8kO&swaEA>eh_WEVx`iR7 zw2LmRxw5_u2MGZL8#|!|F0O0&=BcKy)--*wYV>C-8b4j$z`DFpiyDU4ToHAG}ODC4NhlQG};;owFUz%9&eMwS!cD;dCCny2E#*X zP0iNpa9_fWi3J?w>kY9z_2dOv$9oIN3tsInIXAH!SuyLwS#=*EEEALOtAPWsKuHkZ znkcGAZ{bZkT=m}knh%HTgcF6Bh=xm6{;LymU+KvL3%2Fkmqu)J(mj2_05H~*Q#2{7 zU}89}$>+^6J9BLraJQnbT^&o&CdSiJN~b3QRUm@Q15<3Fu7mQ7;tcsZXb&QYn6KbPQVOq93jN}>a+N=HGl}I@gw=j9J_~}RccJo z1?d)7L~VtCV1yZ=nk8rlQJqR*4bysxstl$U$zy@hHdxsbn=r4ow5_3}t-W?&c;@1H zGgnU=c)X)-LYl2G-5#p&mPL);yl7Kr=i=7ZX%pHyCYAceTIHcX?EK^6?eRi_jCURc z0^%_RE&0XpPz*~;P6Q4ZfvjMG$P1L(5P1S8-~z9thvH^?9UA21q@Y%lVa4`EbZ(C} z>)XuQ4pVA}F=?DbGbL)9>`jIDTAJ@(mhVJfwj|xSEX_!TXJt`jWv(a>tF=+o^l^>u(Qmy zy9_u8!5;5p;C&?%Yl6>KIAILH0>U;&%0plQah^^h#h#SH5Q|a~yn(_V03zH;orvr} ztOisBSppHr3n&uZW(pAlloQYa z_L$yM5J4^^VT2laxtS|zN2|jm1z-VhLZp8ICyM4QKmjZOYhwJNqyxl%p5~}<$b18! zLRow;KyV8SL^G+31q?Z;K%Id2fJwHWKVXKeEuKSNp0+4R9#JiQ>#4*+I?e zfpYX`U;&K5yUazNGe)q-$PLH~E-dQ#eA)P~R!#VF)zF0%{U0yy`}B#4U#^{c`I&`R zHZA&o)8dQIEct%xa(TSXIxMUe_E<>`l#D>h4nPE+V)7Z~p=>F6HTpH|H7^cgFx$)$D;Sb!@XSkUCRQz~kY zxJeDh1ZgsL4;DleERa=b4yIZnO#=%k5;Zu{oax1)BS~HjJ{KcxXr4iKAb>#bDq>p< z7Ub%+gxVPC0WlIpAO#2}r%<8^Y1PaI2MD5C;ZsBrh8Ir@=+;$-P7Ia2x1jd&hK`F* zHPcvnd2`pLjbpyw(DvQ>)^DC_`Rd8hpFb|J;KI_nFP1i6SX6p`X8MKskoh^U^+i!& z?XO5%T40}w7o$~Es@3Ld4e8op1C=UYQk*Z5&lXzfh>>ndl^_Zb6B~5o1$}mmUA!?BSfFPNyV;D7G!Y&KnC(3!cOtfE+)1GCNbMRaOoZ6g z6K+{I;Xrn!z@$RK0%9{!PwofR0ub!MX#k~80}(;SfpZZIgO!}n=8YI3bhSiDw(!=N z3X;{9X7DlwhteQ~G95!?BXta;G1^g{5x2ntYEozuw5k-kTY1R4^Ld;o2t=ibdJ$id zZ)Vk|Vw@V*nDU%HmWeBV5~ zzqhPmQhm?l*52O6p5E5MzV7+6CT$oR8}nH+JjrQk=KO4DW|=3mGnz3r84fL zw#8|#$1|Pla_k#&OdIkoPZhdm`Zd)fA222Tqg#_0M6=EBEFr;{9DA(Fnle5F@9bP0 zwID-)WY|^~+)?Vq$b_|fl!v?k#~~(Jf(3;17aF2q0d4srwiEvwGUd4eBFNJ;N-m%j zh!h|I3s{^hJ^bwVfsB()Ofi50Kwu`b$9T=LnTIQe9-ym~cLWR2fguKFdL;s2=1$TX z%4VJ=T&zW-kdUpN>ntGnV__%4ev{}hJz5=7I*A|*$O}ju0D|MSl#HTe2ZASV&Ec&M z)rN`mEP(|e1Wy1tqyU_=KnH@q9REd2DNlh2uXQpQlUyYSARre|@I979c}@FV=Zs zap%X2x;|dq{mJsNpFiIJ*{XrhR}X%%W)eVfiLsaKVqZKJ`*!1EMPzVk$CCtnG6GTn zqPmh75b7xziDJ>g9pnX6hkiP=>$fBO{^iu6e?EB_J8Pc8vj{98FMw+1sb3Bs_%U{L zKXcN4J+${P&u{s9+xnp_N4>{T?T2qviLn9!M{CH{o#6)y=q;kjv@a(B5OhU_99b?L zIT&5Z5(B%KaOtxtLoQLF)w-<^rZn3#K9jC?w)WJBAd@k#hBgqoWCrKxG%@}o;8UT& zt`6w|c>&CFmeoS20t+BIspQjwGtL^fwkmXzj>-kq7uSj4|I_aNE8E81*f#dYww|k- zJGt`p>c%ftHGHF=98H!O2h-c+Nv3}rU0gEQ#g-oFfXEJ1DLE-APz7|yf({r{pf)SfXi$t1 z?JMn8NcS4IvpF1W2~#HW)Y@!dL5*4P$p9d9U$)ttuGeD#QDn0M2l+-pps-@Qs{-iW z@jE=$p7YY!0;pq}Lth^(rW^z!kPf_0rAVd>&P^-@CeBPQePbHLK_zhT_KZ=yXTg{#@HUpS?RHo#5Z%v<(J5vvRY?rRSAdLiu{nD0?8& zU}G-3J!PgKctz`Is_=xPHlu`kE|MdN9v#`Cl!sJ0plc}#K?Gp*;?mOk5Ot1=%i7-pj*vYs@J+eF9kw6Di@EjW|%yY{auD&61gckd)xk z=?L-U1g-=_y57$yHG~Qx6T$p}o>r|n-5m3UH6GrbmqAo}w3c*-pPG{T_m9G4P&6ub zhAMFDaA%Cpshu${Hha>Vw#K;*b9%_0QI%O*$Te6j@u@bW){sQmNl!E0)8jk@{gfTYs+T6FgoqU&Z3vP7;94kMS!k=O2dm|vQM>T zz0!>>WFbAKr`mIoq6q?FTsaVd8Nl09Fs`dUH&9Fe5G(;a@}H-Oi3jh`Xgxn=^gC0V zVki$jpWplK(g9B1nbrIuvV-By&zARJSlsvJs!24MezkhKu(Dn^{Pp^U-)>s=?Uof6 zw=>N^)OfD$c}7`R_HF_Jh~_thq4l=w2ZXJ)Vo-+&8R7BuL)$Mg_uwdVYkG5|M;8z4DxY~nmCK|W!D!NM<@lJl=Ff@9t6)rog++k&U8sQ&> zE=LxwJ~=V1n5>+`C`gl-teIypWodK;26L{K@{y>~^BNKYv|VLtRlh6c$*QzN%$r`+ z@%ftZUp_tV;+CQBw@<#hZ_2mZ#{RHp{H2Yf=`Q+aRsHA78@^o8dTxBi>F)50ZGodL z!2^xq4VA%#xxUFEI{}&q&Ym7TieZbIZ8kzrxKa`VDG6W#Eku9-cH3)(aSp&9CefroEDBL5 z)^c?65K%ovBc?mtLvN`ec7OriV{+h{u%~;quNYn!EFe2jd?pC~@6M`KMqOe-#Kkj1 z#bCiZvuoa)Tlc}dTGsoss@|Sfa&}4;+2@h2>{kaE)fd{GW19{ZdwumjKl0}(X~Eff zIbEU5B7-kS=PEI~GEELTM;xk{Mr>YX85zMAqtUqtt9D)hH-%Cl)AhAf6J_F4ac8!JyN-VyUKdlRMiJjvCE?f!GKEMBV~IEN{k%?3@ErzXi7Kx z3O(7F*9qj1oB4_V@DYBUBh3rx$dGc`9BlsNA$07j-w_{DIA<{`1v zDKG`M!GKIgkoM}BjF>VQ$o>;;6LTXrh~_*-q0z~etTn3> zjd71r6NLxEZM`>U*Ubo-=Y|dB6>Ez9o6EynihbJ(JiAJLl!nL)C<;-t0Sp*h!#PYb z4?zWH*-%VjfdNXb1tefgeX=q4g_;a8)Qo(AQDgiaZ^}Hi z)KT;@%}uf|5z(K8&VY5cuN38(B0i&+h}3{38`cRhko!#Q(I3-7Bot|r=rfh4U`}p; zIH0xY{h0j6d$ZaYkBszyrXox!-jDS#`3#SuZ`RIa#tl|=WCRyCFa2io@~^>zZBJg_ z_0*N!8WYPlh4VRptC|0m{}Ha`Z+Jj~^ALKn4SGjP0!n9UPr;tUVVjVCFHSi-7~0 zNy!L^{K}9^us|V>xkxwB+cT@c0xT%V2;QGt0~Wk9ql`hAkPD~AW}hC+d$BFFx5zum zWkF}w;KLx*HzzN1USa+iU$oHR#;v-<>J~u2*vQ0~5C@O~5Wv}cQ$7I;l=x5ZSHi78 z0VPL(p;f6EbH)5nNsdX4O%+Jc(y?)j4kmkoAK&kJVLyJ|{~$05~Z zfTch%CKhEL*&k0(C}N@OmX%|ocSx}GV#&FIoDryEz=n8&#eImrf+-p_Hv(5u;=Sqw zs+DxRwOVaBsY4l)6?9otFa-nd)Jb05R9NGj)Ro2NWqHO$={nqo7G+wNuXO;m6-)&$0{f?(D?R@(3u61Am4DxL(fIj}^2yn2S@n@t2SWRF=_Y(td zP97xkUpu_}>cKta0wBN-FFbes@PXKO`?p@&x0%T|v=*T|`0$yPgBh+W?Fh7DOekpd zJDWou5P>9tlcpftv7O+rEP#NAX@tn+1GGW0mlC5p zb*aRBx`ssKP|(L>rZXL-sP(8UK{T*<6M+J9&s46##3I3fJ1#Vv`GJ)cd$uthr_vY3 zWMfu}@)*j1g`Vu}PzhM@-t4+N5dkcCb2?Mcs-O=rpEy6W0w6$SaDIB}8-w}hCzqe; z&p$V*;I;0I=d0848qUyz;E{1@(FG;>!$k$Ho-iY9imm=qo15?|6R2!TZ;h4bF~ySG z@gE4da}n@G%m)JGrLfF`zt!v5hJy=~XrP-Z9Vw;)e_>@teQvNk-JRc7*-;Y7r_~9T1J{gvx3{jaeOm9l#e<9bYr3c+K{7d$ z9`kBP$bnqs1tPR7d4c>xQy!vDgz+fBUU415rUERGQ8&r_x8xXiivp4W0)Yiec}Vu3 zhzqI{3Uw)1=XM$l?GAmLMb%|bB`KH`Fj3f7{Ofx;5 z<9s5`JUikb9Y~9R%oZ2VFQ1YfI%aQ5e6A)D4Lm*Iy>thL?9&4=%lvfPQ>EcGMXrry zekw#;3q9KlT)Ruq6^J^~?h+4CopgW@Nk*WYaD^0r@J{gO$fC9m7I1>Th3JVo8M&`) zN0EJObpGKQxfaj-v6=`QbEOJI;s11V?#rmnDCUC&0vqbmKmo9T=P2}m1tJlUu|P=; zfCKUZyoFfo|G6lxv&pZG{v8(JT|}J-IDmtoB*cP`V38&$cTyChG(_x&J0`yo*#Rdk zsAUvtpa6^oTm?T3c>$vh6lmaxQxR>YA}L}Ng9zz|FlgiCuwPtg^`$6^8|UKE=-f(0~@QXv8ht{>cS z<>1a=jvu;yc;B@{dx3zTj~%}8{6W@_M-Iam?4_rayCE2ui+1D4uBCMaqb&*4hDw=d zZ_6yL{BAvEn}uW*%$tZmRY@UG80& zW1iqkZLz43lOYhuOT{?|HW-FNj9#OSE-h&|IXyW=?D^>nqGZMQqVp4GTh>cM6R?e^ zf<=W$$rSjORDVdtSr#vCvZt>CQ*`R9j<&kYv5F}3*Y*lgH4umIIYeIPoRle@6Ict&1!qtg!-{&(2F15o5} zl!^|36G}S}xpWEHV<~9Rw0@n94XZIeK6T^>k^(-DX$RH>HD&!QyEoqxV*WgPaPkn! z{iGZ&gWj!S8x8%Sl|587UV|%Q3e=`o6uUF>oFQ7EKo+G`L#L-^q-u0dHN_&}fJ7tR z?S+sqCh5#7)39HgUZ3As6w0LomGV=-;Pz<)EhXK}RpXnh$Bu8ER1hgL$7{u4W{a)Z z?Q}B$B9zx$P}h=ITjtL4VUd~;pKcaY6Ii11pDfZF1ynhb7oam%uz+NSqyPsxj{LIe zECLJ0h?12I1f&)~0Ln|qVxcb6CFdH1B}AvyG}fqR{(QGfI~1|aNOw*Pni#=1CuE%F zQO)qHmgPF0%=fLy^Q~hJVAM9znlxlf%F~VXr;IQp$Nifcas~j3Xp;-gsz!4vHk189 zTfbXB*{7cqGA&NCuPF?y&KDETwiJ7}7rA#8dm)MOoxp33SvACc_yMv4RArp-Q0$ti z_}tNnPck3~0R+DFxIUy)RsjiklY`YXnC3lS8xtI@Qp6E~nAlCRraJt>r~nuM0LY;~ z1GyLvSt3Zxo_Tc)yaOYYdABs4A}f${4xv7VWKb5! zLniP-tUAmYi=0473wR@CDYYVH3>tXAL-2s7xbn&v(aOpK_)fRy(@uJZCZV1Zgk`tY z1t;1vAqoHnQU#EJ1zmt=DOmxok#7vuyfM`9`ao?A6AE<5uT6jltVeSIb&R~=T`*u~ zE4niwHIR{j3el&_`aWDRmaG8VQjp-2l~XUQn)dmcIigOqX^Bi4tb{rKW-A)xCob<^ zb7>DIbsH|iH5$HTi&AwVxvB-%TvZHzOK!Vo1P423wt0aF_yNf2NVaDoKAnW3>+VZfj( z&EFPu!4~6e&=v7P7x1hgkAqIiLv3MqTQpejbymf2wRYL)C*nx7WMM18FiQvl@&h7g zl|x+T2Ii_E&BDTmtb%SQ(~6TzQWImiz(GS~GMe1TKmvMM z#YiX_3YZ6ynwzSjjw3KYlyzwO5o`jqfN;)W>KfL1GDSeXLeCKTVuWR#kr1mb;A`|a z+d_W)`Jf2so+bSO+=%j&xS%7@)UnbuaTsenY%zcs7jqlN8CT0r;*1gH;jR7eAkG!uaXAJ1#}B-ZfR{6^tVH>H?Cmv0Of zpPf+nr^$t9dW5sekk{;ri>vcRCl?gPN(#^!)Y&`*CRc{m1WB)W%^4D6_}z$xeo>Am zx-0H&x8k=Fyp^~v`eANWlE?r=4uNllOeT{qkO}}MQE5W?q>W2^t9n zn_FE{JTu}ku^`CmlM_|(@!I56pV1XDc+&OW_L2rN06gg|BjXV($QYNZ9g$oVD5%XD zg%zvjk8u>TU=PemTG~m6ZHbP;KtWY@8RdWIhKR-Q(|Yr~1x=&62fAj?99mpk+$6>z zC+htvhAgJ*B>q7iHv${fh%H(iDuQhggLPD548+ZavO>`0BE9ZG2g0O&lB11wRskl2wMuB6o>Ye_@6BoW~0wmM+Hq>6QxiD7?2r& z4IH5Yi0w*3K$v7v6Cyy?Kdo}be2_T;9s6Y3}tfd%aMi2Psy zN2RM&sE-+OzynG|aL05OeXyYWow=QixcPYbz!y(U{S>Les_CDvnI#HE8y0=NaS53L z>f>*=uE3B2*%@s?m-nu_1Zi*p`gr@b1M9Cnw*eb!AtpPz@3-R&Ejaw!$>)DKvhU~P z&;CSj>50SS2l5iQa4~jZ6C}blhGrhb^m_Ym$M&3AF}2&1NJ0Pr5dB%4P%8owC=t;g zL}yS}MyNYen66<|iro$~ZO91#15qdnxjUmiibLcCFvu{@;0izjsIWL;kz`c)T-APe zHM3j*BiJ zYukse@0xUd^Mvc0`o37v@X`E=vy<~qjLY6p7s7#Yyw5PkuBkDmFoYi2GqIgT$p)=3 zA~B36gh+sXCH1f{rzR~>o+gNc1T0QOfk&1=kTC!ih=m~mkP$R_Jc!A9(jr}v5E5f@ z0v6Okt=B=?!)tjJl_3QQn9GySr|R{YdP6i-lcv$4m=Im1Mgat64x99dB;9q7beF{c z-OcG8=XY~{50|&c{Z6{)=JosLOVa%}&$(Ut{ayD;WBGG0_x$1Jb@5)0-8>hsA93ro zoR7SDe^$cpq@+9U=PBvIoBuCKc`1@KKTVQeYm%h@HdB&(8zpJtDM>o~nI!%EFOsDD z$GfC<$6eCavb&_O`|gq+U2&IGdEhQ-)mwK-?_9r2y7%t8r7ZQ`(%g)@rI%aomj3hX zyCv7AyQP7b?v|eY;%@22f4W;z|KT2~#dVML%&2>$&j;?2{_*j9q_XGkk(QsoM|$%I zzW2TNN@<#VrI}gxN+;XymHuV!y^?*)z0&ws?v?g^b+2^wzuYS&KYE`u+H;?@zVbfl zlfnC>e|X|Psrb-+(vo-Ylm7hEebT?(cfS^7)Avg| zzPVqz_+Rgr;zm3m)%qTg)>J>7msRNcqn{AT4YL3dDp{I&)J8i-QPbfUHTsnO9=^& zNOhq{q&4-ANFPjnM0)7yN2G#dk4OtYendL=*GHuP`N;32H2!z_|Lwo@|Htoi=l#*Y zdu`;7$9LW*e&#zL-#Wkb=ik52oxdY-&#n9Jy#Dv^nZbSHzgzd*`5N*5w?5;}_q%of J$lpoQ{{l^3RmA`R literal 0 HcmV?d00001 diff --git a/libs/spandsp/tests/bitstream_tests.c b/libs/spandsp/tests/bitstream_tests.c new file mode 100644 index 0000000000..e17b8094a0 --- /dev/null +++ b/libs/spandsp/tests/bitstream_tests.c @@ -0,0 +1,189 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * bitstream_tests.c + * + * Written by Steve Underwood + * + * Copyright (C) 2007 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/*! \page bitstream_tests_page Bitstream tests +\section bitstream_tests_page_sec_1 What does it do? + +\section bitstream_tests_page_sec_2 How is it used? +*/ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +//#if defined(WITH_SPANDSP_INTERNALS) +#define SPANDSP_EXPOSE_INTERNAL_STRUCTURES +//#endif + +#include "spandsp.h" + +uint8_t buffer[256]; + +#define PATTERN 0x11111111 +#define SEQUENCE_LENGTH 17 + +uint8_t left[] = +{ + 0x28, /* 2 of 4, 3, 2, 1 */ + 0xC8, /* 1 of 6, 5, 2 of 4 */ + 0xAE, /* 3 of 7, 5 of 6 */ + 0x67, /* 4 of 8, 4 of 7 */ + 0x74, /* 4 of 9, 4 of 8 */ + 0x43, /* 3 of 10, 5 of 9 */ + 0x32, /* 1 of 11, 7 of 10 */ + 0xAA, /* 8 of 11 */ + 0xAE, /* 6 of 12, 2 of 11 */ + 0xED, /* 2 of 13, 6 of 12 */ + 0x99, /* 8 of 13 */ + 0x8E, /* 5 of 14, 3 of 13 */ + 0xEE, /* 8 of 14 */ + 0xEE, /* 7 of 15, 1 of 14 */ + 0xEE, /* 8 of 15 */ + 0xFF, /* 8 of 16 */ + 0xFF, /* 8 of 16 */ + 0x88, /* 8 of 17 */ + 0x88, /* 8 of 17 */ + 0x00 /* 1 of 17 */ +}; +uint8_t right[] = +{ + 0xD2, /* 1, 2, 3, 2 of 4 */ + 0x90, /* 2 of 4, 5, 1 of 6 */ + 0xCA, /* 5 of 6, 3 of 7 */ + 0x7C, /* 4 of 7, 4 of 8 */ + 0x87, /* 4 of 8, 4 of 9 */ + 0x28, /* 5 of 9, 3 of 10 */ + 0x33, /* 7 of 10, 1 of 11 */ + 0x55, /* 8 of 11 */ + 0xED, /* 2 of 11, 6 of 12 */ + 0x2E, /* 6 of 12, 2 of 13 */ + 0x33, /* 8 of 13 */ + 0xEB, /* 3 of 13, 5 of 14 */ + 0xEE, /* 8 of 14 */ + 0xDC, /* 1 of 14, 7 of 15 */ + 0xDD, /* 8 of 15 */ + 0xFF, /* 8 of 16 */ + 0xFF, /* 8 of 16 */ + 0x10, /* 8 of 17 */ + 0x11, /* 8 of 17 */ + 0x01 /* 1 of 17 */ +}; + +int main(int argc, char *argv[]) +{ + int i; + bitstream_state_t state; + bitstream_state_t *s; + const uint8_t *r; + uint8_t *w; + uint8_t *cc; + unsigned int x; + int total_bits; + + s = bitstream_init(&state, TRUE); + w = buffer; + total_bits = 0; + for (i = 0; i < SEQUENCE_LENGTH; i++) + { + bitstream_put(s, &w, PATTERN*i, i + 1); + total_bits += (i + 1); + } + bitstream_flush(s, &w); + printf("%d bits written\n", total_bits); + + for (cc = buffer; cc < w; cc++) + printf("%02X ", *cc); + printf("\n"); + for (cc = right; cc < right + sizeof(right); cc++) + printf("%02X ", *cc); + printf("\n"); + + if ((w - buffer) != sizeof(right) || memcmp(buffer, right, sizeof(right))) + { + printf("Test failed\n"); + exit(2); + } + + s = bitstream_init(&state, TRUE); + r = buffer; + for (i = 0; i < SEQUENCE_LENGTH; i++) + { + x = bitstream_get(s, &r, i + 1); + if (x != ((PATTERN*i) & ((1 << (i + 1)) - 1))) + { + printf("Error 0x%X 0x%X\n", x, ((PATTERN*i) & ((1 << (i + 1)) - 1))); + printf("Test failed\n"); + exit(2); + } + } + + s = bitstream_init(&state, FALSE); + w = buffer; + total_bits = 0; + for (i = 0; i < SEQUENCE_LENGTH; i++) + { + bitstream_put(s, &w, PATTERN*i, i + 1); + total_bits += (i + 1); + } + bitstream_flush(s, &w); + printf("%d bits written\n", total_bits); + + for (cc = buffer; cc < w; cc++) + printf("%02X ", *cc); + printf("\n"); + for (cc = left; cc < left + sizeof(left); cc++) + printf("%02X ", *cc); + printf("\n"); + + if ((w - buffer) != sizeof(left) || memcmp(buffer, left, sizeof(left))) + { + printf("Test failed\n"); + exit(2); + } + + s = bitstream_init(&state, FALSE); + r = buffer; + for (i = 0; i < SEQUENCE_LENGTH; i++) + { + x = bitstream_get(s, &r, i + 1); + if (x != ((PATTERN*i) & ((1 << (i + 1)) - 1))) + { + printf("Error 0x%X 0x%X\n", x, ((PATTERN*i) & ((1 << (i + 1)) - 1))); + printf("Test failed\n"); + exit(2); + } + } + + printf("Tests passed.\n"); + return 0; +} +/*- End of function --------------------------------------------------------*/ +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/tests/image_translate_tests.c b/libs/spandsp/tests/image_translate_tests.c new file mode 100644 index 0000000000..be0f5ea18c --- /dev/null +++ b/libs/spandsp/tests/image_translate_tests.c @@ -0,0 +1,452 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * image_translate_tests.c - Tests for the image translation routines. + * + * Written by Steve Underwood + * + * Copyright (C) 2009 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/*! \file */ + +/*! \page image_translate_tests_page Image translation tests +\section image_translate_tests_page_sec_1 What does it do? +*/ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +//#if defined(WITH_SPANDSP_INTERNALS) +#define SPANDSP_EXPOSE_INTERNAL_STRUCTURES +//#endif + +#include "spandsp.h" + +#define INPUT_TIFF_FILE_NAME "../test-data/local/lenna-colour.tif" + +typedef struct +{ + const uint8_t *image; + int width; + int length; + int current_row; + int bytes_per_pixel; +} image_descriptor_t; + +static void display_row(int row, int width, uint8_t buf[]) +{ + int i; + int test_pixel; + + printf("%3d: ", row); + for (i = 0; i < width; i++) + { + test_pixel = (buf[i >> 3] >> (7 - (i & 7))) & 0x01; + printf("%c", (test_pixel) ? ' ' : '@'); + } + printf("\n"); +} +/*- End of function --------------------------------------------------------*/ + +static int test_dithered_50_by_50(int row, int width, uint8_t buf[]) +{ + static const char *image[50] = + { + " 0: @ @ @ @ @ @ @ @@ @@@@@@@@@@@@@@", + " 1: @ @ @ @ @ @ @ @ @ @@ @@ @ @ @ @ @@@@", + " 2: @ @ @ @ @ @ @ @@ @ @ @@@ @@@@@@ @@", + " 3: @ @ @ @ @ @ @ @ @ @ @@@ @@@@ @@@@@@", + " 4: @ @ @ @ @ @ @ @ @ @@@ @ @@ @@@@ @@@@", + " 5: @ @ @ @ @ @ @ @ @ @ @ @ @@ @@@ @@@@@@", + " 6: @ @ @ @ @ @ @@ @@@@ @@@ @@@ @@ @", + " 7: @ @ @ @ @ @ @ @ @ @@ @@ @ @@ @@@@@@", + " 8: @ @ @ @ @ @ @ @ @@@ @@@@@@@@@ @@@", + " 9: @ @ @ @ @ @ @ @ @ @ @ @ @ @@ @ @ @ @@@@@", + " 10: @ @ @ @ @ @@ @ @@ @@@@@@@@@@@@@", + " 11: @ @ @ @ @ @ @ @ @ @@ @@ @ @ @@ @@ @@", + " 12: @ @ @ @ @ @ @ @ @ @@ @@@@@@ @@@@@@@", + " 13: @ @ @ @ @ @ @ @ @@ @ @ @ @ @@@@@ @@@", + " 14: @ @ @ @ @ @ @ @@ @@@ @@@ @ @@@@@@", + " 15: @ @ @ @ @ @ @ @ @ @ @ @ @@ @@@@@@@ @@", + " 16: @ @ @ @ @ @ @ @ @@ @@ @@ @@ @@@@@", + " 17: @ @ @ @ @ @ @ @ @ @@ @@ @@ @@ @@@@@@@", + " 18: @ @ @ @ @ @ @ @ @ @ @ @@ @@@@@ @ @@@", + " 19: @ @ @ @ @ @ @ @ @@@ @@@ @ @@@@@@@", + " 20: @ @ @ @ @ @ @ @ @ @@ @ @@ @@@@@@ @@@ @", + " 21: @ @ @ @ @ @ @ @@ @@ @ @ @@@@@@@", + " 22: @ @ @ @ @ @@ @ @ @ @ @@ @@@@@@@ @@ @@", + " 23: @ @ @ @ @ @ @ @@ @@ @@ @ @ @@@@@@@", + " 24: @ @ @ @ @@ @ @ @@ @ @ @@@@@@ @@@@@", + " 25: @ @ @ @ @ @ @ @ @ @ @@@@@ @ @@@@ @@", + " 26: @ @ @ @ @ @ @ @ @ @@ @ @ @@@@ @@@@@", + " 27: @ @ @ @ @ @ @ @ @ @@ @ @@ @@@ @@@@@@@", + " 28: @ @ @ @ @ @ @ @ @@@ @@@ @@@ @@ @@", + " 29: @ @ @ @ @ @ @ @ @@ @ @@ @ @@ @@@@@@@", + " 30: @ @ @ @ @ @ @ @ @ @ @ @@@@@@@ @@@@@", + " 31: @ @ @ @ @ @ @ @ @ @@@@ @ @ @@@@ @@", + " 32: @ @ @ @ @ @ @ @ @ @@ @ @ @@@@@@@ @@@@@", + " 33: @ @ @ @ @ @ @ @@@ @@ @ @ @@@@@@@", + " 34: @ @ @ @ @ @ @ @ @ @ @ @ @@ @@@@@@ @ @@@", + " 35: @ @ @ @ @ @ @ @ @ @@ @ @ @@@@@@@", + " 36: @ @ @ @ @ @ @ @ @@ @@@ @@@@@@@ @@@ @", + " 37: @ @ @ @ @ @ @ @ @ @ @@ @ @ @@@@@@@", + " 38: @ @ @ @ @ @ @ @ @@ @@ @@@@@@@ @@ @@", + " 39: @ @ @ @ @ @ @ @ @ @ @@ @@ @ @ @@@@@@@", + " 40: @ @ @ @ @ @ @ @ @ @@ @@ @@@@ @@@@@", + " 41: @ @ @ @ @ @ @ @ @ @@ @ @@ @@@ @@@@ @@", + " 42: @ @ @ @ @ @ @@ @@ @@ @@ @@@ @@@@@", + " 43: @ @ @ @ @ @ @ @ @ @ @@ @@@ @@@@@@@", + " 44: @ @ @ @ @ @ @ @ @ @ @@@ @@@ @@@ @@ @@", + " 45: @ @ @ @ @ @ @@ @ @ @ @@ @@@@@@@", + " 46: @ @ @ @ @ @ @ @ @ @ @ @@ @@@@@@@@@ @@@@@", + " 47: @ @ @ @ @ @ @ @ @ @@ @ @ @ @@@@ @@", + " 48: @ @ @ @ @ @ @@ @ @@ @@@@@@ @@@@@", + " 49: @ @ @ @ @ @ @ @ @ @ @ @@ @@ @ @ @@@@@@@" + }; + int i; + int match; + int ref_pixel; + int test_pixel; + + match = 0; + for (i = 0; i < width; i++) + { + ref_pixel = (image[row][i + 5] == ' '); + test_pixel = (buf[i >> 3] >> (7 - (i & 7))) & 0x01; + if (ref_pixel != test_pixel) + match = -1; + } + return match; +} +/*- End of function --------------------------------------------------------*/ + +static int row_read(void *user_data, uint8_t buf[], size_t len) +{ + image_descriptor_t *im; + + im = (image_descriptor_t *) user_data; + if (im->current_row >= im->length) + return 0; + memcpy(buf, &im->image[im->current_row*im->width*im->bytes_per_pixel], len); + im->current_row++; + return len; +} +/*- End of function --------------------------------------------------------*/ + +static void get_flattened_image(image_translate_state_t *s, int compare) +{ + int i; + int len; + uint8_t row_buf[5000]; + + for (i = 0; i < s->output_length; i++) + { + if ((len = image_translate_row(s, row_buf, (s->output_width + 7)/8)) != (s->output_width + 7)/8) + { + printf("Image finished early - %d %d\n", len, (s->output_width + 7)/8); + exit(2); + } + display_row(i, s->output_width, row_buf); + if (compare) + { + if (test_dithered_50_by_50(i, s->output_width, row_buf)) + { + printf("Dithered image mismatch at row %d\n", i); + printf("Test failed\n"); + exit(2); + } + } + } + if ((len = image_translate_row(s, row_buf, (s->output_width + 7)/8)) != 0) + { + printf("Image finished late - %d %d\n", len, (s->output_width + 7)/8); + exit(2); + } +} +/*- End of function --------------------------------------------------------*/ + +static void dither_tests_gray16(void) +{ + int i; + int j; + image_translate_state_t bw; + image_translate_state_t *s = &bw; + uint16_t image[50*50]; + image_descriptor_t im; + + printf("Dithering from a 16 bit per sample gray scale to bi-level\n"); + im.image = (const uint8_t *) image; + im.width = 50; + im.length = 50; + im.bytes_per_pixel = 2; + im.current_row = 0; + + for (i = 0; i < im.length; i++) + { + for (j = 0; j < im.width; j++) + image[i*im.width + j] = j*1200; + } + + s = image_translate_init(s, IMAGE_TRANSLATE_FROM_GRAY_16, im.width, im.length, -1, row_read, &im); + get_flattened_image(s, TRUE); +} +/*- End of function --------------------------------------------------------*/ + +static void dither_tests_gray8(void) +{ + int i; + int j; + image_translate_state_t bw; + image_translate_state_t *s = &bw; + uint8_t image[50*50]; + image_descriptor_t im; + + printf("Dithering from a 8 bit per sample gray scale to bi-level\n"); + im.image = image; + im.width = 50; + im.length = 50; + im.bytes_per_pixel = 1; + im.current_row = 0; + + for (i = 0; i < im.length; i++) + { + for (j = 0; j < im.width; j++) + image[i*im.width + j] = j*1200/256; + } + s = image_translate_init(s, IMAGE_TRANSLATE_FROM_GRAY_8, im.width, im.length, -1, row_read, &im); + get_flattened_image(s, TRUE); +} +/*- End of function --------------------------------------------------------*/ + +static void dither_tests_colour16(void) +{ + int i; + int j; + image_translate_state_t bw; + image_translate_state_t *s = &bw; + uint16_t image[50*50*3]; + image_descriptor_t im; + + printf("Dithering from a 3x16 bit per sample colour to bi-level\n"); + im.image = (const uint8_t *) image; + im.width = 50; + im.length = 50; + im.bytes_per_pixel = 6; + im.current_row = 0; + + for (i = 0; i < im.length; i++) + { + for (j = 0; j < im.width; j++) + { + image[i*3*im.width + 3*j + 0] = j*1200; + image[i*3*im.width + 3*j + 1] = j*1200; + image[i*3*im.width + 3*j + 2] = j*1200; + } + } + s = image_translate_init(s, IMAGE_TRANSLATE_FROM_COLOUR_16, im.width, im.length, -1, row_read, &im); + get_flattened_image(s, TRUE); +} +/*- End of function --------------------------------------------------------*/ + +static void dither_tests_colour8(void) +{ + int i; + int j; + image_translate_state_t bw; + image_translate_state_t *s = &bw; + uint8_t image[50*50*3]; + image_descriptor_t im; + + printf("Dithering from a 3x8 bit per sample colour to bi-level\n"); + im.image = image; + im.width = 50; + im.length = 50; + im.bytes_per_pixel = 3; + im.current_row = 0; + + for (i = 0; i < im.length; i++) + { + for (j = 0; j < im.width; j++) + { + image[i*3*im.width + 3*j + 0] = j*1200/256; + image[i*3*im.width + 3*j + 1] = j*1200/256; + image[i*3*im.width + 3*j + 2] = j*1200/256; + } + } + + s = image_translate_init(s, IMAGE_TRANSLATE_FROM_COLOUR_8, im.width, im.length, -1, row_read, &im); + get_flattened_image(s, TRUE); +} +/*- End of function --------------------------------------------------------*/ + +static void grow_tests_colour8(void) +{ + int i; + int j; + image_translate_state_t resize; + image_translate_state_t *s1 = &resize; + uint8_t image[50*50*3]; + image_descriptor_t im; + + printf("Image growth tests\n"); + im.image = image; + im.width = 50; + im.length = 50; + im.bytes_per_pixel = 3; + im.current_row = 0; + + for (i = 0; i < im.length; i++) + { + for (j = 0; j < im.width; j++) + { + image[i*3*im.width + 3*j + 0] = j*1200/256; + image[i*3*im.width + 3*j + 1] = j*1200/256; + image[i*3*im.width + 3*j + 2] = j*1200/256; + } + } + + s1 = image_translate_init(s1, IMAGE_TRANSLATE_FROM_COLOUR_8, im.width, im.length, 200, row_read, &im); + + get_flattened_image(s1, FALSE); +} +/*- End of function --------------------------------------------------------*/ + +static void lenna_tests(int output_width, const char *file) +{ + TIFF *in_file; + TIFF *out_file; + int image_width; + int image_length; + int output_length; + uint8_t *image; + uint8_t *image2; + int len; + int total; + int16_t bits_per_sample; + int16_t samples_per_pixel; + int i; + int n; + image_translate_state_t bw; + image_translate_state_t *s = &bw; + image_descriptor_t im; + + printf("Dithering Lenna from colour to bi-level test\n"); + if ((in_file = TIFFOpen(INPUT_TIFF_FILE_NAME, "r")) == NULL) + return; + image_width = 0; + TIFFGetField(in_file, TIFFTAG_IMAGEWIDTH, &image_width); + if (image_width <= 0) + return; + image_length = 0; + TIFFGetField(in_file, TIFFTAG_IMAGELENGTH, &image_length); + if (image_length <= 0) + return; + bits_per_sample = 0; + TIFFGetField(in_file, TIFFTAG_BITSPERSAMPLE, &bits_per_sample); + samples_per_pixel = 0; + TIFFGetField(in_file, TIFFTAG_SAMPLESPERPIXEL, &samples_per_pixel); + printf("Original image is %d x %d, %d bits per sample, %d samples per pixel\n", image_width, image_length, bits_per_sample, samples_per_pixel); + if ((image = malloc(image_width*image_length*samples_per_pixel)) == NULL) + return; + for (total = 0, i = 0; i < 1000; i++) + { + len = TIFFReadEncodedStrip(in_file, i, &image[total], image_width*image_length*samples_per_pixel - total); + if (len <= 0) + break; + total += len; + if (total == image_width*image_length*samples_per_pixel) + { + printf("Done\n"); + break; + } + } + printf("Image size %d %d\n", total, image_width*image_length*samples_per_pixel); + TIFFClose(in_file); + + im.image = image; + im.width = image_width; + im.length = image_length; + im.current_row = 0; + im.bytes_per_pixel = samples_per_pixel; + + s = image_translate_init(s, IMAGE_TRANSLATE_FROM_COLOUR_8, image_width, image_length, output_width, row_read, &im); + output_width = image_translate_get_output_width(s); + output_length = image_translate_get_output_length(s); + + if ((out_file = TIFFOpen(file, "w")) == NULL) + return; + TIFFSetField(out_file, TIFFTAG_IMAGEWIDTH, output_width); + TIFFSetField(out_file, TIFFTAG_IMAGELENGTH, output_length); + TIFFSetField(out_file, TIFFTAG_BITSPERSAMPLE, 1); + TIFFSetField(out_file, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + TIFFSetField(out_file, TIFFTAG_SAMPLESPERPIXEL, 1); + TIFFSetField(out_file, TIFFTAG_ROWSPERSTRIP, -1); + TIFFSetField(out_file, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(out_file, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE); + TIFFSetField(out_file, TIFFTAG_FILLORDER, FILLORDER_LSB2MSB); + TIFFSetField(out_file, TIFFTAG_PAGENUMBER, 0, 1); + TIFFSetField(out_file, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE); + TIFFSetField(out_file, TIFFTAG_FILLORDER, FILLORDER_LSB2MSB); + + printf("Input %d x %d, output %d x %d\n", image_width, image_length, output_width, output_length); + + if ((image2 = malloc(output_width*output_length/8)) == NULL) + return; + memset(image2, 0, output_width*output_length/8); + n = 0; + for (i = 0; i < output_length; i++) + n += image_translate_row(s, &image2[n], output_width/8); + + TIFFWriteEncodedStrip(out_file, 0, image2, output_width*output_length/8); + TIFFWriteDirectory(out_file); + TIFFClose(out_file); +} +/*- End of function --------------------------------------------------------*/ + +int main(int argc, char **argv) +{ +#if 1 + dither_tests_gray16(); + dither_tests_gray8(); + dither_tests_colour16(); + dither_tests_colour8(); +#endif +#if 1 + grow_tests_colour8(); +#endif +#if 1 + lenna_tests(0, "lenna-bw.tif"); + lenna_tests(1728, "lenna-bw-1728.tif"); + lenna_tests(200, "lenna-bw-200.tif"); +#endif + printf("Tests passed.\n"); + return 0; +} +/*- End of function --------------------------------------------------------*/ +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/tests/saturated_tests.c b/libs/spandsp/tests/saturated_tests.c new file mode 100644 index 0000000000..de2a40bcc2 --- /dev/null +++ b/libs/spandsp/tests/saturated_tests.c @@ -0,0 +1,311 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * saturated_tests.c + * + * Written by Steve Underwood + * + * Copyright (C) 2004 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/*! \page saturated_tests_page Saturated arithmetic function tests +\section saturated_tests_page_sec_1 What does it do? +???. + +\section saturated_tests_page_sec_2 How does it work? +???. +*/ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include + +#define SPANDSP_EXPOSE_INTERNAL_STRUCTURES +#include "spandsp.h" + +int main(int argc, char *argv[]) +{ + printf("Testing 16 bit saturation\n"); + if (saturate16(10000) != 10000 + || + saturate16(-10000) != -10000 + || + saturate16(32767) != 32767 + || + saturate16(-32768) != -32768 + || + saturate16(32768) != 32767 + || + saturate16(-32769) != -32768) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 15 bit saturation\n"); + if (saturate15(10000) != 10000 + || + saturate15(-10000) != -10000 + || + saturate15(16383) != 16383 + || + saturate15(-16384) != -16384 + || + saturate15(16384) != 16383 + || + saturate15(-16385) != -16384) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 16 bit unsigned saturation\n"); + if (saturateu16(10000) != 10000 + || + saturateu16(32767) != 32767 + || + saturateu16(65535) != 65535 + || + saturateu16(65536) != 65535) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 8 bit unsigned saturation\n"); + if (saturateu8(100) != 100 + || + saturateu8(127) != 127 + || + saturateu8(255) != 255 + || + saturateu8(256) != 255) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 16 bit saturation from float\n"); + if (fsaturatef(10000.0f) != 10000 + || + fsaturatef(-10000.0f) != -10000 + || + fsaturatef(32767.0f) != 32767 + || + fsaturatef(-32768.0f) != -32768 + || + fsaturatef(32768.0f) != 32767 + || + fsaturatef(-32769.0f) != -32768) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 16 bit saturation from double\n"); + if (fsaturate(10000.0) != 10000 + || + fsaturate(-10000.0) != -10000 + || + fsaturate(32767.0) != 32767 + || + fsaturate(-32768.0) != -32768 + || + fsaturate(32768.0) != 32767 + || + fsaturate(-32769.0) != -32768) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 16 bit fast saturation from float\n"); + if (ffastsaturatef(10000.0f) != 10000 + || + ffastsaturatef(-10000.0f) != -10000 + || + ffastsaturatef(32767.0f) != 32767 + || + ffastsaturatef(-32768.0f) != -32768 + || + ffastsaturatef(32768.0f) != 32767 + || + ffastsaturatef(-32769.0f) != -32768) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 16 bit fast saturation from double\n"); + if (ffastsaturate(10000.0) != 10000 + || + ffastsaturate(-10000.0) != -10000 + || + ffastsaturate(32767.0) != 32767 + || + ffastsaturate(-32768.0) != -32768 + || + ffastsaturate(32768.0) != 32767 + || + ffastsaturate(-32769.0) != -32768) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 16 bit float saturation from float\n"); + if (ffsaturatef(10000.0f) != 10000.0f + || + ffsaturatef(-10000.0f) != -10000.0f + || + ffsaturatef(32767.0f) != 32767.0f + || + ffsaturatef(-32768.0f) != -32768.0f + || + ffsaturatef(32768.0f) != 32767.0f + || + ffsaturatef(-32769.0f) != -32768.0f) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 16 bit double saturation from double\n"); + if (ffsaturate(10000.0) != 10000.0 + || + ffsaturate(-10000.0) != -10000.0 + || + ffsaturate(32767.0) != 32767.0 + || + ffsaturate(-32768.0) != -32768.0 + || + ffsaturate(32768.0) != 32767.0 + || + ffsaturate(-32769.0) != -32768.0) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 16 bit add\n"); + if (saturated_add16(10000, 10000) != 20000 + || + saturated_add16(10000, -10000) != 0 + || + saturated_add16(-10000, 10000) != 0 + || + saturated_add16(-10000, -10000) != -20000 + || + saturated_add16(-30000, -30000) != INT16_MIN + || + saturated_add16(30000, 30000) != INT16_MAX) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 32 bit add\n"); + if (saturated_add32(10000, 10000) != 20000 + || + saturated_add32(10000, -10000) != 0 + || + saturated_add32(-10000, 10000) != 0 + || + saturated_add32(-10000, -10000) != -20000 + || + saturated_add32(-2000000000, -2000000000) != INT32_MIN + || + saturated_add32(2000000000, 2000000000) != INT32_MAX) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 16 bit subtract\n"); + if (saturated_sub16(10000, 10000) != 0 + || + saturated_sub16(10000, -10000) != 20000 + || + saturated_sub16(-10000, 10000) != -20000 + || + saturated_sub16(-10000, -10000) != 0 + || + saturated_sub16(-30000, 30000) != INT16_MIN + || + saturated_sub16(30000, -30000) != INT16_MAX) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 32 bit subtract\n"); + if (saturated_sub32(10000, 10000) != 0 + || + saturated_sub32(10000, -10000) != 20000 + || + saturated_sub32(-10000, 10000) != -20000 + || + saturated_sub32(-10000, -10000) != 0 + || + saturated_sub32(-2000000000, 2000000000) != INT32_MIN + || + saturated_sub32(2000000000, -2000000000) != INT32_MAX) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 16 x 16 => 16 bit multiply\n"); + if (saturated_mul16(100, 100) != 0 + || + saturated_mul16(255, 255) != 1 + || + saturated_mul16(32767, -32768) != -32767 + || + saturated_mul16(-32768, 32767) != -32767 + || + saturated_mul16(32767, 32767) != 32766 + || + saturated_mul16(-32768, -32768) != 32767) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 16 x 16 => 32 bit multiply\n"); + if (saturated_mul16_32(100, 100) != 20000 + || + saturated_mul16_32(-100, 100) != -20000 + || + saturated_mul16_32(32767, -32768) != -2147418112 + || + saturated_mul16_32(-32768, 32767) != -2147418112 + || + saturated_mul16_32(32767, 32767) != 2147352578 + || + saturated_mul16_32(-32768, -32768) != -2147483648) + { + printf("Test failed.\n"); + exit(2); + } + printf("Testing 16 bit absolute\n"); + if (saturated_abs16(10000) != 10000 + || + saturated_abs16(-10000) != 10000 + || + saturated_abs16(32767) != 32767 + || + saturated_abs16(-32768) != 32767) + { + printf("Test failed.\n"); + exit(2); + } + printf("Tests passed.\n"); + return 0; +} +/*- End of function --------------------------------------------------------*/ +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/tests/timezone_tests.c b/libs/spandsp/tests/timezone_tests.c new file mode 100644 index 0000000000..fb72f98437 --- /dev/null +++ b/libs/spandsp/tests/timezone_tests.c @@ -0,0 +1,86 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * timezone_tests.c - Timezone handling for time interpretation + * + * Written by Steve Underwood + * + * Copyright (C) 2010 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/*! \page timezone_tests_page Timezone handling tests +\section timezone_tests_page_sec_1 What does it do? +*/ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +//#if defined(WITH_SPANDSP_INTERNALS) +#define SPANDSP_EXPOSE_INTERNAL_STRUCTURES +//#endif + +#include "spandsp.h" + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE (!FALSE) +#endif + +int main(int argc, char *argv[]) +{ + struct tm tms; + struct tm *tmp = &tms; + time_t ltime; + tz_t *tz; + + /* Get the current time */ + ltime = time(NULL); + + /* Compute the local current time now for several localities, based on Posix tz strings */ + + tz = tz_init(NULL, "GMT0GMT0,M10.5.0,M3.5.0"); + tz_localtime(tz, tmp, ltime); + printf("Local time is %02d:%02d:%02d\n", tmp->tm_hour, tmp->tm_min, tmp->tm_sec); + printf("Time zone is %s\n", tz_tzname(tz, tmp->tm_isdst)); + + tz_init(tz, "CST-8CST-8,M10.5.0,M3.5.0"); + tz_localtime(tz, tmp, ltime); + printf("Local time is %02d:%02d:%02d\n", tmp->tm_hour, tmp->tm_min, tmp->tm_sec); + printf("Time zone is %s\n", tz_tzname(tz, tmp->tm_isdst)); + + tz_init(tz, "AEST-10AEDT-11,M10.5.0,M3.5.0"); + tz_localtime(tz, tmp, ltime); + printf("Local time is %02d:%02d:%02d\n", tmp->tm_hour, tmp->tm_min, tmp->tm_sec); + printf("Time zone is %s\n", tz_tzname(tz, tmp->tm_isdst)); + + tz_free(tz); + + return 0; +} +/*- End of function --------------------------------------------------------*/ +/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/tests/tsb85_extra_tests.sh b/libs/spandsp/tests/tsb85_extra_tests.sh new file mode 100755 index 0000000000..cc43f293ae --- /dev/null +++ b/libs/spandsp/tests/tsb85_extra_tests.sh @@ -0,0 +1,33 @@ +#!/bin/sh +# +# spandsp fax tests +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 2.1, +# as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +run_tsb85_test() +{ + rm -f fax_tests_1.tif + echo ./tsb85_tests ${TEST} + ./tsb85_tests -x ../spandsp/fax-tests.xml ${TEST} 2>xyzzy2 + RETVAL=$? + if [ $RETVAL != 0 ] + then + echo tsb85_tests ${TEST} failed! + exit $RETVAL + fi +} + +for TEST in PPS-MPS-lost-PPS ; do + run_tsb85_test +done From d1937dfdef3c587dcecdcdc4dd005d6c455e68db Mon Sep 17 00:00:00 2001 From: Steve Underwood Date: Sun, 25 Jul 2010 03:57:54 +0800 Subject: [PATCH 049/161] Removed some obsolete files from spandsp --- libs/spandsp/src/spandsp/private/t4.h | 217 - libs/spandsp/src/spandsp/t4.h | 473 - libs/spandsp/src/t4.c | 2400 ---- libs/spandsp/src/t4_states.h | 12680 ------------------ libs/spandsp/src/v17rx_constellation_maps.h | 5516 -------- libs/spandsp/src/v17tx_constellation_maps.h | 313 - 6 files changed, 21599 deletions(-) delete mode 100644 libs/spandsp/src/spandsp/private/t4.h delete mode 100644 libs/spandsp/src/spandsp/t4.h delete mode 100644 libs/spandsp/src/t4.c delete mode 100644 libs/spandsp/src/t4_states.h delete mode 100644 libs/spandsp/src/v17rx_constellation_maps.h delete mode 100644 libs/spandsp/src/v17tx_constellation_maps.h diff --git a/libs/spandsp/src/spandsp/private/t4.h b/libs/spandsp/src/spandsp/private/t4.h deleted file mode 100644 index 6d0e08e795..0000000000 --- a/libs/spandsp/src/spandsp/private/t4.h +++ /dev/null @@ -1,217 +0,0 @@ -/* - * SpanDSP - a series of DSP components for telephony - * - * private/t4.h - definitions for T.4 fax processing - * - * Written by Steve Underwood - * - * Copyright (C) 2003 Steve Underwood - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t4.h,v 1.4 2009/02/20 12:34:20 steveu Exp $ - */ - -#if !defined(_SPANDSP_PRIVATE_T4_H_) -#define _SPANDSP_PRIVATE_T4_H_ - -/*! - TIFF specific state information to go with T.4 compression or decompression handling. -*/ -typedef struct -{ - /*! \brief The libtiff context for the current TIFF file */ - TIFF *tiff_file; - - /*! \brief The compression type for output to the TIFF file. */ - int output_compression; - /*! \brief The TIFF G3 FAX options. */ - int output_t4_options; - /*! \brief The TIFF photometric setting for the current page. */ - uint16_t photo_metric; - /*! \brief The TIFF fill order setting for the current page. */ - uint16_t fill_order; - - /* "Background" information about the FAX, which can be stored in the image file. */ - /*! \brief The vendor of the machine which produced the file. */ - const char *vendor; - /*! \brief The model of machine which produced the file. */ - const char *model; - /*! \brief The local ident string. */ - const char *local_ident; - /*! \brief The remote end's ident string. */ - const char *far_ident; - /*! \brief The FAX sub-address. */ - const char *sub_address; - /*! \brief The FAX DCS information, as an ASCII string. */ - const char *dcs; -} t4_tiff_state_t; - -/*! - T.4 FAX compression/decompression descriptor. This defines the working state - for a single instance of a T.4 FAX compression or decompression channel. -*/ -struct t4_state_s -{ - /*! \brief The same structure is used for T.4 transmit and receive. This variable - records which mode is in progress. */ - int rx; - - /*! \brief The type of compression used between the FAX machines. */ - int line_encoding; - /*! \brief The minimum number of encoded bits per row. This is a timing thing - for hardware FAX machines. */ - int min_bits_per_row; - - /*! \brief Callback function to read a row of pixels from the image source. */ - t4_row_read_handler_t row_read_handler; - /*! \brief Opaque pointer passed to row_read_handler. */ - void *row_read_user_data; - /*! \brief Callback function to write a row of pixels to the image destination. */ - t4_row_write_handler_t row_write_handler; - /*! \brief Opaque pointer passed to row_write_handler. */ - void *row_write_user_data; - - /*! \brief The time at which handling of the current page began. */ - time_t page_start_time; - - /*! \brief The current number of bytes per row of uncompressed image data. */ - int bytes_per_row; - /*! \brief The size of the image in the image buffer, in bytes. */ - int image_size; - /*! \brief The size of the compressed image on the line side, in bits. */ - int line_image_size; - /*! \brief The current size of the image buffer. */ - int image_buffer_size; - /*! \brief A point to the image buffer. */ - uint8_t *image_buffer; - - /*! \brief The current file name. */ - const char *file; - /*! \brief The first page to transfer. -1 to start at the beginning of the file. */ - int start_page; - /*! \brief The last page to transfer. -1 to continue to the end of the file. */ - int stop_page; - - /*! \brief The number of pages transferred to date. */ - int current_page; - /*! \brief The number of pages in the current image file. */ - int pages_in_file; - /*! \brief Column-to-column (X) resolution in pixels per metre. */ - int x_resolution; - /*! \brief Row-to-row (Y) resolution in pixels per metre. */ - int y_resolution; - /*! \brief Width of the current page, in pixels. */ - int image_width; - /*! \brief Length of the current page, in pixels. */ - int image_length; - /*! \brief Current pixel row number. */ - int row; - /*! \brief The current number of consecutive bad rows. */ - int curr_bad_row_run; - /*! \brief The longest run of consecutive bad rows seen in the current page. */ - int longest_bad_row_run; - /*! \brief The total number of bad rows in the current page. */ - int bad_rows; - - /*! \brief Incoming bit buffer for decompression. */ - uint32_t rx_bitstream; - /*! \brief The number of bits currently in rx_bitstream. */ - int rx_bits; - /*! \brief The number of bits to be skipped before trying to match the next code word. */ - int rx_skip_bits; - - /*! \brief This variable is set if we are treating the current row as a 2D encoded - one. */ - int row_is_2d; - /*! \brief TRUE if the current run is black */ - int its_black; - /*! \brief The current length of the current row. */ - int row_len; - /*! \brief This variable is used to count the consecutive EOLS we have seen. If it - reaches six, this is the end of the image. It is initially set to -1 for - 1D and 2D decoding, as an indicator that we must wait for the first EOL, - before decodin any image data. */ - int consecutive_eols; - - /*! \brief Black and white run-lengths for the current row. */ - uint32_t *cur_runs; - /*! \brief Black and white run-lengths for the reference row. */ - uint32_t *ref_runs; - /*! \brief The number of runs currently in the reference row. */ - int ref_steps; - /*! \brief The current step into the reference row run-lengths buffer. */ - int b_cursor; - /*! \brief The current step into the current row run-lengths buffer. */ - int a_cursor; - - /*! \brief The reference or starting changing element on the coding line. At the - start of the coding line, a0 is set on an imaginary white changing element - situated just before the first element on the line. During the coding of - the coding line, the position of a0 is defined by the previous coding mode. - (See 4.2.1.3.2.). */ - int a0; - /*! \brief The first changing element on the reference line to the right of a0 and of - opposite colour to a0. */ - int b1; - /*! \brief The length of the in-progress run of black or white. */ - int run_length; - /*! \brief 2D horizontal mode control. */ - int black_white; - - /*! \brief Encoded data bits buffer. */ - uint32_t tx_bitstream; - /*! \brief The number of bits currently in tx_bitstream. */ - int tx_bits; - - /*! \brief A pointer into the image buffer indicating where the last row begins */ - int last_row_starts_at; - /*! \brief A pointer into the image buffer indicating where the current row begins */ - int row_starts_at; - - /*! \brief Pointer to the buffer for the current pixel row. */ - uint8_t *row_buf; - - /*! \brief Pointer to the byte containing the next image bit to transmit. */ - int bit_pos; - /*! \brief Pointer to the bit within the byte containing the next image bit to transmit. */ - int bit_ptr; - - /*! \brief The current maximum contiguous rows that may be 2D encoded. */ - int max_rows_to_next_1d_row; - /*! \brief Number of rows left that can be 2D encoded, before a 1D encoded row - must be used. */ - int rows_to_next_1d_row; - /*! \brief The current number of bits in the current encoded row. */ - int row_bits; - /*! \brief The minimum bits in any row of the current page. For monitoring only. */ - int min_row_bits; - /*! \brief The maximum bits in any row of the current page. For monitoring only. */ - int max_row_bits; - - /*! \brief The text which will be used in FAX page header. No text results - in no header line. */ - const char *header_info; - - /*! \brief Error and flow logging control */ - logging_state_t logging; - - /*! \brief All TIFF file specific state information for the T.4 context. */ - t4_tiff_state_t tiff; -}; - -#endif -/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/spandsp/t4.h b/libs/spandsp/src/spandsp/t4.h deleted file mode 100644 index de834262cc..0000000000 --- a/libs/spandsp/src/spandsp/t4.h +++ /dev/null @@ -1,473 +0,0 @@ -/* - * SpanDSP - a series of DSP components for telephony - * - * t4.h - definitions for T.4 fax processing - * - * Written by Steve Underwood - * - * Copyright (C) 2003 Steve Underwood - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t4.h,v 1.59 2009/04/12 09:12:10 steveu Exp $ - */ - -/*! \file */ - -#if !defined(_SPANDSP_T4_H_) -#define _SPANDSP_T4_H_ - -/*! \page t4_page T.4 image compression and decompression - -\section t4_page_sec_1 What does it do? -The T.4 image compression and decompression routines implement the 1D and 2D -encoding methods defined in ITU specification T.4. They also implement the pure -2D encoding method defined in T.6. These are image compression algorithms used -for FAX transmission. - -\section t4_page_sec_1 How does it work? -*/ - -typedef int (*t4_row_read_handler_t)(void *user_data, uint8_t buf[], size_t len); -typedef int (*t4_row_write_handler_t)(void *user_data, const uint8_t buf[], size_t len); - -/*! Supported compression modes. */ -typedef enum -{ - T4_COMPRESSION_ITU_T4_1D = 1, - T4_COMPRESSION_ITU_T4_2D = 2, - T4_COMPRESSION_ITU_T6 = 3 -} t4_image_compression_t; - -/*! Supported X resolutions, in pixels per metre. */ -typedef enum -{ - T4_X_RESOLUTION_R4 = 4016, - T4_X_RESOLUTION_R8 = 8031, - T4_X_RESOLUTION_300 = 11811, - T4_X_RESOLUTION_R16 = 16063, - T4_X_RESOLUTION_600 = 23622, - T4_X_RESOLUTION_800 = 31496, - T4_X_RESOLUTION_1200 = 47244 -} t4_image_x_resolution_t; - -/*! Supported Y resolutions, in pixels per metre. */ -typedef enum -{ - T4_Y_RESOLUTION_STANDARD = 3850, - T4_Y_RESOLUTION_FINE = 7700, - T4_Y_RESOLUTION_300 = 11811, - T4_Y_RESOLUTION_SUPERFINE = 15400, /* 400 is 15748 */ - T4_Y_RESOLUTION_600 = 23622, - T4_Y_RESOLUTION_800 = 31496, - T4_Y_RESOLUTION_1200 = 47244 -} t4_image_y_resolution_t; - -/*! - Exact widths in PELs for the difference resolutions, and page widths. - Note: - The A4 widths also apply to North American letter and legal. - The R4 resolution widths are not supported in recent versions of T.30 - Only images of exactly these widths are acceptable for FAX transmisson. - - R4 864 pels/215mm for ISO A4, North American Letter and Legal - R4 1024 pels/255mm for ISO B4 - R4 1216 pels/303mm for ISO A3 - R8 1728 pels/215mm for ISO A4, North American Letter and Legal - R8 2048 pels/255mm for ISO B4 - R8 2432 pels/303mm for ISO A3 - R16 3456 pels/215mm for ISO A4, North American Letter and Legal - R16 4096 pels/255mm for ISO B4 - R16 4864 pels/303mm for ISO A3 -*/ -typedef enum -{ - T4_WIDTH_R4_A4 = 864, - T4_WIDTH_R4_B4 = 1024, - T4_WIDTH_R4_A3 = 1216, - T4_WIDTH_R8_A4 = 1728, - T4_WIDTH_R8_B4 = 2048, - T4_WIDTH_R8_A3 = 2432, - T4_WIDTH_300_A4 = 2592, - T4_WIDTH_300_B4 = 3072, - T4_WIDTH_300_A3 = 3648, - T4_WIDTH_R16_A4 = 3456, - T4_WIDTH_R16_B4 = 4096, - T4_WIDTH_R16_A3 = 4864, - T4_WIDTH_600_A4 = 5184, - T4_WIDTH_600_B4 = 6144, - T4_WIDTH_600_A3 = 7296, - T4_WIDTH_1200_A4 = 10368, - T4_WIDTH_1200_B4 = 12288, - T4_WIDTH_1200_A3 = 14592 -} t4_image_width_t; - -/*! - Length of the various supported paper sizes, in pixels at the various Y resolutions. - Paper sizes are - A4 (215mm x 297mm) - B4 (255mm x 364mm) - A3 (303mm x 418.56mm) - North American Letter (215.9mm x 279.4mm) - North American Legal (215.9mm x 355.6mm) - Unlimited - - T.4 does not accurately define the maximum number of scan lines in a page. A wide - variety of maximum row counts are used in the real world. It is important not to - set our sending limit too high, or a receiving machine might split pages. It is - important not to set it too low, or we might clip pages. - - Values seen for standard resolution A4 pages include 1037, 1045, 1109, 1126 and 1143. - 1109 seems the most-popular. At fine res 2150, 2196, 2200, 2237, 2252-2262, 2264, - 2286, and 2394 are used. 2255 seems the most popular. We try to use balanced choices - here. -*/ -typedef enum -{ - /* A4 is 297mm long */ - T4_LENGTH_STANDARD_A4 = 1143, - T4_LENGTH_FINE_A4 = 2286, - T4_LENGTH_300_A4 = 4665, - T4_LENGTH_SUPERFINE_A4 = 4573, - T4_LENGTH_600_A4 = 6998, - T4_LENGTH_800_A4 = 9330, - T4_LENGTH_1200_A4 = 13996, - /* B4 is 364mm long */ - T4_LENGTH_STANDARD_B4 = 1401, - T4_LENGTH_FINE_B4 = 2802, - T4_LENGTH_300_B4 = 0, - T4_LENGTH_SUPERFINE_B4 = 5605, - T4_LENGTH_600_B4 = 0, - T4_LENGTH_800_B4 = 0, - T4_LENGTH_1200_B4 = 0, - /* North American letter is 279.4mm long */ - T4_LENGTH_STANDARD_US_LETTER = 1075, - T4_LENGTH_FINE_US_LETTER = 2151, - T4_LENGTH_300_US_LETTER = 0, - T4_LENGTH_SUPERFINE_US_LETTER = 4302, - T4_LENGTH_600_US_LETTER = 0, - T4_LENGTH_800_US_LETTER = 0, - T4_LENGTH_1200_US_LETTER = 0, - /* North American legal is 355.6mm long */ - T4_LENGTH_STANDARD_US_LEGAL = 1369, - T4_LENGTH_FINE_US_LEGAL = 2738, - T4_LENGTH_300_US_LEGAL = 0, - T4_LENGTH_SUPERFINE_US_LEGAL = 5476, - T4_LENGTH_600_US_LEGAL = 0, - T4_LENGTH_800_US_LEGAL = 0, - T4_LENGTH_1200_US_LEGAL = 0 -} t4_image_length_t; - -/*! - T.4 FAX compression/decompression descriptor. This defines the working state - for a single instance of a T.4 FAX compression or decompression channel. -*/ -typedef struct t4_state_s t4_state_t; - -/*! - T.4 FAX compression/decompression statistics. -*/ -typedef struct -{ - /*! \brief The number of pages transferred so far. */ - int pages_transferred; - /*! \brief The number of pages in the file (<0 if unknown). */ - int pages_in_file; - /*! \brief The number of horizontal pixels in the most recent page. */ - int width; - /*! \brief The number of vertical pixels in the most recent page. */ - int length; - /*! \brief The number of bad pixel rows in the most recent page. */ - int bad_rows; - /*! \brief The largest number of bad pixel rows in a block in the most recent page. */ - int longest_bad_row_run; - /*! \brief The horizontal resolution of the page in pixels per metre */ - int x_resolution; - /*! \brief The vertical resolution of the page in pixels per metre */ - int y_resolution; - /*! \brief The type of compression used between the FAX machines */ - int encoding; - /*! \brief The size of the image on the line, in bytes */ - int line_image_size; -} t4_stats_t; - -#if defined(__cplusplus) -extern "C" { -#endif - -/*! \brief Prepare for reception of a document. - \param s The T.4 context. - \param file The name of the file to be received. - \param output_encoding The output encoding. - \return A pointer to the context, or NULL if there was a problem. */ -SPAN_DECLARE(t4_state_t *) t4_rx_init(t4_state_t *s, const char *file, int output_encoding); - -/*! \brief Prepare to receive the next page of the current document. - \param s The T.4 context. - \return zero for success, -1 for failure. */ -SPAN_DECLARE(int) t4_rx_start_page(t4_state_t *s); - -/*! \brief Put a bit of the current document page. - \param s The T.4 context. - \param bit The data bit. - \return TRUE when the bit ends the document page, otherwise FALSE. */ -SPAN_DECLARE(int) t4_rx_put_bit(t4_state_t *s, int bit); - -/*! \brief Put a byte of the current document page. - \param s The T.4 context. - \param byte The data byte. - \return TRUE when the byte ends the document page, otherwise FALSE. */ -SPAN_DECLARE(int) t4_rx_put_byte(t4_state_t *s, uint8_t byte); - -/*! \brief Put a byte of the current document page. - \param s The T.4 context. - \param buf The buffer containing the chunk. - \param len The length of the chunk. - \return TRUE when the byte ends the document page, otherwise FALSE. */ -SPAN_DECLARE(int) t4_rx_put_chunk(t4_state_t *s, const uint8_t buf[], int len); - -/*! \brief Complete the reception of a page. - \param s The T.4 receive context. - \return 0 for success, otherwise -1. */ -SPAN_DECLARE(int) t4_rx_end_page(t4_state_t *s); - -/*! \brief End reception of a document. Tidy up and close the file. - This should be used to end T.4 reception started with - t4_rx_init. - \param s The T.4 receive context. - \return 0 for success, otherwise -1. */ -SPAN_DECLARE(int) t4_rx_release(t4_state_t *s); - -/*! \brief End reception of a document. Tidy up, close the file and - free the context. This should be used to end T.4 reception - started with t4_rx_init. - \param s The T.4 receive context. - \return 0 for success, otherwise -1. */ -SPAN_DECLARE(int) t4_rx_free(t4_state_t *s); - -/*! \brief Set the row write handler for a T.4 receive context. - \param s The T.4 receive context. - \param handler A pointer to the handler routine. - \param user_data An opaque pointer passed to the handler routine. - \return 0 for success, otherwise -1. */ -SPAN_DECLARE(int) t4_rx_set_row_write_handler(t4_state_t *s, t4_row_write_handler_t handler, void *user_data); - -/*! \brief Set the encoding for the received data. - \param s The T.4 context. - \param encoding The encoding. */ -SPAN_DECLARE(void) t4_rx_set_rx_encoding(t4_state_t *s, int encoding); - -/*! \brief Set the expected width of the received image, in pixel columns. - \param s The T.4 context. - \param width The number of pixels across the image. */ -SPAN_DECLARE(void) t4_rx_set_image_width(t4_state_t *s, int width); - -/*! \brief Set the row-to-row (y) resolution to expect for a received image. - \param s The T.4 context. - \param resolution The resolution, in pixels per metre. */ -SPAN_DECLARE(void) t4_rx_set_y_resolution(t4_state_t *s, int resolution); - -/*! \brief Set the column-to-column (x) resolution to expect for a received image. - \param s The T.4 context. - \param resolution The resolution, in pixels per metre. */ -SPAN_DECLARE(void) t4_rx_set_x_resolution(t4_state_t *s, int resolution); - -/*! \brief Set the DCS information of the fax, for inclusion in the file. - \param s The T.4 context. - \param dcs The DCS information, formatted as an ASCII string. */ -SPAN_DECLARE(void) t4_rx_set_dcs(t4_state_t *s, const char *dcs); - -/*! \brief Set the sub-address of the fax, for inclusion in the file. - \param s The T.4 context. - \param sub_address The sub-address string. */ -SPAN_DECLARE(void) t4_rx_set_sub_address(t4_state_t *s, const char *sub_address); - -/*! \brief Set the identity of the remote machine, for inclusion in the file. - \param s The T.4 context. - \param ident The identity string. */ -SPAN_DECLARE(void) t4_rx_set_far_ident(t4_state_t *s, const char *ident); - -/*! \brief Set the vendor of the remote machine, for inclusion in the file. - \param s The T.4 context. - \param vendor The vendor string, or NULL. */ -SPAN_DECLARE(void) t4_rx_set_vendor(t4_state_t *s, const char *vendor); - -/*! \brief Set the model of the remote machine, for inclusion in the file. - \param s The T.4 context. - \param model The model string, or NULL. */ -SPAN_DECLARE(void) t4_rx_set_model(t4_state_t *s, const char *model); - -/*! \brief Prepare for transmission of a document. - \param s The T.4 context. - \param file The name of the file to be sent. - \param start_page The first page to send. -1 for no restriction. - \param stop_page The last page to send. -1 for no restriction. - \return A pointer to the context, or NULL if there was a problem. */ -SPAN_DECLARE(t4_state_t *) t4_tx_init(t4_state_t *s, const char *file, int start_page, int stop_page); - -/*! \brief Prepare to send the next page of the current document. - \param s The T.4 context. - \return zero for success, -1 for failure. */ -SPAN_DECLARE(int) t4_tx_start_page(t4_state_t *s); - -/*! \brief Prepare the current page for a resend. - \param s The T.4 context. - \return zero for success, -1 for failure. */ -SPAN_DECLARE(int) t4_tx_restart_page(t4_state_t *s); - -/*! \brief Check for the existance of the next page, and whether its format is like the - current one. This information can be needed before it is determined that the current - page is finished with. - \param s The T.4 context. - \return 0 for next page found with the same format as the current page. - 1 for next page found with different format from the current page. - -1 for no page found, or file failure. */ -SPAN_DECLARE(int) t4_tx_next_page_has_different_format(t4_state_t *s); - -/*! \brief Complete the sending of a page. - \param s The T.4 context. - \return zero for success, -1 for failure. */ -SPAN_DECLARE(int) t4_tx_end_page(t4_state_t *s); - -/*! \brief Get the next bit of the current document page. The document will - be padded for the current minimum scan line time. If the - file does not contain an RTC (return to control) code at - the end of the page, one will be added where appropriate. - \param s The T.4 context. - \return The next bit (i.e. 0 or 1). For the last bit of data, bit 1 is - set (i.e. the returned value is 2 or 3). */ -SPAN_DECLARE(int) t4_tx_get_bit(t4_state_t *s); - -/*! \brief Get the next byte of the current document page. The document will - be padded for the current minimum scan line time. If the - file does not contain an RTC (return to control) code at - the end of the page, one will be added where appropriate. - \param s The T.4 context. - \return The next byte. For the last byte of data, bit 8 is - set. In this case, one or more bits of the byte may be padded with - zeros, to complete the byte. */ -SPAN_DECLARE(int) t4_tx_get_byte(t4_state_t *s); - -/*! \brief Get the next chunk of the current document page. The document will - be padded for the current minimum scan line time. If the - file does not contain an RTC (return to control) code at - the end of the page, one will be added where appropriate. - \param s The T.4 context. - \param buf The buffer into which the chunk is to written. - \param max_len The maximum length of the chunk. - \return The actual length of the chunk. If this is less than max_len it - indicates that the end of the document has been reached. */ -SPAN_DECLARE(int) t4_tx_get_chunk(t4_state_t *s, uint8_t buf[], int max_len); - -/*! \brief Return the next bit of the current document page, without actually - moving forward in the buffer. The document will be padded for the - current minimum scan line time. If the file does not contain an - RTC (return to control) code at the end of the page, one will be - added. - \param s The T.4 context. - \return The next bit (i.e. 0 or 1). For the last bit of data, bit 1 is - set (i.e. the returned value is 2 or 3). */ -SPAN_DECLARE(int) t4_tx_check_bit(t4_state_t *s); - -/*! \brief End the transmission of a document. Tidy up and close the file. - This should be used to end T.4 transmission started with t4_tx_init. - \param s The T.4 context. - \return 0 for success, otherwise -1. */ -SPAN_DECLARE(int) t4_tx_release(t4_state_t *s); - -/*! \brief End the transmission of a document. Tidy up, close the file and - free the context. This should be used to end T.4 transmission - started with t4_tx_init. - \param s The T.4 context. - \return 0 for success, otherwise -1. */ -SPAN_DECLARE(int) t4_tx_free(t4_state_t *s); - -/*! \brief Set the encoding for the encoded data. - \param s The T.4 context. - \param encoding The encoding. */ -SPAN_DECLARE(void) t4_tx_set_tx_encoding(t4_state_t *s, int encoding); - -/*! \brief Set the minimum number of encoded bits per row. This allows the - makes the encoding process to be set to comply with the minimum row - time specified by a remote receiving machine. - \param s The T.4 context. - \param bits The minimum number of bits per row. */ -SPAN_DECLARE(void) t4_tx_set_min_row_bits(t4_state_t *s, int bits); - -/*! \brief Set the identity of the local machine, for inclusion in page headers. - \param s The T.4 context. - \param ident The identity string. */ -SPAN_DECLARE(void) t4_tx_set_local_ident(t4_state_t *s, const char *ident); - -/*! Set the info field, included in the header line included in each page of an encoded - FAX. This is a string of up to 50 characters. Other information (date, local ident, etc.) - are automatically included in the header. If the header info is set to NULL or a zero - length string, no header lines will be added to the encoded FAX. - \brief Set the header info. - \param s The T.4 context. - \param info A string, of up to 50 bytes, which will form the info field. */ -SPAN_DECLARE(void) t4_tx_set_header_info(t4_state_t *s, const char *info); - -/*! \brief Set the row read handler for a T.4 transmit context. - \param s The T.4 transmit context. - \param handler A pointer to the handler routine. - \param user_data An opaque pointer passed to the handler routine. - \return 0 for success, otherwise -1. */ -SPAN_DECLARE(int) t4_tx_set_row_read_handler(t4_state_t *s, t4_row_read_handler_t handler, void *user_data); - -/*! \brief Get the row-to-row (y) resolution of the current page. - \param s The T.4 context. - \return The resolution, in pixels per metre. */ -SPAN_DECLARE(int) t4_tx_get_y_resolution(t4_state_t *s); - -/*! \brief Get the column-to-column (x) resolution of the current page. - \param s The T.4 context. - \return The resolution, in pixels per metre. */ -SPAN_DECLARE(int) t4_tx_get_x_resolution(t4_state_t *s); - -/*! \brief Get the width of the current page, in pixel columns. - \param s The T.4 context. - \return The number of columns. */ -SPAN_DECLARE(int) t4_tx_get_image_width(t4_state_t *s); - -/*! \brief Get the number of pages in the file. - \param s The T.4 context. - \return The number of pages, or -1 if there is an error. */ -SPAN_DECLARE(int) t4_tx_get_pages_in_file(t4_state_t *s); - -/*! \brief Get the currnet page number in the file. - \param s The T.4 context. - \return The page number, or -1 if there is an error. */ -SPAN_DECLARE(int) t4_tx_get_current_page_in_file(t4_state_t *s); - -/*! Get the current image transfer statistics. - \brief Get the current transfer statistics. - \param s The T.4 context. - \param t A pointer to a statistics structure. */ -SPAN_DECLARE(void) t4_get_transfer_statistics(t4_state_t *s, t4_stats_t *t); - -/*! Get the short text name of an encoding format. - \brief Get the short text name of an encoding format. - \param encoding The encoding type. - \return A pointer to the string. */ -SPAN_DECLARE(const char *) t4_encoding_to_str(int encoding); - -#if defined(__cplusplus) -} -#endif - -#endif -/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/t4.c b/libs/spandsp/src/t4.c deleted file mode 100644 index d947edeb64..0000000000 --- a/libs/spandsp/src/t4.c +++ /dev/null @@ -1,2400 +0,0 @@ -//#define T4_STATE_DEBUGGING -/* - * SpanDSP - a series of DSP components for telephony - * - * t4.c - ITU T.4 FAX image processing - * This depends on libtiff (see ) - * - * Written by Steve Underwood - * - * Copyright (C) 2003, 2007 Steve Underwood - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t4.c,v 1.131 2009/05/16 03:34:45 steveu Exp $ - */ - -/* - * Much of this file is based on the T.4 and T.6 support in libtiff, which requires - * the following notice in any derived source code: - * - * Copyright (c) 1990-1997 Sam Leffler - * Copyright (c) 1991-1997 Silicon Graphics, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation for any purpose is hereby granted without fee, provided - * that (i) the above copyright notices and this permission notice appear in - * all copies of the software and related documentation, and (ii) the names of - * Sam Leffler and Silicon Graphics may not be used in any advertising or - * publicity relating to the software without the specific, prior written - * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR - * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, - * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - * - * Decoder support is derived from code in Frank Cringle's viewfax program; - * Copyright (C) 1990, 1995 Frank D. Cringle. - */ - -/*! \file */ - -#if defined(HAVE_CONFIG_H) -#include "config.h" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if defined(HAVE_TGMATH_H) -#include -#endif -#if defined(HAVE_MATH_H) -#include -#endif -#include "floating_fudge.h" -#include - -#include "spandsp/telephony.h" -#include "spandsp/logging.h" -#include "spandsp/bit_operations.h" -#include "spandsp/async.h" -#include "spandsp/t4.h" -#include "spandsp/version.h" - -#include "spandsp/private/logging.h" -#include "spandsp/private/t4.h" - -/*! The number of centimetres in one inch */ -#define CM_PER_INCH 2.54f - -/*! The number of EOLs to be sent at the end of a T.4 page */ -#define EOLS_TO_END_T4_TX_PAGE 6 -/*! The number of EOLs to be sent at the end of a T.6 page */ -#define EOLS_TO_END_T6_TX_PAGE 2 - -/*! The number of EOLs to expect at the end of a T.4 page */ -#define EOLS_TO_END_ANY_RX_PAGE 6 -/*! The number of EOLs to check at the end of a T.4 page */ -#define EOLS_TO_END_T4_RX_PAGE 5 -/*! The number of EOLs to check at the end of a T.6 page */ -#define EOLS_TO_END_T6_RX_PAGE 2 - -/* Finite state machine state codes */ -enum -{ - S_Null = 0, - S_Pass = 1, - S_Horiz = 2, - S_Vert = 3, - S_Ext = 4, - S_TermW = 5, - S_TermB = 6, - S_MakeUpW = 7, - S_MakeUpB = 8, - S_MakeUp = 9, - S_EOL = 10 -}; - -#include "faxfont.h" - -static int encode_row(t4_state_t *s); - -#if defined(T4_STATE_DEBUGGING) -static void STATE_TRACE(const char *format, ...) -{ - va_list arg_ptr; - - va_start(arg_ptr, format); - vprintf(format, arg_ptr); - va_end(arg_ptr); -} -/*- End of function --------------------------------------------------------*/ -#else -#define STATE_TRACE(...) /**/ -#endif - -/*! T.4 finite state machine state table entry */ -typedef struct -{ - /*! State */ - uint8_t state; - /*! Width of code in bits */ - uint8_t width; - /*! Run length in bits */ - int16_t param; -} t4_table_entry_t; - -/*! T.4 run length table entry */ -typedef struct -{ - /*! Length of T.4 code, in bits */ - uint16_t length; - /*! T.4 code */ - uint16_t code; - /*! Run length, in bits */ - int16_t run_length; -} t4_run_table_entry_t; - -#include "t4_states.h" - -#if defined(HAVE_LIBTIFF) -static int set_tiff_directory_info(t4_state_t *s) -{ - time_t now; - struct tm *tm; - char buf[256 + 1]; - uint16_t resunit; - float x_resolution; - float y_resolution; - t4_tiff_state_t *t; - - t = &s->tiff; - /* Prepare the directory entry fully before writing the image, or libtiff complains */ - TIFFSetField(t->tiff_file, TIFFTAG_COMPRESSION, t->output_compression); - if (t->output_compression == COMPRESSION_CCITT_T4) - { - TIFFSetField(t->tiff_file, TIFFTAG_T4OPTIONS, t->output_t4_options); - TIFFSetField(t->tiff_file, TIFFTAG_FAXMODE, FAXMODE_CLASSF); - } - TIFFSetField(t->tiff_file, TIFFTAG_IMAGEWIDTH, s->image_width); - TIFFSetField(t->tiff_file, TIFFTAG_BITSPERSAMPLE, 1); - TIFFSetField(t->tiff_file, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); - TIFFSetField(t->tiff_file, TIFFTAG_SAMPLESPERPIXEL, 1); - if (t->output_compression == COMPRESSION_CCITT_T4 - || - t->output_compression == COMPRESSION_CCITT_T6) - { - TIFFSetField(t->tiff_file, TIFFTAG_ROWSPERSTRIP, -1L); - } - else - { - TIFFSetField(t->tiff_file, - TIFFTAG_ROWSPERSTRIP, - TIFFDefaultStripSize(t->tiff_file, 0)); - } - TIFFSetField(t->tiff_file, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); - TIFFSetField(t->tiff_file, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE); - TIFFSetField(t->tiff_file, TIFFTAG_FILLORDER, FILLORDER_LSB2MSB); - - x_resolution = s->x_resolution/100.0f; - y_resolution = s->y_resolution/100.0f; - /* Metric seems the sane thing to use in the 21st century, but a lot of lousy software - gets FAX resolutions wrong, and more get it wrong using metric than using inches. */ -#if 0 - TIFFSetField(t->tiff_file, TIFFTAG_XRESOLUTION, x_resolution); - TIFFSetField(t->tiff_file, TIFFTAG_YRESOLUTION, y_resolution); - resunit = RESUNIT_CENTIMETER; - TIFFSetField(t->tiff_file, TIFFTAG_RESOLUTIONUNIT, resunit); -#else - TIFFSetField(t->tiff_file, TIFFTAG_XRESOLUTION, floorf(x_resolution*CM_PER_INCH + 0.5f)); - TIFFSetField(t->tiff_file, TIFFTAG_YRESOLUTION, floorf(y_resolution*CM_PER_INCH + 0.5f)); - resunit = RESUNIT_INCH; - TIFFSetField(t->tiff_file, TIFFTAG_RESOLUTIONUNIT, resunit); -#endif - /* TODO: add the version of spandsp */ - TIFFSetField(t->tiff_file, TIFFTAG_SOFTWARE, "Spandsp " SPANDSP_RELEASE_DATETIME_STRING); - if (gethostname(buf, sizeof(buf)) == 0) - TIFFSetField(t->tiff_file, TIFFTAG_HOSTCOMPUTER, buf); - -#if defined(TIFFTAG_FAXDCS) - if (t->dcs) - TIFFSetField(t->tiff_file, TIFFTAG_FAXDCS, t->dcs); -#endif - if (t->sub_address) - TIFFSetField(t->tiff_file, TIFFTAG_FAXSUBADDRESS, t->sub_address); - if (t->far_ident) - TIFFSetField(t->tiff_file, TIFFTAG_IMAGEDESCRIPTION, t->far_ident); - if (t->vendor) - TIFFSetField(t->tiff_file, TIFFTAG_MAKE, t->vendor); - if (t->model) - TIFFSetField(t->tiff_file, TIFFTAG_MODEL, t->model); - - time(&now); - tm = localtime(&now); - sprintf(buf, - "%4d/%02d/%02d %02d:%02d:%02d", - tm->tm_year + 1900, - tm->tm_mon + 1, - tm->tm_mday, - tm->tm_hour, - tm->tm_min, - tm->tm_sec); - TIFFSetField(t->tiff_file, TIFFTAG_DATETIME, buf); - TIFFSetField(t->tiff_file, TIFFTAG_FAXRECVTIME, now - s->page_start_time); - - TIFFSetField(t->tiff_file, TIFFTAG_IMAGELENGTH, s->image_length); - /* Set the total pages to 1. For any one page document we will get this - right. For multi-page documents we will need to come back and fill in - the right answer when we know it. */ - TIFFSetField(t->tiff_file, TIFFTAG_PAGENUMBER, s->current_page++, 1); - s->pages_in_file = s->current_page; - if (t->output_compression == COMPRESSION_CCITT_T4) - { - if (s->bad_rows) - { - TIFFSetField(t->tiff_file, TIFFTAG_BADFAXLINES, s->bad_rows); - TIFFSetField(t->tiff_file, TIFFTAG_CLEANFAXDATA, CLEANFAXDATA_REGENERATED); - TIFFSetField(t->tiff_file, TIFFTAG_CONSECUTIVEBADFAXLINES, s->longest_bad_row_run); - } - else - { - TIFFSetField(t->tiff_file, TIFFTAG_CLEANFAXDATA, CLEANFAXDATA_CLEAN); - } - } - TIFFSetField(t->tiff_file, TIFFTAG_IMAGEWIDTH, s->image_width); - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static int test_resolution(int res_unit, float actual, float expected) -{ - if (res_unit == RESUNIT_INCH) - actual *= 1.0f/CM_PER_INCH; - return (expected*0.95f <= actual && actual <= expected*1.05f); -} -/*- End of function --------------------------------------------------------*/ - -static int get_tiff_directory_info(t4_state_t *s) -{ - static const struct - { - float resolution; - int code; - } x_res_table[] = - { - { 102.0f/CM_PER_INCH, T4_X_RESOLUTION_R4}, - { 204.0f/CM_PER_INCH, T4_X_RESOLUTION_R8}, - { 300.0f/CM_PER_INCH, T4_X_RESOLUTION_300}, - { 408.0f/CM_PER_INCH, T4_X_RESOLUTION_R16}, - { 600.0f/CM_PER_INCH, T4_X_RESOLUTION_600}, - { 800.0f/CM_PER_INCH, T4_X_RESOLUTION_800}, - {1200.0f/CM_PER_INCH, T4_X_RESOLUTION_1200}, - { -1.00f, -1} - }; - static const struct - { - float resolution; - int code; - int max_rows_to_next_1d_row; - } y_res_table[] = - { - { 38.50f, T4_Y_RESOLUTION_STANDARD, 2}, - { 77.00f, T4_Y_RESOLUTION_FINE, 4}, - { 300.0f/CM_PER_INCH, T4_Y_RESOLUTION_300, 6}, - { 154.00f, T4_Y_RESOLUTION_SUPERFINE, 8}, - { 600.0f/CM_PER_INCH, T4_Y_RESOLUTION_600, 12}, - { 800.0f/CM_PER_INCH, T4_Y_RESOLUTION_800, 16}, - {1200.0f/CM_PER_INCH, T4_Y_RESOLUTION_1200, 24}, - { -1.00f, -1, -1} - }; - uint16_t res_unit; - uint16_t parm16; - uint32_t parm32; - float x_resolution; - float y_resolution; - int i; - t4_tiff_state_t *t; - - t = &s->tiff; - parm16 = 0; - TIFFGetField(t->tiff_file, TIFFTAG_BITSPERSAMPLE, &parm16); - if (parm16 != 1) - return -1; - parm32 = 0; - TIFFGetField(t->tiff_file, TIFFTAG_IMAGEWIDTH, &parm32); - s->image_width = parm32; - s->bytes_per_row = (s->image_width + 7)/8; - parm32 = 0; - TIFFGetField(t->tiff_file, TIFFTAG_IMAGELENGTH, &parm32); - s->image_length = parm32; - x_resolution = 0.0f; - TIFFGetField(t->tiff_file, TIFFTAG_XRESOLUTION, &x_resolution); - y_resolution = 0.0f; - TIFFGetField(t->tiff_file, TIFFTAG_YRESOLUTION, &y_resolution); - res_unit = RESUNIT_INCH; - TIFFGetField(t->tiff_file, TIFFTAG_RESOLUTIONUNIT, &res_unit); - t->photo_metric = PHOTOMETRIC_MINISWHITE; - TIFFGetField(t->tiff_file, TIFFTAG_PHOTOMETRIC, &t->photo_metric); - if (t->photo_metric != PHOTOMETRIC_MINISWHITE) - span_log(&s->logging, SPAN_LOG_FLOW, "%s: Photometric needs swapping.\n", s->file); - t->fill_order = FILLORDER_LSB2MSB; -#if 0 - TIFFGetField(t->tiff_file, TIFFTAG_FILLORDER, &t->fill_order); - if (t->fill_order != FILLORDER_LSB2MSB) - span_log(&s->logging, SPAN_LOG_FLOW, "%s: Fill order needs swapping.\n", s->file); -#endif - - /* Allow a little range for the X resolution in centimeters. The spec doesn't pin down the - precise value. The other value should be exact. */ - /* Treat everything we can't match as R8. Most FAXes are this resolution anyway. */ - s->x_resolution = T4_X_RESOLUTION_R8; - for (i = 0; x_res_table[i].code > 0; i++) - { - if (test_resolution(res_unit, x_resolution, x_res_table[i].resolution)) - { - s->x_resolution = x_res_table[i].code; - break; - } - } - - s->y_resolution = T4_Y_RESOLUTION_STANDARD; - s->max_rows_to_next_1d_row = 2; - for (i = 0; y_res_table[i].code > 0; i++) - { - if (test_resolution(res_unit, y_resolution, y_res_table[i].resolution)) - { - s->y_resolution = y_res_table[i].code; - s->max_rows_to_next_1d_row = y_res_table[i].max_rows_to_next_1d_row; - break; - } - } - - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static int test_tiff_directory_info(t4_state_t *s) -{ - static const struct - { - float resolution; - int code; - } x_res_table[] = - { - { 102.0f/CM_PER_INCH, T4_X_RESOLUTION_R4}, - { 204.0f/CM_PER_INCH, T4_X_RESOLUTION_R8}, - { 300.0f/CM_PER_INCH, T4_X_RESOLUTION_300}, - { 408.0f/CM_PER_INCH, T4_X_RESOLUTION_R16}, - { 600.0f/CM_PER_INCH, T4_X_RESOLUTION_600}, - { 800.0f/CM_PER_INCH, T4_X_RESOLUTION_800}, - {1200.0f/CM_PER_INCH, T4_X_RESOLUTION_1200}, - { -1.00f, -1} - }; - static const struct - { - float resolution; - int code; - int max_rows_to_next_1d_row; - } y_res_table[] = - { - { 38.50f, T4_Y_RESOLUTION_STANDARD, 2}, - { 77.00f, T4_Y_RESOLUTION_FINE, 4}, - { 300.0f/CM_PER_INCH, T4_Y_RESOLUTION_300, 6}, - { 154.00f, T4_Y_RESOLUTION_SUPERFINE, 8}, - { 600.0f/CM_PER_INCH, T4_Y_RESOLUTION_600, 12}, - { 800.0f/CM_PER_INCH, T4_Y_RESOLUTION_800, 16}, - {1200.0f/CM_PER_INCH, T4_Y_RESOLUTION_1200, 24}, - { -1.00f, -1, -1} - }; - uint16_t res_unit; - uint16_t parm16; - uint32_t parm32; - float x_resolution; - float y_resolution; - int i; - t4_tiff_state_t *t; - - t = &s->tiff; - parm16 = 0; - TIFFGetField(t->tiff_file, TIFFTAG_BITSPERSAMPLE, &parm16); - if (parm16 != 1) - return -1; - parm32 = 0; - TIFFGetField(t->tiff_file, TIFFTAG_IMAGEWIDTH, &parm32); - if (s->image_width != (int) parm32) - return 1; - x_resolution = 0.0f; - TIFFGetField(t->tiff_file, TIFFTAG_XRESOLUTION, &x_resolution); - y_resolution = 0.0f; - TIFFGetField(t->tiff_file, TIFFTAG_YRESOLUTION, &y_resolution); - res_unit = RESUNIT_INCH; - TIFFGetField(t->tiff_file, TIFFTAG_RESOLUTIONUNIT, &res_unit); - - /* Allow a little range for the X resolution in centimeters. The spec doesn't pin down the - precise value. The other value should be exact. */ - /* Treat everything we can't match as R8. Most FAXes are this resolution anyway. */ - for (i = 0; x_res_table[i].code > 0; i++) - { - if (test_resolution(res_unit, x_resolution, x_res_table[i].resolution)) - break; - } - if (s->x_resolution != x_res_table[i].code) - return 1; - for (i = 0; y_res_table[i].code > 0; i++) - { - if (test_resolution(res_unit, y_resolution, y_res_table[i].resolution)) - break; - } - if (s->y_resolution != y_res_table[i].code) - return 1; - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static int get_tiff_total_pages(t4_state_t *s) -{ - int max; - - /* Each page *should* contain the total number of pages, but can this be - trusted? Some files say 0. Actually searching for the last page is - more reliable. */ - max = 0; - while (TIFFSetDirectory(s->tiff.tiff_file, (tdir_t) max)) - max++; - /* Back to the previous page */ - if (!TIFFSetDirectory(s->tiff.tiff_file, (tdir_t) s->current_page)) - return -1; - return max; -} -/*- End of function --------------------------------------------------------*/ - -static int open_tiff_input_file(t4_state_t *s, const char *file) -{ - if ((s->tiff.tiff_file = TIFFOpen(file, "r")) == NULL) - return -1; - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static int read_tiff_image(t4_state_t *s) -{ - int row; - int image_length; - int i; - - image_length = 0; - TIFFGetField(s->tiff.tiff_file, TIFFTAG_IMAGELENGTH, &image_length); - for (row = 0; row < image_length; row++) - { - if (TIFFReadScanline(s->tiff.tiff_file, s->row_buf, row, 0) <= 0) - { - span_log(&s->logging, SPAN_LOG_WARNING, "%s: Read error at row %d.\n", s->file, row); - break; - } - if (s->tiff.photo_metric != PHOTOMETRIC_MINISWHITE) - { - for (i = 0; i < s->bytes_per_row; i++) - s->row_buf[i] = ~s->row_buf[i]; - } - if (s->tiff.fill_order != FILLORDER_LSB2MSB) - bit_reverse(s->row_buf, s->row_buf, s->bytes_per_row); - if (encode_row(s)) - return -1; - } - return image_length; -} -/*- End of function --------------------------------------------------------*/ - -static int close_tiff_input_file(t4_state_t *s) -{ - TIFFClose(s->tiff.tiff_file); - s->tiff.tiff_file = NULL; - if (s->file) - free((char *) s->file); - s->file = NULL; - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static int open_tiff_output_file(t4_state_t *s, const char *file) -{ - if ((s->tiff.tiff_file = TIFFOpen(file, "w")) == NULL) - return -1; - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static void write_tiff_image(t4_state_t *s) -{ - /* Set up the TIFF directory info... */ - set_tiff_directory_info(s); - /* ..and then write the image... */ - if (TIFFWriteEncodedStrip(s->tiff.tiff_file, 0, s->image_buffer, s->image_length*s->bytes_per_row) < 0) - span_log(&s->logging, SPAN_LOG_WARNING, "%s: Error writing TIFF strip.\n", s->file); - /* ...then the directory entry, and libtiff is happy. */ - TIFFWriteDirectory(s->tiff.tiff_file); -} -/*- End of function --------------------------------------------------------*/ - -static int close_tiff_output_file(t4_state_t *s) -{ - int i; - t4_tiff_state_t *t; - - t = &s->tiff; - /* Perform any operations needed to tidy up a written TIFF file before - closure. */ - if (s->current_page > 1) - { - /* We need to edit the TIFF directories. Until now we did not know - the total page count, so the TIFF file currently says one. Now we - need to set the correct total page count associated with each page. */ - for (i = 0; i < s->current_page; i++) - { - TIFFSetDirectory(t->tiff_file, (tdir_t) i); - TIFFSetField(t->tiff_file, TIFFTAG_PAGENUMBER, i, s->current_page); - TIFFWriteDirectory(t->tiff_file); - } - } - TIFFClose(t->tiff_file); - t->tiff_file = NULL; - if (s->file) - { - /* Try not to leave a file behind, if we didn't receive any pages to - put in it. */ - if (s->current_page == 0) - remove(s->file); - free((char *) s->file); - } - s->file = NULL; - return 0; -} -/*- End of function --------------------------------------------------------*/ - -#else - -static int set_tiff_directory_info(t4_state_t *s) -{ - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static int get_tiff_directory_info(t4_state_t *s) -{ - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static int test_tiff_directory_info(t4_state_t *s) -{ - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static int open_tiff_input_file(t4_state_t *s, const char *file) -{ - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static int read_tiff_image(t4_state_t *s) -{ - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static int close_tiff_input_file(t4_state_t *s) -{ - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static int open_tiff_output_file(t4_state_t *s, const char *file) -{ - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static void write_tiff_image(t4_state_t *s) -{ - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static int close_tiff_output_file(t4_state_t *s) -{ - return 0; -} -/*- End of function --------------------------------------------------------*/ -#endif - -static void update_row_bit_info(t4_state_t *s) -{ - if (s->row_bits > s->max_row_bits) - s->max_row_bits = s->row_bits; - if (s->row_bits < s->min_row_bits) - s->min_row_bits = s->row_bits; - s->row_bits = 0; -} -/*- End of function --------------------------------------------------------*/ - -#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__powerpc__) -static __inline__ int run_length(unsigned int bits) -{ - return 7 - top_bit(bits); -} -/*- End of function --------------------------------------------------------*/ -#else -static __inline__ int run_length(unsigned int bits) -{ - static const uint8_t run_len[256] = - { - 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, /* 0x00 - 0x0F */ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0x10 - 0x1F */ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0x20 - 0x2F */ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0x30 - 0x3F */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x40 - 0x4F */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x50 - 0x5F */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x60 - 0x6F */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x70 - 0x7F */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 - 0x8F */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 - 0x9F */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 - 0xAF */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 - 0xBF */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 - 0xCF */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 - 0xDF */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 - 0xEF */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 - 0xFF */ - }; - - return run_len[bits]; -} -/*- End of function --------------------------------------------------------*/ -#endif - -static int row_to_run_lengths(uint32_t list[], const uint8_t row[], int width) -{ - uint32_t flip; - uint32_t x; - int span; - int entry; - int frag; - int rem; - int limit; - int i; - int pos; - - /* Deal with whole words first. We know we are starting on a word boundary. */ - entry = 0; - flip = 0; - limit = (width >> 3) & ~3; - span = 0; - pos = 0; - for (i = 0; i < limit; i += sizeof(uint32_t)) - { - x = *((uint32_t *) &row[i]); - if (x != flip) - { - x = ((uint32_t) row[i] << 24) | ((uint32_t) row[i + 1] << 16) | ((uint32_t) row[i + 2] << 8) | ((uint32_t) row[i + 3]); - /* We know we are going to find at least one transition. */ - frag = 31 - top_bit(x ^ flip); - pos += ((i << 3) - span + frag); - list[entry++] = pos; - x <<= frag; - flip ^= 0xFFFFFFFF; - rem = 32 - frag; - /* Now see if there are any more */ - while ((frag = 31 - top_bit(x ^ flip)) < rem) - { - pos += frag; - list[entry++] = pos; - x <<= frag; - flip ^= 0xFFFFFFFF; - rem -= frag; - } - /* Save the remainder of the word */ - span = (i << 3) + 32 - rem; - } - } - /* Now deal with some whole bytes, if there are any left. */ - limit = width >> 3; - flip &= 0xFF000000; - if (i < limit) - { - for ( ; i < limit; i++) - { - x = (uint32_t) row[i] << 24; - if (x != flip) - { - /* We know we are going to find at least one transition. */ - frag = 31 - top_bit(x ^ flip); - pos += ((i << 3) - span + frag); - list[entry++] = pos; - x <<= frag; - flip ^= 0xFF000000; - rem = 8 - frag; - /* Now see if there are any more */ - while ((frag = 31 - top_bit(x ^ flip)) < rem) - { - pos += frag; - list[entry++] = pos; - x <<= frag; - flip ^= 0xFF000000; - rem -= frag; - } - /* Save the remainder of the word */ - span = (i << 3) + 8 - rem; - } - } - } - /* Deal with any left over fractional byte. */ - span = (i << 3) - span; - if ((rem = width & 7)) - { - x = row[i]; - x <<= 24; - do - { - frag = 31 - top_bit(x ^ flip); - if (frag > rem) - frag = rem; - pos += (span + frag); - list[entry++] = pos; - x <<= frag; - span = 0; - flip ^= 0xFF000000; - rem -= frag; - } - while (rem > 0); - } - else - { - if (span) - { - pos += span; - list[entry++] = pos; - } - } - return entry; -} -/*- End of function --------------------------------------------------------*/ - -static int free_buffers(t4_state_t *s) -{ - if (s->image_buffer) - { - free(s->image_buffer); - s->image_buffer = NULL; - s->image_buffer_size = 0; - } - if (s->cur_runs) - { - free(s->cur_runs); - s->cur_runs = NULL; - } - if (s->ref_runs) - { - free(s->ref_runs); - s->ref_runs = NULL; - } - if (s->row_buf) - { - free(s->row_buf); - s->row_buf = NULL; - } - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static __inline__ void add_run_to_row(t4_state_t *s) -{ - if (s->run_length >= 0) - { - s->row_len += s->run_length; - /* Don't allow rows to grow too long, and overflow the buffers */ - if (s->row_len <= s->image_width) - s->cur_runs[s->a_cursor++] = s->run_length; - } - s->run_length = 0; -} -/*- End of function --------------------------------------------------------*/ - -static int put_decoded_row(t4_state_t *s) -{ - static const int msbmask[9] = - { - 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff - }; - uint8_t *t; - uint32_t i; - uint32_t *p; - int fudge; - int row_starts_at; - int x; - int j; - - if (s->run_length) - add_run_to_row(s); -#if defined(T4_STATE_DEBUGGING) - /* Dump the runs of black and white for analysis */ - { - int total; - - total = 0; - for (x = 0; x < s->b_cursor; x++) - total += s->ref_runs[x]; - printf("Ref (%d)", total); - for (x = 0; x < s->b_cursor; x++) - printf(" %" PRIu32, s->ref_runs[x]); - printf("\n"); - total = 0; - for (x = 0; x < s->a_cursor; x++) - total += s->cur_runs[x]; - printf("Cur (%d)", total); - for (x = 0; x < s->a_cursor; x++) - printf(" %" PRIu32, s->cur_runs[x]); - printf("\n"); - } -#endif - row_starts_at = s->image_size; - /* Make sure there is enough room for another row */ - if (s->image_size + s->bytes_per_row >= s->image_buffer_size) - { - if ((t = realloc(s->image_buffer, s->image_buffer_size + 100*s->bytes_per_row)) == NULL) - return -1; - s->image_buffer_size += 100*s->bytes_per_row; - s->image_buffer = t; - } - if (s->row_len == s->image_width) - { - STATE_TRACE("%d Good row - %d %s\n", s->image_length, s->row_len, (s->row_is_2d) ? "2D" : "1D"); - if (s->curr_bad_row_run) - { - if (s->curr_bad_row_run > s->longest_bad_row_run) - s->longest_bad_row_run = s->curr_bad_row_run; - s->curr_bad_row_run = 0; - } - /* Convert the runs to a bit image of the row */ - /* White/black/white... runs, always starting with white. That means the first run could be - zero length. */ - for (x = 0, fudge = 0; x < s->a_cursor; x++, fudge ^= 0xFF) - { - i = s->cur_runs[x]; - if ((int) i >= s->tx_bits) - { - s->tx_bitstream = (s->tx_bitstream << s->tx_bits) | (msbmask[s->tx_bits] & fudge); - for (i += (8 - s->tx_bits); i >= 8; i -= 8) - { - s->tx_bits = 8; - s->image_buffer[s->image_size++] = (uint8_t) s->tx_bitstream; - s->tx_bitstream = fudge; - } - } - s->tx_bitstream = (s->tx_bitstream << i) | (msbmask[i] & fudge); - s->tx_bits -= i; - } - s->image_length++; - } - else - { - STATE_TRACE("%d Bad row - %d %s\n", s->image_length, s->row_len, (s->row_is_2d) ? "2D" : "1D"); - /* Try to clean up the bad runs, and produce something reasonable as the reference - row for the next row. Use a copy of the previous good row as the actual current - row. If the row only fell apart near the end, reusing it might be the best - solution. */ - for (j = 0, fudge = 0; j < s->a_cursor && fudge < s->image_width; j++) - fudge += s->cur_runs[j]; - if (fudge < s->image_width) - { - /* Try to pad with white, and avoid black, to minimise mess on the image. */ - if ((s->a_cursor & 1)) - { - /* We currently finish in white. We could extend that, but it is probably of - the right length. Changing it would only further mess up what happens in the - next row. It seems better to add a black spot, and an extra white run. */ - s->cur_runs[s->a_cursor++] = 1; - fudge++; - if (fudge < s->image_width) - s->cur_runs[s->a_cursor++] = s->image_width - fudge; - } - else - { - /* We currently finish on black, so we add an extra white run to fill out the line. */ - s->cur_runs[s->a_cursor++] = s->image_width - fudge; - } - } - else - { - /* Trim the last element to align with the proper image width */ - s->cur_runs[s->a_cursor] += (s->image_width - fudge); - } - /* Ensure there is a previous line to copy from. */ - if (s->image_size != s->last_row_starts_at) - { - /* Copy the previous row over this one */ - memcpy(s->image_buffer + s->image_size, s->image_buffer + s->last_row_starts_at, s->bytes_per_row); - s->image_size += s->bytes_per_row; - s->image_length++; - } - s->bad_rows++; - s->curr_bad_row_run++; - } - - /* Pad the row as it becomes the reference row, so there are no odd runs to pick up if we - step off the end of the list. */ - s->cur_runs[s->a_cursor] = 0; - s->cur_runs[s->a_cursor + 1] = 0; - - /* Prepare the buffers for the next row. */ - s->last_row_starts_at = row_starts_at; - /* Swap the buffers */ - p = s->cur_runs; - s->cur_runs = s->ref_runs; - s->ref_runs = p; - - s->b_cursor = 1; - s->a_cursor = 0; - s->b1 = s->ref_runs[0]; - s->a0 = 0; - - s->run_length = 0; - - return 0; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_rx_end_page(t4_state_t *s) -{ - int row; - int i; - - if (s->line_encoding == T4_COMPRESSION_ITU_T6) - { - /* Push enough zeros through the decoder to flush out any remaining codes */ - for (i = 0; i < 13; i++) - t4_rx_put_bit(s, 0); - } - if (s->curr_bad_row_run) - { - if (s->curr_bad_row_run > s->longest_bad_row_run) - s->longest_bad_row_run = s->curr_bad_row_run; - s->curr_bad_row_run = 0; - } - - if (s->image_size == 0) - return -1; - - if (s->row_write_handler) - { - for (row = 0; row < s->image_length; row++) - { - if (s->row_write_handler(s->row_write_user_data, s->image_buffer + row*s->bytes_per_row, s->bytes_per_row) < 0) - { - span_log(&s->logging, SPAN_LOG_WARNING, "Write error at row %d.\n", row); - break; - } - } - /* Write a blank row to indicate the end of the image. */ - if (s->row_write_handler(s->row_write_user_data, NULL, 0) < 0) - span_log(&s->logging, SPAN_LOG_WARNING, "Write error at row %d.\n", row); - } - else - { - write_tiff_image(s); - } - s->rx_bits = 0; - s->rx_skip_bits = 0; - s->rx_bitstream = 0; - s->consecutive_eols = EOLS_TO_END_ANY_RX_PAGE; - - s->image_size = 0; - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static __inline__ void drop_rx_bits(t4_state_t *s, int bits) -{ - /* Only remove one bit right now. The rest need to be removed step by step, - checking for a misaligned EOL along the way. This is time consuming, but - if we don't do it a single bit error can severely damage an image. */ - s->row_bits += bits; - s->rx_skip_bits += (bits - 1); - s->rx_bits--; - s->rx_bitstream >>= 1; -} -/*- End of function --------------------------------------------------------*/ - -static __inline__ void force_drop_rx_bits(t4_state_t *s, int bits) -{ - /* This should only be called to drop the bits of an EOL, as that is the - only place where it is safe to drop them all at once. */ - s->row_bits += bits; - s->rx_skip_bits = 0; - s->rx_bits -= bits; - s->rx_bitstream >>= bits; -} -/*- End of function --------------------------------------------------------*/ - -static int rx_put_bits(t4_state_t *s, uint32_t bit_string, int quantity) -{ - int bits; - - /* We decompress bit by bit, as the data stream is received. We need to - scan continuously for EOLs, so we might as well work this way. */ - s->line_image_size += quantity; - s->rx_bitstream |= (bit_string << s->rx_bits); - /* The longest item we need to scan for is 13 bits long (a 2D EOL), so we - need a minimum of 13 bits in the buffer to proceed with any bit stream - analysis. */ - if ((s->rx_bits += quantity) < 13) - return FALSE; - if (s->consecutive_eols) - { - /* Check if the image has already terminated. */ - if (s->consecutive_eols >= EOLS_TO_END_ANY_RX_PAGE) - return TRUE; - /* Check if the image hasn't even started. */ - if (s->consecutive_eols < 0) - { - /* We are waiting for the very first EOL (1D or 2D only). */ - /* We need to take this bit by bit, as the EOL could be anywhere, - and any junk could preceed it. */ - while ((s->rx_bitstream & 0xFFF) != 0x800) - { - s->rx_bitstream >>= 1; - if (--s->rx_bits < 13) - return FALSE; - } - /* We have an EOL, so now the page begins and we can proceed to - process the bit stream as image data. */ - s->consecutive_eols = 0; - if (s->line_encoding == T4_COMPRESSION_ITU_T4_1D) - { - s->row_is_2d = FALSE; - force_drop_rx_bits(s, 12); - } - else - { - s->row_is_2d = !(s->rx_bitstream & 0x1000); - force_drop_rx_bits(s, 13); - } - } - } - - while (s->rx_bits >= 13) - { - /* We need to check for EOLs bit by bit through the whole stream. If - we just try looking between code words, we will miss an EOL when a bit - error has throw the code words completely out of step. The can mean - recovery takes many lines, and the image gets really messed up. */ - /* Although EOLs are not inserted at the end of each row of a T.6 image, - they are still perfectly valid, and can terminate an image. */ - if ((s->rx_bitstream & 0x0FFF) == 0x0800) - { - STATE_TRACE("EOL\n"); - if (s->row_len == 0) - { - /* A zero length row - i.e. 2 consecutive EOLs - is distinctly - the end of page condition. That's all we actually get on a - T.6 page. However, there are a minimum of 6 EOLs at the end of - any T.4 page. We can look for more than 2 EOLs in case bit - errors simulate the end of page condition at the wrong point. - Such robust checking is irrelevant for a T.6 page, as it should - be error free. */ - /* Note that for a T.6 page we should get here on the very first - EOL, as the row length should be zero at that point. Therefore - we should count up both EOLs, unless there is some bogus partial - row ahead of them. */ - s->consecutive_eols++; - if (s->line_encoding == T4_COMPRESSION_ITU_T6) - { - if (s->consecutive_eols >= EOLS_TO_END_T6_RX_PAGE) - { - s->consecutive_eols = EOLS_TO_END_ANY_RX_PAGE; - return TRUE; - } - } - else - { - if (s->consecutive_eols >= EOLS_TO_END_T4_RX_PAGE) - { - s->consecutive_eols = EOLS_TO_END_ANY_RX_PAGE; - return TRUE; - } - } - } - else - { - /* The EOLs are not back-to-back, so they are not part of the - end of page condition. */ - if (s->run_length > 0) - add_run_to_row(s); - s->consecutive_eols = 0; - if (put_decoded_row(s)) - return TRUE; - update_row_bit_info(s); - } - if (s->line_encoding == T4_COMPRESSION_ITU_T4_2D) - { - s->row_is_2d = !(s->rx_bitstream & 0x1000); - force_drop_rx_bits(s, 13); - } - else - { - force_drop_rx_bits(s, 12); - } - s->its_black = FALSE; - s->black_white = 0; - s->run_length = 0; - s->row_len = 0; - continue; - } - if (s->rx_skip_bits) - { - /* We are clearing out the remaining bits of the last code word we - absorbed. */ - s->rx_skip_bits--; - s->rx_bits--; - s->rx_bitstream >>= 1; - continue; - } - if (s->row_is_2d && s->black_white == 0) - { - bits = s->rx_bitstream & 0x7F; - STATE_TRACE("State %d, %d - ", - t4_2d_table[bits].state, - t4_2d_table[bits].width); - if (s->row_len >= s->image_width) - { - drop_rx_bits(s, t4_2d_table[bits].width); - continue; - } - if (s->a_cursor) - { - /* Move past a0, always staying on the current colour */ - for ( ; s->b1 <= s->a0; s->b_cursor += 2) - s->b1 += (s->ref_runs[s->b_cursor] + s->ref_runs[s->b_cursor + 1]); - } - switch (t4_2d_table[bits].state) - { - case S_Horiz: - STATE_TRACE("Horiz %d %d %d\n", - s->image_width, - s->a0, - s->a_cursor); - /* We now need to extract a white/black or black/white pair of runs, using the 1D - method. If the first of the pair takes us exactly to the end of the row, there - should still be a zero length element for the second of the pair. */ - s->its_black = s->a_cursor & 1; - s->black_white = 2; - break; - case S_Vert: - STATE_TRACE("Vert[%d] %d %d %d %d\n", - t4_2d_table[bits].param, - s->image_width, - s->a0, - s->b1, - s->run_length); - s->run_length += (s->b1 - s->a0 + t4_2d_table[bits].param); - s->a0 = s->b1 + t4_2d_table[bits].param; - add_run_to_row(s); - /* We need to move one step in one direction or the other, to change to the - opposite colour */ - if (t4_2d_table[bits].param >= 0) - { - s->b1 += s->ref_runs[s->b_cursor++]; - } - else - { - if (s->b_cursor) - s->b1 -= s->ref_runs[--s->b_cursor]; - } - break; - case S_Pass: - STATE_TRACE("Pass %d %d %d %d %d\n", - s->image_width, - s->a0, - s->b1, - s->ref_runs[s->b_cursor], - s->ref_runs[s->b_cursor + 1]); - s->b1 += s->ref_runs[s->b_cursor++]; - s->run_length += (s->b1 - s->a0); - s->a0 = s->b1; - s->b1 += s->ref_runs[s->b_cursor++]; - break; - case S_Ext: - /* We do not currently handle any kind of extension */ - STATE_TRACE("Ext %d %d %d 0x%x\n", - s->image_width, - s->a0, - ((s->rx_bitstream >> t4_2d_table[bits].width) & 0x7), - s->rx_bitstream); - /* TODO: The uncompressed option should be implemented. */ - break; - case S_Null: - STATE_TRACE("Null\n"); - break; - default: - STATE_TRACE("Unexpected T.4 state\n"); - span_log(&s->logging, SPAN_LOG_WARNING, "Unexpected T.4 state %d\n", t4_2d_table[bits].state); - break; - } - drop_rx_bits(s, t4_2d_table[bits].width); - } - else - { - if (s->its_black) - { - bits = s->rx_bitstream & 0x1FFF; - STATE_TRACE("State %d, %d - Black %d %d %d\n", - t4_1d_black_table[bits].state, - t4_1d_black_table[bits].width, - s->image_width, - s->a0, - t4_1d_black_table[bits].param); - switch (t4_1d_black_table[bits].state) - { - case S_MakeUpB: - case S_MakeUp: - s->run_length += t4_1d_black_table[bits].param; - s->a0 += t4_1d_black_table[bits].param; - break; - case S_TermB: - s->its_black = FALSE; - if (s->row_len < s->image_width) - { - s->run_length += t4_1d_black_table[bits].param; - s->a0 += t4_1d_black_table[bits].param; - add_run_to_row(s); - } - if (s->black_white) - s->black_white--; - break; - default: - /* Bad black */ - s->black_white = 0; - break; - } - drop_rx_bits(s, t4_1d_black_table[bits].width); - } - else - { - bits = s->rx_bitstream & 0xFFF; - STATE_TRACE("State %d, %d - White %d %d %d\n", - t4_1d_white_table[bits].state, - t4_1d_white_table[bits].width, - s->image_width, - s->a0, - t4_1d_white_table[bits].param); - switch (t4_1d_white_table[bits].state) - { - case S_MakeUpW: - case S_MakeUp: - s->run_length += t4_1d_white_table[bits].param; - s->a0 += t4_1d_white_table[bits].param; - break; - case S_TermW: - s->its_black = TRUE; - if (s->row_len < s->image_width) - { - s->run_length += t4_1d_white_table[bits].param; - s->a0 += t4_1d_white_table[bits].param; - add_run_to_row(s); - } - if (s->black_white) - s->black_white--; - break; - default: - /* Bad white */ - s->black_white = 0; - break; - } - drop_rx_bits(s, t4_1d_white_table[bits].width); - } - } - if (s->a0 >= s->image_width) - s->a0 = s->image_width - 1; - - if (s->line_encoding == T4_COMPRESSION_ITU_T6) - { - /* T.6 has no EOL markers. We sense the end of a line by its length alone. */ - /* The last test here is a backstop protection, so a corrupt image cannot - cause us to do bad things. Bad encoders have actually been seen, which - demand such protection. */ - if (s->black_white == 0 && s->row_len >= s->image_width) - { - STATE_TRACE("EOL T.6\n"); - if (s->run_length > 0) - add_run_to_row(s); - update_row_bit_info(s); - if (put_decoded_row(s)) - return TRUE; - s->its_black = FALSE; - s->black_white = 0; - s->run_length = 0; - s->row_len = 0; - } - } - } - return FALSE; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_rx_put_bit(t4_state_t *s, int bit) -{ - return rx_put_bits(s, bit & 1, 1); -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_rx_put_byte(t4_state_t *s, uint8_t byte) -{ - return rx_put_bits(s, byte & 0xFF, 8); -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_rx_put_chunk(t4_state_t *s, const uint8_t buf[], int len) -{ - int i; - uint8_t byte; - - for (i = 0; i < len; i++) - { - byte = buf[i]; - if (rx_put_bits(s, byte & 0xFF, 8)) - return TRUE; - } - return FALSE; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_rx_set_row_write_handler(t4_state_t *s, t4_row_write_handler_t handler, void *user_data) -{ - s->row_write_handler = handler; - s->row_write_user_data = user_data; - return 0; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(t4_state_t *) t4_rx_init(t4_state_t *s, const char *file, int output_encoding) -{ - if (s == NULL) - { - if ((s = (t4_state_t *) malloc(sizeof(*s))) == NULL) - return NULL; - } - memset(s, 0, sizeof(*s)); - span_log_init(&s->logging, SPAN_LOG_NONE, NULL); - span_log_set_protocol(&s->logging, "T.4"); - s->rx = TRUE; - - span_log(&s->logging, SPAN_LOG_FLOW, "Start rx document\n"); - - if (open_tiff_output_file(s, file) < 0) - return NULL; - - /* Save the file name for logging reports. */ - s->file = strdup(file); - /* Only provide for one form of coding throughout the file, even though the - coding on the wire could change between pages. */ - switch (output_encoding) - { - case T4_COMPRESSION_ITU_T4_1D: - s->tiff.output_compression = COMPRESSION_CCITT_T4; - s->tiff.output_t4_options = GROUP3OPT_FILLBITS; - break; - case T4_COMPRESSION_ITU_T4_2D: - s->tiff.output_compression = COMPRESSION_CCITT_T4; - s->tiff.output_t4_options = GROUP3OPT_FILLBITS | GROUP3OPT_2DENCODING; - break; - case T4_COMPRESSION_ITU_T6: - s->tiff.output_compression = COMPRESSION_CCITT_T6; - s->tiff.output_t4_options = 0; - break; - } - - /* Until we have a valid figure for the bytes per row, we need it to be set to a suitable - value to ensure it will be seen as changing when the real value is used. */ - s->bytes_per_row = 0; - - s->current_page = 0; - s->pages_in_file = 0; - s->start_page = 0; - s->stop_page = INT_MAX; - - s->image_buffer = NULL; - s->image_buffer_size = 0; - - /* Set some default values */ - s->x_resolution = T4_X_RESOLUTION_R8; - s->y_resolution = T4_Y_RESOLUTION_FINE; - s->image_width = T4_WIDTH_R8_A4; - - return s; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_rx_start_page(t4_state_t *s) -{ - int bytes_per_row; - int run_space; - uint32_t *bufptr; - - span_log(&s->logging, SPAN_LOG_FLOW, "Start rx page - compression %d\n", s->line_encoding); - if (s->tiff.tiff_file == NULL) - return -1; - - /* Calculate the scanline/tile width. */ - bytes_per_row = (s->image_width + 7)/8; - run_space = (s->image_width + 4)*sizeof(uint32_t); - if (bytes_per_row != s->bytes_per_row) - { - /* Allocate the space required for decoding the new row length. */ - s->bytes_per_row = bytes_per_row; - if ((bufptr = (uint32_t *) realloc(s->cur_runs, run_space)) == NULL) - return -1; - s->cur_runs = bufptr; - if ((bufptr = (uint32_t *) realloc(s->ref_runs, run_space)) == NULL) - return -1; - s->ref_runs = bufptr; - } - memset(s->cur_runs, 0, run_space); - memset(s->ref_runs, 0, run_space); - - s->rx_bits = 0; - s->rx_skip_bits = 0; - s->rx_bitstream = 0; - s->row_bits = 0; - s->min_row_bits = INT_MAX; - s->max_row_bits = 0; - - s->row_is_2d = (s->line_encoding == T4_COMPRESSION_ITU_T6); - /* We start at -1 EOLs for 1D and 2D decoding, as an indication we are waiting for the - first EOL. T.6 coding starts without any preamble. */ - s->consecutive_eols = (s->line_encoding == T4_COMPRESSION_ITU_T6) ? 0 : -1; - - s->bad_rows = 0; - s->longest_bad_row_run = 0; - s->curr_bad_row_run = 0; - s->image_length = 0; - s->tx_bitstream = 0; - s->tx_bits = 8; - s->image_size = 0; - s->line_image_size = 0; - s->last_row_starts_at = 0; - - s->row_len = 0; - s->its_black = FALSE; - s->black_white = 0; - - /* Initialise the reference line to all white */ - s->ref_runs[0] = - s->ref_runs[1] = - s->ref_runs[2] = - s->ref_runs[3] = s->image_width; - s->ref_steps = 1; - - s->b_cursor = 1; - s->a_cursor = 0; - s->b1 = s->ref_runs[0]; - s->a0 = 0; - - s->run_length = 0; - - time (&s->page_start_time); - - return 0; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_rx_release(t4_state_t *s) -{ - if (!s->rx) - return -1; - if (s->tiff.tiff_file) - close_tiff_output_file(s); - free_buffers(s); - return 0; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_rx_free(t4_state_t *s) -{ - int ret; - - ret = t4_rx_release(s); - free(s); - return ret; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(void) t4_rx_set_rx_encoding(t4_state_t *s, int encoding) -{ - s->line_encoding = encoding; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(void) t4_rx_set_image_width(t4_state_t *s, int width) -{ - s->image_width = width; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(void) t4_rx_set_y_resolution(t4_state_t *s, int resolution) -{ - s->y_resolution = resolution; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(void) t4_rx_set_x_resolution(t4_state_t *s, int resolution) -{ - s->x_resolution = resolution; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(void) t4_rx_set_dcs(t4_state_t *s, const char *dcs) -{ - s->tiff.dcs = (dcs && dcs[0]) ? dcs : NULL; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(void) t4_rx_set_sub_address(t4_state_t *s, const char *sub_address) -{ - s->tiff.sub_address = (sub_address && sub_address[0]) ? sub_address : NULL; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(void) t4_rx_set_far_ident(t4_state_t *s, const char *ident) -{ - s->tiff.far_ident = (ident && ident[0]) ? ident : NULL; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(void) t4_rx_set_vendor(t4_state_t *s, const char *vendor) -{ - s->tiff.vendor = vendor; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(void) t4_rx_set_model(t4_state_t *s, const char *model) -{ - s->tiff.model = model; -} -/*- End of function --------------------------------------------------------*/ - -static __inline__ int put_encoded_bits(t4_state_t *s, uint32_t bits, int length) -{ - uint8_t *t; - - /* We might be called with a large length value, to spew out a mass of zero bits for - minimum row length padding. */ - s->tx_bitstream |= (bits << s->tx_bits); - s->tx_bits += length; - s->row_bits += length; - if ((s->image_size + (s->tx_bits + 7)/8) >= s->image_buffer_size) - { - if ((t = realloc(s->image_buffer, s->image_buffer_size + 100*s->bytes_per_row)) == NULL) - return -1; - s->image_buffer = t; - s->image_buffer_size += 100*s->bytes_per_row; - } - while (s->tx_bits >= 8) - { - s->image_buffer[s->image_size++] = (uint8_t) (s->tx_bitstream & 0xFF); - s->tx_bitstream >>= 8; - s->tx_bits -= 8; - } - return 0; -} -/*- End of function --------------------------------------------------------*/ - -/* - * Write the sequence of codes that describes - * the specified span of zero's or one's. The - * appropriate table that holds the make-up and - * terminating codes is supplied. - */ -static __inline__ int put_1d_span(t4_state_t *s, int32_t span, const t4_run_table_entry_t *tab) -{ - const t4_run_table_entry_t *te; - - te = &tab[63 + (2560 >> 6)]; - while (span >= 2560 + 64) - { - if (put_encoded_bits(s, te->code, te->length)) - return -1; - span -= te->run_length; - } - te = &tab[63 + (span >> 6)]; - if (span >= 64) - { - if (put_encoded_bits(s, te->code, te->length)) - return -1; - span -= te->run_length; - } - if (put_encoded_bits(s, tab[span].code, tab[span].length)) - return -1; - return 0; -} -/*- End of function --------------------------------------------------------*/ - -#define pixel_is_black(x,bit) (((x)[(bit) >> 3] << ((bit) & 7)) & 0x80) - -/* - * Write an EOL code to the output stream. We also handle writing the tag - * bit for the next scanline when doing 2D encoding. - */ -static void encode_eol(t4_state_t *s) -{ - uint32_t code; - int length; - - if (s->line_encoding == T4_COMPRESSION_ITU_T4_2D) - { - code = 0x0800 | ((!s->row_is_2d) << 12); - length = 13; - } - else - { - /* T.4 1D EOL, or T.6 EOFB */ - code = 0x800; - length = 12; - } - if (s->row_bits) - { - /* We may need to pad the row to a minimum length, unless we are in T.6 mode. - In T.6 we only come here at the end of the page to add the EOFB marker, which - is like two 1D EOLs. */ - if (s->line_encoding != T4_COMPRESSION_ITU_T6) - { - if (s->row_bits + length < s->min_bits_per_row) - put_encoded_bits(s, 0, s->min_bits_per_row - (s->row_bits + length)); - } - put_encoded_bits(s, code, length); - update_row_bit_info(s); - } - else - { - /* We don't pad zero length rows. They are the consecutive EOLs which end a page. */ - put_encoded_bits(s, code, length); - /* Don't do the full update row bit info, or the minimum suddenly drops to the - length of an EOL. Just clear the row bits, so we treat the next EOL as an - end of page EOL, with no padding. */ - s->row_bits = 0; - } -} -/*- End of function --------------------------------------------------------*/ - -/* - * 2D-encode a row of pixels. Consult ITU specification T.4 for the algorithm. - */ -static void encode_2d_row(t4_state_t *s) -{ - static const t4_run_table_entry_t codes[] = - { - { 7, 0x60, 0 }, /* VR3 0000 011 */ - { 6, 0x30, 0 }, /* VR2 0000 11 */ - { 3, 0x06, 0 }, /* VR1 011 */ - { 1, 0x01, 0 }, /* V0 1 */ - { 3, 0x02, 0 }, /* VL1 010 */ - { 6, 0x10, 0 }, /* VL2 0000 10 */ - { 7, 0x20, 0 }, /* VL3 0000 010 */ - { 3, 0x04, 0 }, /* horizontal 001 */ - { 4, 0x08, 0 } /* pass 0001 */ - }; - - /* The reference or starting changing element on the coding line. At the start of the coding - line, a0 is set on an imaginary white changing element situated just before the first element - on the line. During the coding of the coding line, the position of a0 is defined by the - previous coding mode. (See T.4/4.2.1.3.2.) */ - int a0; - /* The next changing element to the right of a0 on the coding line. */ - int a1; - /* The next changing element to the right of a1 on the coding line. */ - int a2; - /* The first changing element on the reference line to the right of a0 and of opposite colour to a0. */ - int b1; - /* The next changing element to the right of b1 on the reference line. */ - int b2; - int diff; - int a_cursor; - int b_cursor; - int cur_steps; - uint32_t *p; - - /* - b1 b2 - XX XX XX XX XX -- -- -- -- -- XX XX XX -- -- -- -- -- - XX XX XX -- -- -- -- -- XX XX XX XX XX XX -- -- -- -- - a0 a1 a2 - - - a) Pass mode - This mode is identified when the position of b2 lies to the left of a1. When this mode - has been coded, a0 is set on the element of the coding line below b2 in preparation for - the next coding (i.e. on a0'). - - b1 b2 - XX XX XX XX -- -- XX XX XX -- -- -- -- -- - XX XX -- -- -- -- -- -- -- -- -- -- XX XX - a0 a0' a1 - Pass mode - - - However, the state where b2 occurs just above a1, as shown in the figure below, is not - considered as a pass mode. - - b1 b2 - XX XX XX XX -- -- XX XX XX -- -- -- -- -- - XX XX -- -- -- -- -- -- -- XX XX XX XX XX - a0 a1 - Not pass mode - - - b) Vertical mode - When this mode is identified, the position of a1 is coded relative to the position of b1. - The relative distance a1b1 can take on one of seven values V(0), VR(1), VR(2), VR(3), - VL(1), VL(2) and VL(3), each of which is represented by a separate code word. The - subscripts R and L indicate that a1 is to the right or left respectively of b1, and the - number in brackets indicates the value of the distance a1b1. After vertical mode coding - has occurred, the position of a0 is set on a1 (see figure below). - - c) Horizontal mode - When this mode is identified, both the run-lengths a0a1 and a1a2 are coded using the code - words H + M(a0a1) + M(a1a2). H is the flag code word 001 taken from the two-dimensional - code table. M(a0a1) and M(a1a2) are code words which represent the length and "colour" - of the runs a0a1 and a1a2 respectively and are taken from the appropriate white or black - one-dimensional code tables. After a horizontal mode coding, the position of a0 is set on - a2 (see figure below). - - Vertical - - b1 b2 - -- XX XX XX XX XX -- -- -- -- -- -- -- -- XX XX XX XX -- -- -- - -- -- -- -- -- -- -- -- -- -- -- -- XX XX XX XX XX XX XX -- -- - a0 a1 a2 - <-------- a0a1 --------><-------- a1a2 ------------> - Horizontal mode - Vertical and horizontal modes - */ - /* The following implements the 2-D encoding section of the flow chart in Figure7/T.4 */ - cur_steps = row_to_run_lengths(s->cur_runs, s->row_buf, s->image_width); - /* Stretch the row a little, so when we step by 2 we are guaranteed to - hit an entry showing the row length */ - s->cur_runs[cur_steps] = - s->cur_runs[cur_steps + 1] = - s->cur_runs[cur_steps + 2] = s->cur_runs[cur_steps - 1]; - - a0 = 0; - a1 = s->cur_runs[0]; - b1 = s->ref_runs[0]; - a_cursor = 0; - b_cursor = 0; - for (;;) - { - b2 = s->ref_runs[b_cursor + 1]; - if (b2 >= a1) - { - diff = b1 - a1; - if (abs(diff) <= 3) - { - /* Vertical mode coding */ - put_encoded_bits(s, codes[diff + 3].code, codes[diff + 3].length); - a0 = a1; - a_cursor++; - } - else - { - /* Horizontal mode coding */ - a2 = s->cur_runs[a_cursor + 1]; - put_encoded_bits(s, codes[7].code, codes[7].length); - if (a0 + a1 == 0 || pixel_is_black(s->row_buf, a0) == 0) - { - put_1d_span(s, a1 - a0, t4_white_codes); - put_1d_span(s, a2 - a1, t4_black_codes); - } - else - { - put_1d_span(s, a1 - a0, t4_black_codes); - put_1d_span(s, a2 - a1, t4_white_codes); - } - a0 = a2; - a_cursor += 2; - } - if (a0 >= s->image_width) - break; - if (a_cursor >= cur_steps) - a_cursor = cur_steps - 1; - a1 = s->cur_runs[a_cursor]; - } - else - { - /* Pass mode coding */ - put_encoded_bits(s, codes[8].code, codes[8].length); - /* We now set a0 to somewhere in the middle of its current run, - but we know are aren't moving beyond that run. */ - a0 = b2; - if (a0 >= s->image_width) - break; - } - /* We need to hunt for the correct position in the reference row, as the - runs there have no particular alignment with the runs in the current - row. */ - if (pixel_is_black(s->row_buf, a0)) - b_cursor |= 1; - else - b_cursor &= ~1; - if (a0 < (int) s->ref_runs[b_cursor]) - { - for ( ; b_cursor >= 0; b_cursor -= 2) - { - if (a0 >= (int) s->ref_runs[b_cursor]) - break; - } - b_cursor += 2; - } - else - { - for ( ; b_cursor < s->ref_steps; b_cursor += 2) - { - if (a0 < (int) s->ref_runs[b_cursor]) - break; - } - if (b_cursor >= s->ref_steps) - b_cursor = s->ref_steps - 1; - } - b1 = s->ref_runs[b_cursor]; - } - /* Swap the buffers */ - s->ref_steps = cur_steps; - p = s->cur_runs; - s->cur_runs = s->ref_runs; - s->ref_runs = p; -} -/*- End of function --------------------------------------------------------*/ - -/* - * 1D-encode a row of pixels. The encoding is - * a sequence of all-white or all-black spans - * of pixels encoded with Huffman codes. - */ -static void encode_1d_row(t4_state_t *s) -{ - int i; - - /* Do our work in the reference row buffer, and it is already in place if - we need a reference row for a following 2D encoded row. */ - s->ref_steps = row_to_run_lengths(s->ref_runs, s->row_buf, s->image_width); - put_1d_span(s, s->ref_runs[0], t4_white_codes); - for (i = 1; i < s->ref_steps; i++) - put_1d_span(s, s->ref_runs[i] - s->ref_runs[i - 1], (i & 1) ? t4_black_codes : t4_white_codes); - /* Stretch the row a little, so when we step by 2 we are guaranteed to - hit an entry showing the row length */ - s->ref_runs[s->ref_steps] = - s->ref_runs[s->ref_steps + 1] = - s->ref_runs[s->ref_steps + 2] = s->ref_runs[s->ref_steps - 1]; -} -/*- End of function --------------------------------------------------------*/ - -static int encode_row(t4_state_t *s) -{ - switch (s->line_encoding) - { - case T4_COMPRESSION_ITU_T6: - /* T.6 compression is a trivial step up from T.4 2D, so we just - throw it in here. T.6 is only used with error correction, - so it does not need independantly compressed (i.e. 1D) lines - to recover from data errors. It doesn't need EOLs, either. */ - if (s->row_bits) - update_row_bit_info(s); - encode_2d_row(s); - break; - case T4_COMPRESSION_ITU_T4_2D: - encode_eol(s); - if (s->row_is_2d) - { - encode_2d_row(s); - s->rows_to_next_1d_row--; - } - else - { - encode_1d_row(s); - s->row_is_2d = TRUE; - } - if (s->rows_to_next_1d_row <= 0) - { - /* Insert a row of 1D encoding */ - s->row_is_2d = FALSE; - s->rows_to_next_1d_row = s->max_rows_to_next_1d_row - 1; - } - break; - default: - case T4_COMPRESSION_ITU_T4_1D: - encode_eol(s); - encode_1d_row(s); - break; - } - s->row++; - return 0; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_set_row_read_handler(t4_state_t *s, t4_row_read_handler_t handler, void *user_data) -{ - s->row_read_handler = handler; - s->row_read_user_data = user_data; - return 0; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(t4_state_t *) t4_tx_init(t4_state_t *s, const char *file, int start_page, int stop_page) -{ - int run_space; - - if (s == NULL) - { - if ((s = (t4_state_t *) malloc(sizeof(*s))) == NULL) - return NULL; - } - memset(s, 0, sizeof(*s)); - span_log_init(&s->logging, SPAN_LOG_NONE, NULL); - span_log_set_protocol(&s->logging, "T.4"); - s->rx = FALSE; - - span_log(&s->logging, SPAN_LOG_FLOW, "Start tx document\n"); - - if (open_tiff_input_file(s, file) < 0) - return NULL; - s->file = strdup(file); - s->current_page = - s->start_page = (start_page >= 0) ? start_page : 0; - s->stop_page = (stop_page >= 0) ? stop_page : INT_MAX; - - if (!TIFFSetDirectory(s->tiff.tiff_file, (tdir_t) s->current_page)) - return NULL; - if (get_tiff_directory_info(s)) - { - close_tiff_input_file(s); - return NULL; - } - - s->rows_to_next_1d_row = s->max_rows_to_next_1d_row - 1; - - s->pages_in_file = -1; - - run_space = (s->image_width + 4)*sizeof(uint32_t); - if ((s->cur_runs = (uint32_t *) malloc(run_space)) == NULL) - return NULL; - if ((s->ref_runs = (uint32_t *) malloc(run_space)) == NULL) - { - free_buffers(s); - close_tiff_input_file(s); - return NULL; - } - if ((s->row_buf = malloc(s->bytes_per_row)) == NULL) - { - free_buffers(s); - close_tiff_input_file(s); - return NULL; - } - s->ref_runs[0] = - s->ref_runs[1] = - s->ref_runs[2] = - s->ref_runs[3] = s->image_width; - s->ref_steps = 1; - s->image_buffer_size = 0; - return s; -} -/*- End of function --------------------------------------------------------*/ - -static void make_header(t4_state_t *s, char *header) -{ - time_t now; - struct tm tm; - static const char *months[] = - { - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - }; - - time(&now); - tm = *localtime(&now); - snprintf(header, - 132, - " %2d-%s-%d %02d:%02d %-50s %-21s p.%d", - tm.tm_mday, - months[tm.tm_mon], - tm.tm_year + 1900, - tm.tm_hour, - tm.tm_min, - s->header_info, - s->tiff.local_ident, - s->current_page + 1); -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_start_page(t4_state_t *s) -{ - int row; - int i; - int repeats; - int pattern; - int row_bufptr; - int run_space; - int len; - int old_image_width; - char *t; - char header[132 + 1]; - uint8_t *bufptr8; - uint32_t *bufptr; - - span_log(&s->logging, SPAN_LOG_FLOW, "Start tx page %d\n", s->current_page); - if (s->current_page > s->stop_page) - return -1; - if (s->tiff.tiff_file == NULL) - return -1; - old_image_width = s->image_width; - if (s->row_read_handler == NULL) - { -#if defined(HAVE_LIBTIFF) - if (!TIFFSetDirectory(s->tiff.tiff_file, (tdir_t) s->current_page)) - return -1; - get_tiff_directory_info(s); -#endif - } - s->image_size = 0; - s->tx_bitstream = 0; - s->tx_bits = 0; - s->row_is_2d = (s->line_encoding == T4_COMPRESSION_ITU_T6); - s->rows_to_next_1d_row = s->max_rows_to_next_1d_row - 1; - - /* Allow for pages being of different width. */ - run_space = (s->image_width + 4)*sizeof(uint32_t); - if (old_image_width != s->image_width) - { - s->bytes_per_row = (s->image_width + 7)/8; - - if ((bufptr = (uint32_t *) realloc(s->cur_runs, run_space)) == NULL) - return -1; - s->cur_runs = bufptr; - if ((bufptr = (uint32_t *) realloc(s->ref_runs, run_space)) == NULL) - return -1; - s->ref_runs = bufptr; - if ((bufptr8 = realloc(s->row_buf, s->bytes_per_row)) == NULL) - return -1; - s->row_buf = bufptr8; - } - s->ref_runs[0] = - s->ref_runs[1] = - s->ref_runs[2] = - s->ref_runs[3] = s->image_width; - s->ref_steps = 1; - - s->row_bits = 0; - s->min_row_bits = INT_MAX; - s->max_row_bits = 0; - - if (s->header_info && s->header_info[0]) - { - /* Modify the resulting image to include a header line, typical of hardware FAX machines */ - make_header(s, header); - switch (s->y_resolution) - { - case T4_Y_RESOLUTION_1200: - repeats = 12; - break; - case T4_Y_RESOLUTION_800: - repeats = 8; - break; - case T4_Y_RESOLUTION_600: - repeats = 6; - break; - case T4_Y_RESOLUTION_SUPERFINE: - repeats = 4; - break; - case T4_Y_RESOLUTION_300: - repeats = 3; - break; - case T4_Y_RESOLUTION_FINE: - repeats = 2; - break; - default: - repeats = 1; - break; - } - for (row = 0; row < 16; row++) - { - t = header; - row_bufptr = 0; - for (t = header; *t && row_bufptr <= s->bytes_per_row - 2; t++) - { - pattern = header_font[(uint8_t) *t][row]; - s->row_buf[row_bufptr++] = (uint8_t) (pattern >> 8); - s->row_buf[row_bufptr++] = (uint8_t) (pattern & 0xFF); - } - for ( ; row_bufptr < s->bytes_per_row; ) - s->row_buf[row_bufptr++] = 0; - for (i = 0; i < repeats; i++) - { - if (encode_row(s)) - return -1; - } - } - } - if (s->row_read_handler) - { - for (row = 0; ; row++) - { - if ((len = s->row_read_handler(s->row_read_user_data, s->row_buf, s->bytes_per_row)) < 0) - { - span_log(&s->logging, SPAN_LOG_WARNING, "%s: Read error at row %d.\n", s->file, row); - break; - } - if (len == 0) - break; - if (encode_row(s)) - return -1; - } - s->image_length = row; - } - else - { - if ((s->image_length = read_tiff_image(s)) < 0) - return -1; - } - if (s->line_encoding == T4_COMPRESSION_ITU_T6) - { - /* Attach an EOFB (end of facsimile block == 2 x EOLs) to the end of the page */ - for (i = 0; i < EOLS_TO_END_T6_TX_PAGE; i++) - encode_eol(s); - } - else - { - /* Attach an RTC (return to control == 6 x EOLs) to the end of the page */ - s->row_is_2d = FALSE; - for (i = 0; i < EOLS_TO_END_T4_TX_PAGE; i++) - encode_eol(s); - } - - /* Force any partial byte in progress to flush using ones. Any post EOL padding when - sending is normally ones, so this is consistent. */ - put_encoded_bits(s, 0xFF, 7); - s->bit_pos = 7; - s->bit_ptr = 0; - s->line_image_size = s->image_size*8; - - return 0; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_next_page_has_different_format(t4_state_t *s) -{ - span_log(&s->logging, SPAN_LOG_FLOW, "Checking for the existance of page %d\n", s->current_page + 1); - if (s->current_page >= s->stop_page) - return -1; - if (s->row_read_handler == NULL) - { -#if defined(HAVE_LIBTIFF) - if (s->tiff.tiff_file == NULL) - return -1; - if (!TIFFSetDirectory(s->tiff.tiff_file, (tdir_t) s->current_page + 1)) - return -1; - return test_tiff_directory_info(s); -#endif - } - return 0; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_restart_page(t4_state_t *s) -{ - s->bit_pos = 7; - s->bit_ptr = 0; - return 0; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_end_page(t4_state_t *s) -{ - s->current_page++; - return 0; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_get_bit(t4_state_t *s) -{ - int bit; - - if (s->bit_ptr >= s->image_size) - return SIG_STATUS_END_OF_DATA; - bit = (s->image_buffer[s->bit_ptr] >> (7 - s->bit_pos)) & 1; - if (--s->bit_pos < 0) - { - s->bit_pos = 7; - s->bit_ptr++; - } - return bit; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_get_byte(t4_state_t *s) -{ - if (s->bit_ptr >= s->image_size) - return 0x100; - return s->image_buffer[s->bit_ptr++]; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_get_chunk(t4_state_t *s, uint8_t buf[], int max_len) -{ - if (s->bit_ptr >= s->image_size) - return 0; - if (s->bit_ptr + max_len > s->image_size) - max_len = s->image_size - s->bit_ptr; - memcpy(buf, &s->image_buffer[s->bit_ptr], max_len); - s->bit_ptr += max_len; - return max_len; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_check_bit(t4_state_t *s) -{ - int bit; - - if (s->bit_ptr >= s->image_size) - return SIG_STATUS_END_OF_DATA; - bit = (s->image_buffer[s->bit_ptr] >> s->bit_pos) & 1; - return bit; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_release(t4_state_t *s) -{ - if (s->rx) - return -1; - if (s->tiff.tiff_file) - close_tiff_input_file(s); - free_buffers(s); - return 0; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_free(t4_state_t *s) -{ - int ret; - - ret = t4_tx_release(s); - free(s); - return ret; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(void) t4_tx_set_tx_encoding(t4_state_t *s, int encoding) -{ - s->line_encoding = encoding; - s->rows_to_next_1d_row = s->max_rows_to_next_1d_row - 1; - s->row_is_2d = FALSE; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(void) t4_tx_set_min_row_bits(t4_state_t *s, int bits) -{ - s->min_bits_per_row = bits; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(void) t4_tx_set_local_ident(t4_state_t *s, const char *ident) -{ - s->tiff.local_ident = (ident && ident[0]) ? ident : NULL; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(void) t4_tx_set_header_info(t4_state_t *s, const char *info) -{ - s->header_info = (info && info[0]) ? info : NULL; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_get_y_resolution(t4_state_t *s) -{ - return s->y_resolution; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_get_x_resolution(t4_state_t *s) -{ - return s->x_resolution; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_get_image_width(t4_state_t *s) -{ - return s->image_width; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_get_pages_in_file(t4_state_t *s) -{ - int max; - - max = 0; - if (s->row_write_handler == NULL) - max = get_tiff_total_pages(s); - if (max >= 0) - s->pages_in_file = max; - return max; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) t4_tx_get_current_page_in_file(t4_state_t *s) -{ - return s->current_page; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(void) t4_get_transfer_statistics(t4_state_t *s, t4_stats_t *t) -{ - t->pages_transferred = s->current_page - s->start_page; - t->pages_in_file = s->pages_in_file; - t->width = s->image_width; - t->length = s->image_length; - t->bad_rows = s->bad_rows; - t->longest_bad_row_run = s->longest_bad_row_run; - t->x_resolution = s->x_resolution; - t->y_resolution = s->y_resolution; - t->encoding = s->line_encoding; - t->line_image_size = s->line_image_size/8; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(const char *) t4_encoding_to_str(int encoding) -{ - switch (encoding) - { - case T4_COMPRESSION_ITU_T4_1D: - return "T.4 1-D"; - case T4_COMPRESSION_ITU_T4_2D: - return "T.4 2-D"; - case T4_COMPRESSION_ITU_T6: - return "T.6"; - } - return "???"; -} -/*- End of function --------------------------------------------------------*/ -/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/t4_states.h b/libs/spandsp/src/t4_states.h deleted file mode 100644 index 63274dcbbe..0000000000 --- a/libs/spandsp/src/t4_states.h +++ /dev/null @@ -1,12680 +0,0 @@ -/* - * SpanDSP - a series of DSP components for telephony - * - * t4_states.h - state tables for T.4 FAX image processing - * - * Written by Steve Underwood - * - * Copyright (C) 2004 Steve Underwood - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: t4_states.h,v 1.7 2008/04/17 14:26:58 steveu Exp $ - */ - -/* Legitimate runs of zero bits which are the tail end of one code - plus the start of the next code do not exceed 10 bits. */ - -/* - * Note that these tables are ordered such that the - * index into the table is known to be either the - * run length, or (run length / 64) + a fixed offset. - */ -static const t4_run_table_entry_t t4_white_codes[] = -{ - { 8, 0x00AC, 0}, /* 0011 0101 */ - { 6, 0x0038, 1}, /* 0001 11 */ - { 4, 0x000E, 2}, /* 0111 */ - { 4, 0x0001, 3}, /* 1000 */ - { 4, 0x000D, 4}, /* 1011 */ - { 4, 0x0003, 5}, /* 1100 */ - { 4, 0x0007, 6}, /* 1110 */ - { 4, 0x000F, 7}, /* 1111 */ - { 5, 0x0019, 8}, /* 1001 1 */ - { 5, 0x0005, 9}, /* 1010 0 */ - { 5, 0x001C, 10}, /* 0011 1 */ - { 5, 0x0002, 11}, /* 0100 0 */ - { 6, 0x0004, 12}, /* 0010 00 */ - { 6, 0x0030, 13}, /* 0000 11 */ - { 6, 0x000B, 14}, /* 1101 00 */ - { 6, 0x002B, 15}, /* 1101 01 */ - { 6, 0x0015, 16}, /* 1010 10 */ - { 6, 0x0035, 17}, /* 1010 11 */ - { 7, 0x0072, 18}, /* 0100 111 */ - { 7, 0x0018, 19}, /* 0001 100 */ - { 7, 0x0008, 20}, /* 0001 000 */ - { 7, 0x0074, 21}, /* 0010 111 */ - { 7, 0x0060, 22}, /* 0000 011 */ - { 7, 0x0010, 23}, /* 0000 100 */ - { 7, 0x000A, 24}, /* 0101 000 */ - { 7, 0x006A, 25}, /* 0101 011 */ - { 7, 0x0064, 26}, /* 0010 011 */ - { 7, 0x0012, 27}, /* 0100 100 */ - { 7, 0x000C, 28}, /* 0011 000 */ - { 8, 0x0040, 29}, /* 0000 0010 */ - { 8, 0x00C0, 30}, /* 0000 0011 */ - { 8, 0x0058, 31}, /* 0001 1010 */ - { 8, 0x00D8, 32}, /* 0001 1011 */ - { 8, 0x0048, 33}, /* 0001 0010 */ - { 8, 0x00C8, 34}, /* 0001 0011 */ - { 8, 0x0028, 35}, /* 0001 0100 */ - { 8, 0x00A8, 36}, /* 0001 0101 */ - { 8, 0x0068, 37}, /* 0001 0110 */ - { 8, 0x00E8, 38}, /* 0001 0111 */ - { 8, 0x0014, 39}, /* 0010 1000 */ - { 8, 0x0094, 40}, /* 0010 1001 */ - { 8, 0x0054, 41}, /* 0010 1010 */ - { 8, 0x00D4, 42}, /* 0010 1011 */ - { 8, 0x0034, 43}, /* 0010 1100 */ - { 8, 0x00B4, 44}, /* 0010 1101 */ - { 8, 0x0020, 45}, /* 0000 0100 */ - { 8, 0x00A0, 46}, /* 0000 0101 */ - { 8, 0x0050, 47}, /* 0000 1010 */ - { 8, 0x00D0, 48}, /* 0000 1011 */ - { 8, 0x004A, 49}, /* 0101 0010 */ - { 8, 0x00CA, 50}, /* 0101 0011 */ - { 8, 0x002A, 51}, /* 0101 0100 */ - { 8, 0x00AA, 52}, /* 0101 0101 */ - { 8, 0x0024, 53}, /* 0010 0100 */ - { 8, 0x00A4, 54}, /* 0010 0101 */ - { 8, 0x001A, 55}, /* 0101 1000 */ - { 8, 0x009A, 56}, /* 0101 1001 */ - { 8, 0x005A, 57}, /* 0101 1010 */ - { 8, 0x00DA, 58}, /* 0101 1011 */ - { 8, 0x0052, 59}, /* 0100 1010 */ - { 8, 0x00D2, 60}, /* 0100 1011 */ - { 8, 0x004C, 61}, /* 0011 0010 */ - { 8, 0x00CC, 62}, /* 0011 0011 */ - { 8, 0x002C, 63}, /* 0011 0100 */ - { 5, 0x001B, 64}, /* 1101 1 */ - { 5, 0x0009, 128}, /* 1001 0 */ - { 6, 0x003A, 192}, /* 0101 11 */ - { 7, 0x0076, 256}, /* 0110 111 */ - { 8, 0x006C, 320}, /* 0011 0110 */ - { 8, 0x00EC, 384}, /* 0011 0111 */ - { 8, 0x0026, 448}, /* 0110 0100 */ - { 8, 0x00A6, 512}, /* 0110 0101 */ - { 8, 0x0016, 576}, /* 0110 1000 */ - { 8, 0x00E6, 640}, /* 0110 0111 */ - { 9, 0x0066, 704}, /* 0110 0110 0 */ - { 9, 0x0166, 768}, /* 0110 0110 1 */ - { 9, 0x0096, 832}, /* 0110 1001 0 */ - { 9, 0x0196, 896}, /* 0110 1001 1 */ - { 9, 0x0056, 960}, /* 0110 1010 0 */ - { 9, 0x0156, 1024}, /* 0110 1010 1 */ - { 9, 0x00D6, 1088}, /* 0110 1011 0 */ - { 9, 0x01D6, 1152}, /* 0110 1011 1 */ - { 9, 0x0036, 1216}, /* 0110 1100 0 */ - { 9, 0x0136, 1280}, /* 0110 1100 1 */ - { 9, 0x00B6, 1344}, /* 0110 1101 0 */ - { 9, 0x01B6, 1408}, /* 0110 1101 1 */ - { 9, 0x0032, 1472}, /* 0100 1100 0 */ - { 9, 0x0132, 1536}, /* 0100 1100 1 */ - { 9, 0x00B2, 1600}, /* 0100 1101 0 */ - { 6, 0x0006, 1664}, /* 0110 00 */ - { 9, 0x01B2, 1728}, /* 0100 1101 1 */ - {11, 0x0080, 1792}, /* 0000 0001 000 */ - {11, 0x0180, 1856}, /* 0000 0001 100 */ - {11, 0x0580, 1920}, /* 0000 0001 101 */ - {12, 0x0480, 1984}, /* 0000 0001 0010 */ - {12, 0x0C80, 2048}, /* 0000 0001 0011 */ - {12, 0x0280, 2112}, /* 0000 0001 0100 */ - {12, 0x0A80, 2176}, /* 0000 0001 0101 */ - {12, 0x0680, 2240}, /* 0000 0001 0110 */ - {12, 0x0E80, 2304}, /* 0000 0001 0111 */ - {12, 0x0380, 2368}, /* 0000 0001 1100 */ - {12, 0x0B80, 2432}, /* 0000 0001 1101 */ - {12, 0x0780, 2496}, /* 0000 0001 1110 */ - {12, 0x0F80, 2560}, /* 0000 0001 1111 */ -}; - -static const t4_run_table_entry_t t4_black_codes[] = -{ - {10, 0x03B0, 0}, /* 0000 1101 11 */ - { 3, 0x0002, 1}, /* 010 */ - { 2, 0x0003, 2}, /* 11 */ - { 2, 0x0001, 3}, /* 10 */ - { 3, 0x0006, 4}, /* 011 */ - { 4, 0x000C, 5}, /* 0011 */ - { 4, 0x0004, 6}, /* 0010 */ - { 5, 0x0018, 7}, /* 0001 1 */ - { 6, 0x0028, 8}, /* 0001 01 */ - { 6, 0x0008, 9}, /* 0001 00 */ - { 7, 0x0010, 10}, /* 0000 100 */ - { 7, 0x0050, 11}, /* 0000 101 */ - { 7, 0x0070, 12}, /* 0000 111 */ - { 8, 0x0020, 13}, /* 0000 0100 */ - { 8, 0x00E0, 14}, /* 0000 0111 */ - { 9, 0x0030, 15}, /* 0000 1100 0 */ - {10, 0x03A0, 16}, /* 0000 0101 11 */ - {10, 0x0060, 17}, /* 0000 0110 00 */ - {10, 0x0040, 18}, /* 0000 0010 00 */ - {11, 0x0730, 19}, /* 0000 1100 111 */ - {11, 0x00B0, 20}, /* 0000 1101 000 */ - {11, 0x01B0, 21}, /* 0000 1101 100 */ - {11, 0x0760, 22}, /* 0000 0110 111 */ - {11, 0x00A0, 23}, /* 0000 0101 000 */ - {11, 0x0740, 24}, /* 0000 0010 111 */ - {11, 0x00C0, 25}, /* 0000 0011 000 */ - {12, 0x0530, 26}, /* 0000 1100 1010 */ - {12, 0x0D30, 27}, /* 0000 1100 1011 */ - {12, 0x0330, 28}, /* 0000 1100 1100 */ - {12, 0x0B30, 29}, /* 0000 1100 1101 */ - {12, 0x0160, 30}, /* 0000 0110 1000 */ - {12, 0x0960, 31}, /* 0000 0110 1001 */ - {12, 0x0560, 32}, /* 0000 0110 1010 */ - {12, 0x0D60, 33}, /* 0000 0110 1011 */ - {12, 0x04B0, 34}, /* 0000 1101 0010 */ - {12, 0x0CB0, 35}, /* 0000 1101 0011 */ - {12, 0x02B0, 36}, /* 0000 1101 0100 */ - {12, 0x0AB0, 37}, /* 0000 1101 0101 */ - {12, 0x06B0, 38}, /* 0000 1101 0110 */ - {12, 0x0EB0, 39}, /* 0000 1101 0111 */ - {12, 0x0360, 40}, /* 0000 0110 1100 */ - {12, 0x0B60, 41}, /* 0000 0110 1101 */ - {12, 0x05B0, 42}, /* 0000 1101 1010 */ - {12, 0x0DB0, 43}, /* 0000 1101 1011 */ - {12, 0x02A0, 44}, /* 0000 0101 0100 */ - {12, 0x0AA0, 45}, /* 0000 0101 0101 */ - {12, 0x06A0, 46}, /* 0000 0101 0110 */ - {12, 0x0EA0, 47}, /* 0000 0101 0111 */ - {12, 0x0260, 48}, /* 0000 0110 0100 */ - {12, 0x0A60, 49}, /* 0000 0110 0101 */ - {12, 0x04A0, 50}, /* 0000 0101 0010 */ - {12, 0x0CA0, 51}, /* 0000 0101 0011 */ - {12, 0x0240, 52}, /* 0000 0010 0100 */ - {12, 0x0EC0, 53}, /* 0000 0011 0111 */ - {12, 0x01C0, 54}, /* 0000 0011 1000 */ - {12, 0x0E40, 55}, /* 0000 0010 0111 */ - {12, 0x0140, 56}, /* 0000 0010 1000 */ - {12, 0x01A0, 57}, /* 0000 0101 1000 */ - {12, 0x09A0, 58}, /* 0000 0101 1001 */ - {12, 0x0D40, 59}, /* 0000 0010 1011 */ - {12, 0x0340, 60}, /* 0000 0010 1100 */ - {12, 0x05A0, 61}, /* 0000 0101 1010 */ - {12, 0x0660, 62}, /* 0000 0110 0110 */ - {12, 0x0E60, 63}, /* 0000 0110 0111 */ - {10, 0x03C0, 64}, /* 0000 0011 11 */ - {12, 0x0130, 128}, /* 0000 1100 1000 */ - {12, 0x0930, 192}, /* 0000 1100 1001 */ - {12, 0x0DA0, 256}, /* 0000 0101 1011 */ - {12, 0x0CC0, 320}, /* 0000 0011 0011 */ - {12, 0x02C0, 384}, /* 0000 0011 0100 */ - {12, 0x0AC0, 448}, /* 0000 0011 0101 */ - {13, 0x06C0, 512}, /* 0000 0011 0110 0 */ - {13, 0x16C0, 576}, /* 0000 0011 0110 1 */ - {13, 0x0A40, 640}, /* 0000 0010 0101 0 */ - {13, 0x1A40, 704}, /* 0000 0010 0101 1 */ - {13, 0x0640, 768}, /* 0000 0010 0110 0 */ - {13, 0x1640, 832}, /* 0000 0010 0110 1 */ - {13, 0x09C0, 896}, /* 0000 0011 1001 0 */ - {13, 0x19C0, 960}, /* 0000 0011 1001 1 */ - {13, 0x05C0, 1024}, /* 0000 0011 1010 0 */ - {13, 0x15C0, 1088}, /* 0000 0011 1010 1 */ - {13, 0x0DC0, 1152}, /* 0000 0011 1011 0 */ - {13, 0x1DC0, 1216}, /* 0000 0011 1011 1 */ - {13, 0x0940, 1280}, /* 0000 0010 1001 0 */ - {13, 0x1940, 1344}, /* 0000 0010 1001 1 */ - {13, 0x0540, 1408}, /* 0000 0010 1010 0 */ - {13, 0x1540, 1472}, /* 0000 0010 1010 1 */ - {13, 0x0B40, 1536}, /* 0000 0010 1101 0 */ - {13, 0x1B40, 1600}, /* 0000 0010 1101 1 */ - {13, 0x04C0, 1664}, /* 0000 0011 0010 0 */ - {13, 0x14C0, 1728}, /* 0000 0011 0010 1 */ - {11, 0x0080, 1792}, /* 0000 0001 000 */ - {11, 0x0180, 1856}, /* 0000 0001 100 */ - {11, 0x0580, 1920}, /* 0000 0001 101 */ - {12, 0x0480, 1984}, /* 0000 0001 0010 */ - {12, 0x0C80, 2048}, /* 0000 0001 0011 */ - {12, 0x0280, 2112}, /* 0000 0001 0100 */ - {12, 0x0A80, 2176}, /* 0000 0001 0101 */ - {12, 0x0680, 2240}, /* 0000 0001 0110 */ - {12, 0x0E80, 2304}, /* 0000 0001 0111 */ - {12, 0x0380, 2368}, /* 0000 0001 1100 */ - {12, 0x0B80, 2432}, /* 0000 0001 1101 */ - {12, 0x0780, 2496}, /* 0000 0001 1110 */ - {12, 0x0F80, 2560}, /* 0000 0001 1111 */ -}; - -static const t4_table_entry_t t4_2d_table[128] = -{ - {S_Null, 1, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Pass, 4, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Vert, 6, -2}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Pass, 4, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Vert, 7, -3}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Pass, 4, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Vert, 6, 2}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Pass, 4, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Ext, 7, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Pass, 4, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Vert, 6, -2}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Pass, 4, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Vert, 7, 3}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Pass, 4, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Vert, 6, 2}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0}, - {S_Pass, 4, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, -1}, - {S_Vert, 1, 0}, - {S_Horiz, 3, 0}, - {S_Vert, 1, 0}, - {S_Vert, 3, 1}, - {S_Vert, 1, 0} -}; - -static const t4_table_entry_t t4_1d_white_table[4096] = -{ - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1472}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1216}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 960}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 704}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 11, 1792}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 832}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1600}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1344}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1088}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1536}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1280}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1024}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 768}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 11, 1856}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 896}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1728}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1408}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1152}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1472}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1216}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 960}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 704}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 12, 2112}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 832}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1600}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1344}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1088}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1536}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1280}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1024}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 768}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 12, 2368}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 896}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1728}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1408}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1152}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1472}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1216}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 960}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 704}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 12, 1984}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 832}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1600}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1344}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1088}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1536}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1280}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1024}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 768}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 11, 1920}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 896}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1728}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1408}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1152}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1472}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1216}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 960}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 704}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 12, 2240}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 832}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1600}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1344}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1088}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1536}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1280}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1024}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 768}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 12, 2496}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 896}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1728}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1408}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1152}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_EOL, 12, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1472}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1216}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 960}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 704}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 11, 1792}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 832}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1600}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1344}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1088}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1536}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1280}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1024}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 768}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 11, 1856}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 896}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1728}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1408}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1152}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1472}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1216}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 960}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 704}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 12, 2176}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 832}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1600}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1344}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1088}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1536}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1280}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1024}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 768}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 12, 2432}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 896}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1728}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1408}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1152}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1472}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1216}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 960}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 704}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 12, 2048}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 832}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1600}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1344}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1088}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1536}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1280}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1024}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 768}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 11, 1920}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 896}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1728}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1408}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1152}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1472}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1216}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 960}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 704}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 12, 2304}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 832}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1600}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1344}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1088}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_Null, 1, 0}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 39}, - {S_TermW, 6, 16}, - {S_MakeUpW, 8, 576}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 55}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 45}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 53}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 448}, - {S_TermW, 4, 6}, - {S_TermW, 8, 35}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 51}, - {S_TermW, 6, 15}, - {S_TermW, 8, 63}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1536}, - {S_TermW, 4, 5}, - {S_TermW, 8, 43}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1280}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 29}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 33}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 49}, - {S_TermW, 6, 14}, - {S_TermW, 8, 61}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 47}, - {S_TermW, 4, 3}, - {S_TermW, 8, 59}, - {S_TermW, 4, 5}, - {S_TermW, 8, 41}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1024}, - {S_TermW, 4, 6}, - {S_TermW, 8, 31}, - {S_TermW, 5, 8}, - {S_TermW, 8, 57}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 9, 768}, - {S_TermW, 4, 6}, - {S_TermW, 8, 37}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 320}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_MakeUp, 12, 2560}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 7, 20}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 24}, - {S_TermW, 6, 14}, - {S_TermW, 7, 28}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 23}, - {S_TermW, 4, 3}, - {S_TermW, 7, 27}, - {S_TermW, 4, 5}, - {S_TermW, 8, 40}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 896}, - {S_TermW, 4, 6}, - {S_TermW, 7, 19}, - {S_TermW, 5, 8}, - {S_TermW, 8, 56}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 46}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 8, 54}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 512}, - {S_TermW, 4, 6}, - {S_TermW, 8, 36}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 52}, - {S_TermW, 6, 15}, - {S_TermW, 8, 0}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_MakeUpW, 9, 1728}, - {S_TermW, 4, 5}, - {S_TermW, 8, 44}, - {S_TermW, 6, 17}, - {S_MakeUpW, 9, 1408}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 30}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 6, 12}, - {S_TermW, 5, 9}, - {S_MakeUpW, 6, 1664}, - {S_TermW, 4, 6}, - {S_TermW, 8, 34}, - {S_MakeUpW, 5, 128}, - {S_TermW, 8, 50}, - {S_TermW, 6, 14}, - {S_TermW, 8, 62}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 8, 48}, - {S_TermW, 4, 3}, - {S_TermW, 8, 60}, - {S_TermW, 4, 5}, - {S_TermW, 8, 42}, - {S_TermW, 6, 16}, - {S_MakeUpW, 9, 1152}, - {S_TermW, 4, 6}, - {S_TermW, 8, 32}, - {S_TermW, 5, 8}, - {S_TermW, 8, 58}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 7, 22}, - {S_TermW, 4, 3}, - {S_TermW, 5, 11}, - {S_TermW, 4, 5}, - {S_TermW, 7, 26}, - {S_TermW, 5, 9}, - {S_MakeUpW, 8, 640}, - {S_TermW, 4, 6}, - {S_TermW, 8, 38}, - {S_MakeUpW, 5, 128}, - {S_TermW, 7, 25}, - {S_TermW, 6, 15}, - {S_MakeUpW, 8, 384}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7}, - {S_TermW, 6, 13}, - {S_TermW, 4, 3}, - {S_TermW, 7, 18}, - {S_TermW, 4, 5}, - {S_TermW, 7, 21}, - {S_TermW, 6, 17}, - {S_MakeUpW, 7, 256}, - {S_TermW, 4, 6}, - {S_TermW, 6, 1}, - {S_TermW, 5, 8}, - {S_MakeUpW, 6, 192}, - {S_MakeUpW, 5, 64}, - {S_TermW, 5, 10}, - {S_TermW, 4, 4}, - {S_TermW, 4, 2}, - {S_TermW, 4, 7} -}; - -static const t4_table_entry_t t4_1d_black_table[8192] = -{ - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 18}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 17}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 11, 1792}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 23}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 20}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 25}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 12, 128}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 56}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 30}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 11, 1856}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 57}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 21}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 54}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 52}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 48}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2112}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 44}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 36}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 12, 384}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 28}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 60}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 40}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2368}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 16}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 10, 64}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 18}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 17}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 1984}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 50}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 34}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 1664}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 26}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 1408}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 32}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 11, 1920}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 61}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 42}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 1024}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 768}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 62}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2240}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 46}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 38}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 512}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 19}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 24}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 22}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2496}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 16}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 10, 64}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_EOL, 12, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 18}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 17}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 11, 1792}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 23}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 20}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 25}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 12, 192}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 1280}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 31}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 11, 1856}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 58}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 21}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 896}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 640}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 49}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2176}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 45}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 37}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 12, 448}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 29}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 1536}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 41}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2432}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 16}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 10, 64}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 18}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 17}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2048}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 51}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 35}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 12, 320}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 27}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 59}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 33}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 11, 1920}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 12, 256}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 43}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 1152}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 55}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 63}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2304}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 47}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 39}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 53}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 19}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 24}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 22}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2560}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 16}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 10, 64}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 18}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 17}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 11, 1792}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 23}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 20}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 25}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 12, 128}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 56}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 30}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 11, 1856}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 57}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 21}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 54}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 52}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 48}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2112}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 44}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 36}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 12, 384}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 28}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 60}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 40}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2368}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 16}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 10, 64}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 18}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 17}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 1984}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 50}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 34}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 1728}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 26}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 1472}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 32}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 11, 1920}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 61}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 42}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 1088}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 832}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 62}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2240}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 46}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 38}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 576}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 19}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 24}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 22}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2496}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 16}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 10, 64}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_EOL, 12, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 18}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 17}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 11, 1792}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 23}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 20}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 25}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 12, 192}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 1344}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 31}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 11, 1856}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 58}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 21}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 960}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 704}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 49}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2176}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 45}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 37}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 12, 448}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 29}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 1600}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 41}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2432}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 16}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 10, 64}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 18}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 17}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2048}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 51}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 35}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 12, 320}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 27}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 59}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 33}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 11, 1920}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 12, 256}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 43}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 13, 1216}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 9, 15}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 55}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 63}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2304}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 47}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 39}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 12, 53}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_Null, 1, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 13}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 19}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 24}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 11, 22}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUp, 12, 2560}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 10}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 16}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 10, 0}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_MakeUpB, 10, 64}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 9}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 11}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 8, 14}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 6, 8}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 7, 12}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 6}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2}, - {S_TermB, 5, 7}, - {S_TermB, 2, 3}, - {S_TermB, 3, 1}, - {S_TermB, 2, 2}, - {S_TermB, 4, 5}, - {S_TermB, 2, 3}, - {S_TermB, 3, 4}, - {S_TermB, 2, 2} -}; - -/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/v17rx_constellation_maps.h b/libs/spandsp/src/v17rx_constellation_maps.h deleted file mode 100644 index 6017ea583b..0000000000 --- a/libs/spandsp/src/v17rx_constellation_maps.h +++ /dev/null @@ -1,5516 +0,0 @@ -/* - * SpanDSP - a series of DSP components for telephony - * - * v17rx_constellation_maps.h - ITU V.17 modem receive part. - * Constellation mapping. - * - * Written by Steve Underwood - * - * Copyright (C) 2004 Steve Underwood - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v17rx_constellation_maps.h,v 1.6 2008/07/10 13:34:00 steveu Exp $ - */ - -/* The following table maps the 8 soft-decisions associated with every possible point in the - constellation space. If you look at the constellations carefully, all 4 can be accurately - mapped at 0.5 unit resolution. */ -static const uint8_t constel_maps[4][36][36][8] = -{ - { /* 14,400bps map */ - { - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x66, 0x7f}, - {0x00, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x66, 0x7f}, - {0x08, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x76, 0x7f}, - {0x08, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x76, 0x7f}, - {0x08, 0x41, 0x7a, 0x73, 0x4c, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x7a, 0x73, 0x4c, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x73, 0x44, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x73, 0x44, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x76, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x76, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f} - }, - { - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x66, 0x7f}, - {0x00, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x66, 0x7f}, - {0x08, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x76, 0x7f}, - {0x08, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x76, 0x7f}, - {0x08, 0x41, 0x7a, 0x73, 0x4c, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x7a, 0x73, 0x4c, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x73, 0x44, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x73, 0x44, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x76, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x76, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f} - }, - { - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x66, 0x7f}, - {0x00, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x66, 0x7f}, - {0x08, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x76, 0x7f}, - {0x08, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x76, 0x7f}, - {0x08, 0x41, 0x7a, 0x73, 0x4c, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x7a, 0x73, 0x4c, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x73, 0x44, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x73, 0x44, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x76, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x76, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f} - }, - { - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x63, 0x4c, 0x05, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x66, 0x7f}, - {0x00, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x66, 0x7f}, - {0x08, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x76, 0x7f}, - {0x08, 0x49, 0x7a, 0x73, 0x4c, 0x05, 0x76, 0x7f}, - {0x08, 0x41, 0x7a, 0x73, 0x4c, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x7a, 0x73, 0x4c, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x73, 0x44, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x73, 0x44, 0x0d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x76, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x76, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x0d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f} - }, - { - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x15, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x4c, 0x15, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x63, 0x4c, 0x15, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x63, 0x4c, 0x15, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x73, 0x4c, 0x15, 0x66, 0x7f}, - {0x00, 0x49, 0x7a, 0x73, 0x4c, 0x15, 0x66, 0x7f}, - {0x08, 0x49, 0x7a, 0x73, 0x4c, 0x15, 0x76, 0x7f}, - {0x08, 0x49, 0x7a, 0x73, 0x4c, 0x15, 0x76, 0x7f}, - {0x08, 0x41, 0x7a, 0x73, 0x4c, 0x1d, 0x76, 0x7f}, - {0x08, 0x41, 0x7a, 0x73, 0x4c, 0x1d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x73, 0x44, 0x1d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x73, 0x44, 0x1d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x1d, 0x76, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x1d, 0x76, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x1d, 0x56, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x1d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f} - }, - { - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x15, 0x66, 0x5f}, - {0x00, 0x49, 0x5a, 0x63, 0x6c, 0x15, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x63, 0x4c, 0x15, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x63, 0x4c, 0x15, 0x66, 0x5f}, - {0x00, 0x49, 0x7a, 0x73, 0x4c, 0x15, 0x66, 0x7f}, - {0x00, 0x49, 0x7a, 0x73, 0x4c, 0x15, 0x66, 0x7f}, - {0x08, 0x49, 0x7a, 0x73, 0x4c, 0x15, 0x76, 0x7f}, - {0x08, 0x49, 0x7a, 0x73, 0x4c, 0x15, 0x76, 0x7f}, - {0x08, 0x41, 0x7a, 0x73, 0x4c, 0x1d, 0x76, 0x7f}, - {0x08, 0x41, 0x7a, 0x73, 0x4c, 0x1d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x73, 0x44, 0x1d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x73, 0x44, 0x1d, 0x76, 0x7f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x1d, 0x76, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x1d, 0x76, 0x6f}, - {0x08, 0x41, 0x6a, 0x53, 0x44, 0x1d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x1d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x44, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f} - }, - { - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x10, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x10, 0x49, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x10, 0x49, 0x5a, 0x63, 0x6c, 0x15, 0x66, 0x5f}, - {0x10, 0x49, 0x5a, 0x63, 0x6c, 0x15, 0x66, 0x5f}, - {0x10, 0x49, 0x7a, 0x63, 0x2c, 0x15, 0x66, 0x5f}, - {0x10, 0x49, 0x7a, 0x63, 0x2c, 0x15, 0x66, 0x5f}, - {0x10, 0x49, 0x7a, 0x73, 0x2c, 0x15, 0x66, 0x7f}, - {0x10, 0x49, 0x7a, 0x73, 0x2c, 0x15, 0x66, 0x7f}, - {0x18, 0x49, 0x7a, 0x73, 0x2c, 0x15, 0x76, 0x7f}, - {0x18, 0x49, 0x7a, 0x73, 0x2c, 0x15, 0x76, 0x7f}, - {0x18, 0x41, 0x7a, 0x73, 0x2c, 0x1d, 0x76, 0x7f}, - {0x18, 0x41, 0x7a, 0x73, 0x2c, 0x1d, 0x76, 0x7f}, - {0x18, 0x41, 0x6a, 0x73, 0x24, 0x1d, 0x76, 0x7f}, - {0x18, 0x41, 0x6a, 0x73, 0x24, 0x1d, 0x76, 0x7f}, - {0x18, 0x41, 0x6a, 0x53, 0x24, 0x1d, 0x76, 0x6f}, - {0x18, 0x41, 0x6a, 0x53, 0x24, 0x1d, 0x76, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x24, 0x1d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x24, 0x1d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x24, 0x5d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x24, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f} - }, - { - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x10, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x10, 0x69, 0x5a, 0x63, 0x6c, 0x55, 0x66, 0x5f}, - {0x10, 0x49, 0x5a, 0x63, 0x6c, 0x15, 0x66, 0x5f}, - {0x10, 0x49, 0x5a, 0x63, 0x6c, 0x15, 0x66, 0x5f}, - {0x10, 0x49, 0x7a, 0x63, 0x2c, 0x15, 0x66, 0x5f}, - {0x10, 0x49, 0x7a, 0x63, 0x2c, 0x15, 0x66, 0x5f}, - {0x10, 0x49, 0x7a, 0x73, 0x2c, 0x15, 0x66, 0x7f}, - {0x10, 0x49, 0x7a, 0x73, 0x2c, 0x15, 0x66, 0x7f}, - {0x18, 0x49, 0x7a, 0x73, 0x2c, 0x15, 0x76, 0x7f}, - {0x18, 0x49, 0x7a, 0x73, 0x2c, 0x15, 0x76, 0x7f}, - {0x18, 0x41, 0x7a, 0x73, 0x2c, 0x1d, 0x76, 0x7f}, - {0x18, 0x41, 0x7a, 0x73, 0x2c, 0x1d, 0x76, 0x7f}, - {0x18, 0x41, 0x6a, 0x73, 0x24, 0x1d, 0x76, 0x7f}, - {0x18, 0x41, 0x6a, 0x73, 0x24, 0x1d, 0x76, 0x7f}, - {0x18, 0x41, 0x6a, 0x53, 0x24, 0x1d, 0x76, 0x6f}, - {0x18, 0x41, 0x6a, 0x53, 0x24, 0x1d, 0x76, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x24, 0x1d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x24, 0x1d, 0x56, 0x6f}, - {0x58, 0x41, 0x6a, 0x53, 0x24, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x24, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x53, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x06, 0x4f} - }, - { - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x23, 0x6c, 0x55, 0x66, 0x5f}, - {0x50, 0x69, 0x5a, 0x23, 0x6c, 0x55, 0x66, 0x5f}, - {0x10, 0x69, 0x5a, 0x23, 0x6c, 0x55, 0x66, 0x5f}, - {0x10, 0x69, 0x5a, 0x23, 0x6c, 0x55, 0x66, 0x5f}, - {0x10, 0x29, 0x5a, 0x23, 0x6c, 0x15, 0x66, 0x5f}, - {0x10, 0x29, 0x5a, 0x23, 0x6c, 0x15, 0x66, 0x5f}, - {0x10, 0x29, 0x7a, 0x23, 0x2c, 0x15, 0x66, 0x5f}, - {0x10, 0x29, 0x7a, 0x23, 0x2c, 0x15, 0x66, 0x5f}, - {0x10, 0x29, 0x7a, 0x33, 0x2c, 0x15, 0x66, 0x7f}, - {0x10, 0x29, 0x7a, 0x33, 0x2c, 0x15, 0x66, 0x7f}, - {0x18, 0x29, 0x7a, 0x33, 0x2c, 0x15, 0x76, 0x7f}, - {0x18, 0x29, 0x7a, 0x33, 0x2c, 0x15, 0x76, 0x7f}, - {0x18, 0x21, 0x7a, 0x33, 0x2c, 0x1d, 0x76, 0x7f}, - {0x18, 0x21, 0x7a, 0x33, 0x2c, 0x1d, 0x76, 0x7f}, - {0x18, 0x21, 0x6a, 0x33, 0x24, 0x1d, 0x76, 0x7f}, - {0x18, 0x21, 0x6a, 0x33, 0x24, 0x1d, 0x76, 0x7f}, - {0x18, 0x21, 0x6a, 0x13, 0x24, 0x1d, 0x76, 0x6f}, - {0x18, 0x21, 0x6a, 0x13, 0x24, 0x1d, 0x76, 0x6f}, - {0x58, 0x21, 0x6a, 0x13, 0x24, 0x1d, 0x56, 0x6f}, - {0x58, 0x21, 0x6a, 0x13, 0x24, 0x1d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x13, 0x24, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x13, 0x24, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x13, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x13, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x06, 0x4f} - }, - { - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x23, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x5a, 0x23, 0x6c, 0x55, 0x66, 0x5f}, - {0x10, 0x69, 0x5a, 0x23, 0x6c, 0x55, 0x66, 0x5f}, - {0x10, 0x69, 0x5a, 0x23, 0x6c, 0x55, 0x66, 0x5f}, - {0x10, 0x29, 0x5a, 0x23, 0x6c, 0x15, 0x66, 0x5f}, - {0x10, 0x29, 0x5a, 0x23, 0x6c, 0x15, 0x66, 0x5f}, - {0x10, 0x29, 0x7a, 0x23, 0x2c, 0x15, 0x66, 0x5f}, - {0x10, 0x29, 0x7a, 0x23, 0x2c, 0x15, 0x66, 0x5f}, - {0x10, 0x29, 0x7a, 0x33, 0x2c, 0x15, 0x66, 0x7f}, - {0x10, 0x29, 0x7a, 0x33, 0x2c, 0x15, 0x66, 0x7f}, - {0x18, 0x29, 0x7a, 0x33, 0x2c, 0x15, 0x76, 0x7f}, - {0x18, 0x29, 0x7a, 0x33, 0x2c, 0x15, 0x76, 0x7f}, - {0x18, 0x21, 0x7a, 0x33, 0x2c, 0x1d, 0x76, 0x7f}, - {0x18, 0x21, 0x7a, 0x33, 0x2c, 0x1d, 0x76, 0x7f}, - {0x18, 0x21, 0x6a, 0x33, 0x24, 0x1d, 0x76, 0x7f}, - {0x18, 0x21, 0x6a, 0x33, 0x24, 0x1d, 0x76, 0x7f}, - {0x18, 0x21, 0x6a, 0x13, 0x24, 0x1d, 0x76, 0x6f}, - {0x18, 0x21, 0x6a, 0x13, 0x24, 0x1d, 0x76, 0x6f}, - {0x58, 0x21, 0x6a, 0x13, 0x24, 0x1d, 0x56, 0x6f}, - {0x58, 0x21, 0x6a, 0x13, 0x24, 0x1d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x13, 0x24, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x13, 0x24, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x6a, 0x13, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x13, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x56, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x06, 0x4f} - }, - { - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x1a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x1a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x1a, 0x23, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x1a, 0x23, 0x6c, 0x55, 0x46, 0x5f}, - {0x10, 0x69, 0x1a, 0x23, 0x6c, 0x55, 0x26, 0x5f}, - {0x10, 0x69, 0x1a, 0x23, 0x6c, 0x55, 0x26, 0x5f}, - {0x10, 0x29, 0x1a, 0x23, 0x6c, 0x15, 0x26, 0x5f}, - {0x10, 0x29, 0x1a, 0x23, 0x6c, 0x15, 0x26, 0x5f}, - {0x10, 0x29, 0x3a, 0x23, 0x2c, 0x15, 0x26, 0x5f}, - {0x10, 0x29, 0x3a, 0x23, 0x2c, 0x15, 0x26, 0x5f}, - {0x10, 0x29, 0x3a, 0x33, 0x2c, 0x15, 0x26, 0x7f}, - {0x10, 0x29, 0x3a, 0x33, 0x2c, 0x15, 0x26, 0x7f}, - {0x18, 0x29, 0x3a, 0x33, 0x2c, 0x15, 0x36, 0x7f}, - {0x18, 0x29, 0x3a, 0x33, 0x2c, 0x15, 0x36, 0x7f}, - {0x18, 0x21, 0x3a, 0x33, 0x2c, 0x1d, 0x36, 0x7f}, - {0x18, 0x21, 0x3a, 0x33, 0x2c, 0x1d, 0x36, 0x7f}, - {0x18, 0x21, 0x2a, 0x33, 0x24, 0x1d, 0x36, 0x7f}, - {0x18, 0x21, 0x2a, 0x33, 0x24, 0x1d, 0x36, 0x7f}, - {0x18, 0x21, 0x2a, 0x13, 0x24, 0x1d, 0x36, 0x6f}, - {0x18, 0x21, 0x2a, 0x13, 0x24, 0x1d, 0x36, 0x6f}, - {0x58, 0x21, 0x2a, 0x13, 0x24, 0x1d, 0x16, 0x6f}, - {0x58, 0x21, 0x2a, 0x13, 0x24, 0x1d, 0x16, 0x6f}, - {0x58, 0x61, 0x2a, 0x13, 0x24, 0x5d, 0x16, 0x6f}, - {0x58, 0x61, 0x2a, 0x13, 0x24, 0x5d, 0x16, 0x6f}, - {0x58, 0x61, 0x4a, 0x13, 0x64, 0x5d, 0x16, 0x6f}, - {0x58, 0x61, 0x4a, 0x13, 0x64, 0x5d, 0x16, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x16, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x16, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x06, 0x4f} - }, - { - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x1a, 0x43, 0x6c, 0x55, 0x46, 0x0f}, - {0x50, 0x69, 0x1a, 0x43, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x1a, 0x23, 0x6c, 0x55, 0x46, 0x5f}, - {0x50, 0x69, 0x1a, 0x23, 0x6c, 0x55, 0x46, 0x5f}, - {0x10, 0x69, 0x1a, 0x23, 0x6c, 0x55, 0x26, 0x5f}, - {0x10, 0x69, 0x1a, 0x23, 0x6c, 0x55, 0x26, 0x5f}, - {0x10, 0x29, 0x1a, 0x23, 0x6c, 0x15, 0x26, 0x5f}, - {0x10, 0x29, 0x1a, 0x23, 0x6c, 0x15, 0x26, 0x5f}, - {0x10, 0x29, 0x3a, 0x23, 0x2c, 0x15, 0x26, 0x5f}, - {0x10, 0x29, 0x3a, 0x23, 0x2c, 0x15, 0x26, 0x5f}, - {0x10, 0x29, 0x3a, 0x33, 0x2c, 0x15, 0x26, 0x7f}, - {0x10, 0x29, 0x3a, 0x33, 0x2c, 0x15, 0x26, 0x7f}, - {0x18, 0x29, 0x3a, 0x33, 0x2c, 0x15, 0x36, 0x7f}, - {0x18, 0x29, 0x3a, 0x33, 0x2c, 0x15, 0x36, 0x7f}, - {0x18, 0x21, 0x3a, 0x33, 0x2c, 0x1d, 0x36, 0x7f}, - {0x18, 0x21, 0x3a, 0x33, 0x2c, 0x1d, 0x36, 0x7f}, - {0x18, 0x21, 0x2a, 0x33, 0x24, 0x1d, 0x36, 0x7f}, - {0x18, 0x21, 0x2a, 0x33, 0x24, 0x1d, 0x36, 0x7f}, - {0x18, 0x21, 0x2a, 0x13, 0x24, 0x1d, 0x36, 0x6f}, - {0x18, 0x21, 0x2a, 0x13, 0x24, 0x1d, 0x36, 0x6f}, - {0x58, 0x21, 0x2a, 0x13, 0x24, 0x1d, 0x16, 0x6f}, - {0x58, 0x21, 0x2a, 0x13, 0x24, 0x1d, 0x16, 0x6f}, - {0x58, 0x61, 0x2a, 0x13, 0x24, 0x5d, 0x16, 0x6f}, - {0x58, 0x61, 0x2a, 0x13, 0x24, 0x5d, 0x16, 0x6f}, - {0x58, 0x61, 0x4a, 0x13, 0x64, 0x5d, 0x16, 0x6f}, - {0x58, 0x61, 0x4a, 0x13, 0x64, 0x5d, 0x16, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x16, 0x6f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x16, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x5d, 0x06, 0x4f} - }, - { - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x75, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x75, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x75, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x75, 0x46, 0x0f}, - {0x50, 0x69, 0x1a, 0x43, 0x6c, 0x75, 0x46, 0x0f}, - {0x50, 0x69, 0x1a, 0x43, 0x6c, 0x75, 0x46, 0x0f}, - {0x50, 0x69, 0x1a, 0x23, 0x6c, 0x75, 0x46, 0x1f}, - {0x50, 0x69, 0x1a, 0x23, 0x6c, 0x75, 0x46, 0x1f}, - {0x10, 0x69, 0x1a, 0x23, 0x6c, 0x75, 0x26, 0x1f}, - {0x10, 0x69, 0x1a, 0x23, 0x6c, 0x75, 0x26, 0x1f}, - {0x10, 0x29, 0x1a, 0x23, 0x6c, 0x35, 0x26, 0x1f}, - {0x10, 0x29, 0x1a, 0x23, 0x6c, 0x35, 0x26, 0x1f}, - {0x10, 0x29, 0x3a, 0x23, 0x2c, 0x35, 0x26, 0x1f}, - {0x10, 0x29, 0x3a, 0x23, 0x2c, 0x35, 0x26, 0x1f}, - {0x10, 0x29, 0x3a, 0x33, 0x2c, 0x35, 0x26, 0x3f}, - {0x10, 0x29, 0x3a, 0x33, 0x2c, 0x35, 0x26, 0x3f}, - {0x18, 0x29, 0x3a, 0x33, 0x2c, 0x35, 0x36, 0x3f}, - {0x18, 0x29, 0x3a, 0x33, 0x2c, 0x35, 0x36, 0x3f}, - {0x18, 0x21, 0x3a, 0x33, 0x2c, 0x3d, 0x36, 0x3f}, - {0x18, 0x21, 0x3a, 0x33, 0x2c, 0x3d, 0x36, 0x3f}, - {0x18, 0x21, 0x2a, 0x33, 0x24, 0x3d, 0x36, 0x3f}, - {0x18, 0x21, 0x2a, 0x33, 0x24, 0x3d, 0x36, 0x3f}, - {0x18, 0x21, 0x2a, 0x13, 0x24, 0x3d, 0x36, 0x2f}, - {0x18, 0x21, 0x2a, 0x13, 0x24, 0x3d, 0x36, 0x2f}, - {0x58, 0x21, 0x2a, 0x13, 0x24, 0x3d, 0x16, 0x2f}, - {0x58, 0x21, 0x2a, 0x13, 0x24, 0x3d, 0x16, 0x2f}, - {0x58, 0x61, 0x2a, 0x13, 0x24, 0x7d, 0x16, 0x2f}, - {0x58, 0x61, 0x2a, 0x13, 0x24, 0x7d, 0x16, 0x2f}, - {0x58, 0x61, 0x4a, 0x13, 0x64, 0x7d, 0x16, 0x2f}, - {0x58, 0x61, 0x4a, 0x13, 0x64, 0x7d, 0x16, 0x2f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x7d, 0x16, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x7d, 0x16, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x7d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x7d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x7d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x7d, 0x06, 0x4f} - }, - { - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x75, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x75, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x75, 0x46, 0x0f}, - {0x50, 0x69, 0x0a, 0x43, 0x6c, 0x75, 0x46, 0x0f}, - {0x50, 0x69, 0x1a, 0x43, 0x6c, 0x75, 0x46, 0x0f}, - {0x50, 0x69, 0x1a, 0x43, 0x6c, 0x75, 0x46, 0x0f}, - {0x50, 0x69, 0x1a, 0x23, 0x6c, 0x75, 0x46, 0x1f}, - {0x50, 0x69, 0x1a, 0x23, 0x6c, 0x75, 0x46, 0x1f}, - {0x10, 0x69, 0x1a, 0x23, 0x6c, 0x75, 0x26, 0x1f}, - {0x10, 0x69, 0x1a, 0x23, 0x6c, 0x75, 0x26, 0x1f}, - {0x10, 0x29, 0x1a, 0x23, 0x6c, 0x35, 0x26, 0x1f}, - {0x10, 0x29, 0x1a, 0x23, 0x6c, 0x35, 0x26, 0x1f}, - {0x10, 0x29, 0x3a, 0x23, 0x2c, 0x35, 0x26, 0x1f}, - {0x10, 0x29, 0x3a, 0x23, 0x2c, 0x35, 0x26, 0x1f}, - {0x10, 0x29, 0x3a, 0x33, 0x2c, 0x35, 0x26, 0x3f}, - {0x10, 0x29, 0x3a, 0x33, 0x2c, 0x35, 0x26, 0x3f}, - {0x18, 0x29, 0x3a, 0x33, 0x2c, 0x35, 0x36, 0x3f}, - {0x18, 0x29, 0x3a, 0x33, 0x2c, 0x35, 0x36, 0x3f}, - {0x18, 0x21, 0x3a, 0x33, 0x2c, 0x3d, 0x36, 0x3f}, - {0x18, 0x21, 0x3a, 0x33, 0x2c, 0x3d, 0x36, 0x3f}, - {0x18, 0x21, 0x2a, 0x33, 0x24, 0x3d, 0x36, 0x3f}, - {0x18, 0x21, 0x2a, 0x33, 0x24, 0x3d, 0x36, 0x3f}, - {0x18, 0x21, 0x2a, 0x13, 0x24, 0x3d, 0x36, 0x2f}, - {0x18, 0x21, 0x2a, 0x13, 0x24, 0x3d, 0x36, 0x2f}, - {0x58, 0x21, 0x2a, 0x13, 0x24, 0x3d, 0x16, 0x2f}, - {0x58, 0x21, 0x2a, 0x13, 0x24, 0x3d, 0x16, 0x2f}, - {0x58, 0x61, 0x2a, 0x13, 0x24, 0x7d, 0x16, 0x2f}, - {0x58, 0x61, 0x2a, 0x13, 0x24, 0x7d, 0x16, 0x2f}, - {0x58, 0x61, 0x4a, 0x13, 0x64, 0x7d, 0x16, 0x2f}, - {0x58, 0x61, 0x4a, 0x13, 0x64, 0x7d, 0x16, 0x2f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x7d, 0x16, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x7d, 0x16, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x7d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x7d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x7d, 0x06, 0x4f}, - {0x58, 0x61, 0x4a, 0x03, 0x64, 0x7d, 0x06, 0x4f} - }, - { - {0x70, 0x69, 0x0a, 0x43, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x69, 0x0a, 0x43, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x69, 0x0a, 0x43, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x69, 0x0a, 0x43, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x69, 0x1a, 0x43, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x69, 0x1a, 0x43, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x69, 0x1a, 0x23, 0x7c, 0x75, 0x46, 0x1f}, - {0x70, 0x69, 0x1a, 0x23, 0x7c, 0x75, 0x46, 0x1f}, - {0x30, 0x69, 0x1a, 0x23, 0x7c, 0x75, 0x26, 0x1f}, - {0x30, 0x69, 0x1a, 0x23, 0x7c, 0x75, 0x26, 0x1f}, - {0x30, 0x29, 0x1a, 0x23, 0x7c, 0x35, 0x26, 0x1f}, - {0x30, 0x29, 0x1a, 0x23, 0x7c, 0x35, 0x26, 0x1f}, - {0x30, 0x29, 0x3a, 0x23, 0x3c, 0x35, 0x26, 0x1f}, - {0x30, 0x29, 0x3a, 0x23, 0x3c, 0x35, 0x26, 0x1f}, - {0x30, 0x29, 0x3a, 0x33, 0x3c, 0x35, 0x26, 0x3f}, - {0x30, 0x29, 0x3a, 0x33, 0x3c, 0x35, 0x26, 0x3f}, - {0x38, 0x29, 0x3a, 0x33, 0x3c, 0x35, 0x36, 0x3f}, - {0x38, 0x29, 0x3a, 0x33, 0x3c, 0x35, 0x36, 0x3f}, - {0x38, 0x21, 0x3a, 0x33, 0x3c, 0x3d, 0x36, 0x3f}, - {0x38, 0x21, 0x3a, 0x33, 0x3c, 0x3d, 0x36, 0x3f}, - {0x38, 0x21, 0x2a, 0x33, 0x34, 0x3d, 0x36, 0x3f}, - {0x38, 0x21, 0x2a, 0x33, 0x34, 0x3d, 0x36, 0x3f}, - {0x38, 0x21, 0x2a, 0x13, 0x34, 0x3d, 0x36, 0x2f}, - {0x38, 0x21, 0x2a, 0x13, 0x34, 0x3d, 0x36, 0x2f}, - {0x78, 0x21, 0x2a, 0x13, 0x34, 0x3d, 0x16, 0x2f}, - {0x78, 0x21, 0x2a, 0x13, 0x34, 0x3d, 0x16, 0x2f}, - {0x78, 0x61, 0x2a, 0x13, 0x34, 0x7d, 0x16, 0x2f}, - {0x78, 0x61, 0x2a, 0x13, 0x34, 0x7d, 0x16, 0x2f}, - {0x78, 0x61, 0x4a, 0x13, 0x74, 0x7d, 0x16, 0x2f}, - {0x78, 0x61, 0x4a, 0x13, 0x74, 0x7d, 0x16, 0x2f}, - {0x78, 0x61, 0x4a, 0x03, 0x74, 0x7d, 0x16, 0x4f}, - {0x78, 0x61, 0x4a, 0x03, 0x74, 0x7d, 0x16, 0x4f}, - {0x78, 0x61, 0x4a, 0x03, 0x74, 0x7d, 0x06, 0x4f}, - {0x78, 0x61, 0x4a, 0x03, 0x74, 0x7d, 0x06, 0x4f}, - {0x78, 0x61, 0x4a, 0x03, 0x74, 0x7d, 0x06, 0x4f}, - {0x78, 0x61, 0x4a, 0x03, 0x74, 0x7d, 0x06, 0x4f} - }, - { - {0x70, 0x69, 0x0a, 0x43, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x69, 0x0a, 0x43, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x69, 0x0a, 0x43, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x69, 0x0a, 0x43, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x69, 0x1a, 0x43, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x69, 0x1a, 0x43, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x69, 0x1a, 0x23, 0x7c, 0x75, 0x46, 0x1f}, - {0x70, 0x69, 0x1a, 0x23, 0x7c, 0x75, 0x46, 0x1f}, - {0x30, 0x69, 0x1a, 0x23, 0x7c, 0x75, 0x26, 0x1f}, - {0x30, 0x69, 0x1a, 0x23, 0x7c, 0x75, 0x26, 0x1f}, - {0x30, 0x29, 0x1a, 0x23, 0x7c, 0x35, 0x26, 0x1f}, - {0x30, 0x29, 0x1a, 0x23, 0x7c, 0x35, 0x26, 0x1f}, - {0x30, 0x29, 0x3a, 0x23, 0x3c, 0x35, 0x26, 0x1f}, - {0x30, 0x29, 0x3a, 0x23, 0x3c, 0x35, 0x26, 0x1f}, - {0x30, 0x29, 0x3a, 0x33, 0x3c, 0x35, 0x26, 0x3f}, - {0x30, 0x29, 0x3a, 0x33, 0x3c, 0x35, 0x26, 0x3f}, - {0x38, 0x29, 0x3a, 0x33, 0x3c, 0x35, 0x36, 0x3f}, - {0x38, 0x29, 0x3a, 0x33, 0x3c, 0x35, 0x36, 0x3f}, - {0x38, 0x21, 0x3a, 0x33, 0x3c, 0x3d, 0x36, 0x3f}, - {0x38, 0x21, 0x3a, 0x33, 0x3c, 0x3d, 0x36, 0x3f}, - {0x38, 0x21, 0x2a, 0x33, 0x34, 0x3d, 0x36, 0x3f}, - {0x38, 0x21, 0x2a, 0x33, 0x34, 0x3d, 0x36, 0x3f}, - {0x38, 0x21, 0x2a, 0x13, 0x34, 0x3d, 0x36, 0x2f}, - {0x38, 0x21, 0x2a, 0x13, 0x34, 0x3d, 0x36, 0x2f}, - {0x78, 0x21, 0x2a, 0x13, 0x34, 0x3d, 0x16, 0x2f}, - {0x78, 0x21, 0x2a, 0x13, 0x34, 0x3d, 0x16, 0x2f}, - {0x78, 0x61, 0x2a, 0x13, 0x34, 0x7d, 0x16, 0x2f}, - {0x78, 0x61, 0x2a, 0x13, 0x34, 0x7d, 0x16, 0x2f}, - {0x78, 0x61, 0x4a, 0x13, 0x74, 0x7d, 0x16, 0x2f}, - {0x78, 0x61, 0x4a, 0x13, 0x74, 0x7d, 0x16, 0x2f}, - {0x78, 0x61, 0x4a, 0x03, 0x74, 0x7d, 0x16, 0x4f}, - {0x78, 0x61, 0x4a, 0x03, 0x74, 0x7d, 0x16, 0x4f}, - {0x78, 0x61, 0x4a, 0x03, 0x74, 0x7d, 0x06, 0x4f}, - {0x78, 0x61, 0x4a, 0x03, 0x74, 0x7d, 0x06, 0x4f}, - {0x78, 0x61, 0x4a, 0x03, 0x74, 0x7d, 0x06, 0x4f}, - {0x78, 0x61, 0x4a, 0x03, 0x74, 0x7d, 0x06, 0x4f} - }, - { - {0x70, 0x79, 0x0a, 0x4b, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x79, 0x0a, 0x4b, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x79, 0x0a, 0x4b, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x79, 0x0a, 0x4b, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x79, 0x1a, 0x4b, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x79, 0x1a, 0x4b, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x79, 0x1a, 0x2b, 0x7c, 0x75, 0x46, 0x1f}, - {0x70, 0x79, 0x1a, 0x2b, 0x7c, 0x75, 0x46, 0x1f}, - {0x30, 0x79, 0x1a, 0x2b, 0x7c, 0x75, 0x26, 0x1f}, - {0x30, 0x79, 0x1a, 0x2b, 0x7c, 0x75, 0x26, 0x1f}, - {0x30, 0x39, 0x1a, 0x2b, 0x7c, 0x35, 0x26, 0x1f}, - {0x30, 0x39, 0x1a, 0x2b, 0x7c, 0x35, 0x26, 0x1f}, - {0x30, 0x39, 0x3a, 0x2b, 0x3c, 0x35, 0x26, 0x1f}, - {0x30, 0x39, 0x3a, 0x2b, 0x3c, 0x35, 0x26, 0x1f}, - {0x30, 0x39, 0x3a, 0x3b, 0x3c, 0x35, 0x26, 0x3f}, - {0x30, 0x39, 0x3a, 0x3b, 0x3c, 0x35, 0x26, 0x3f}, - {0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x35, 0x36, 0x3f}, - {0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x35, 0x36, 0x3f}, - {0x38, 0x31, 0x3a, 0x3b, 0x3c, 0x3d, 0x36, 0x3f}, - {0x38, 0x31, 0x3a, 0x3b, 0x3c, 0x3d, 0x36, 0x3f}, - {0x38, 0x31, 0x2a, 0x3b, 0x34, 0x3d, 0x36, 0x3f}, - {0x38, 0x31, 0x2a, 0x3b, 0x34, 0x3d, 0x36, 0x3f}, - {0x38, 0x31, 0x2a, 0x1b, 0x34, 0x3d, 0x36, 0x2f}, - {0x38, 0x31, 0x2a, 0x1b, 0x34, 0x3d, 0x36, 0x2f}, - {0x78, 0x31, 0x2a, 0x1b, 0x34, 0x3d, 0x16, 0x2f}, - {0x78, 0x31, 0x2a, 0x1b, 0x34, 0x3d, 0x16, 0x2f}, - {0x78, 0x71, 0x2a, 0x1b, 0x34, 0x7d, 0x16, 0x2f}, - {0x78, 0x71, 0x2a, 0x1b, 0x34, 0x7d, 0x16, 0x2f}, - {0x78, 0x71, 0x4a, 0x1b, 0x74, 0x7d, 0x16, 0x2f}, - {0x78, 0x71, 0x4a, 0x1b, 0x74, 0x7d, 0x16, 0x2f}, - {0x78, 0x71, 0x4a, 0x0b, 0x74, 0x7d, 0x16, 0x4f}, - {0x78, 0x71, 0x4a, 0x0b, 0x74, 0x7d, 0x16, 0x4f}, - {0x78, 0x71, 0x4a, 0x0b, 0x74, 0x7d, 0x06, 0x4f}, - {0x78, 0x71, 0x4a, 0x0b, 0x74, 0x7d, 0x06, 0x4f}, - {0x78, 0x71, 0x4a, 0x0b, 0x74, 0x7d, 0x06, 0x4f}, - {0x78, 0x71, 0x4a, 0x0b, 0x74, 0x7d, 0x06, 0x4f} - }, - { - {0x70, 0x79, 0x0a, 0x4b, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x79, 0x0a, 0x4b, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x79, 0x0a, 0x4b, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x79, 0x0a, 0x4b, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x79, 0x1a, 0x4b, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x79, 0x1a, 0x4b, 0x7c, 0x75, 0x46, 0x0f}, - {0x70, 0x79, 0x1a, 0x2b, 0x7c, 0x75, 0x46, 0x1f}, - {0x70, 0x79, 0x1a, 0x2b, 0x7c, 0x75, 0x46, 0x1f}, - {0x30, 0x79, 0x1a, 0x2b, 0x7c, 0x75, 0x26, 0x1f}, - {0x30, 0x79, 0x1a, 0x2b, 0x7c, 0x75, 0x26, 0x1f}, - {0x30, 0x39, 0x1a, 0x2b, 0x7c, 0x35, 0x26, 0x1f}, - {0x30, 0x39, 0x1a, 0x2b, 0x7c, 0x35, 0x26, 0x1f}, - {0x30, 0x39, 0x3a, 0x2b, 0x3c, 0x35, 0x26, 0x1f}, - {0x30, 0x39, 0x3a, 0x2b, 0x3c, 0x35, 0x26, 0x1f}, - {0x30, 0x39, 0x3a, 0x3b, 0x3c, 0x35, 0x26, 0x3f}, - {0x30, 0x39, 0x3a, 0x3b, 0x3c, 0x35, 0x26, 0x3f}, - {0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x35, 0x36, 0x3f}, - {0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x35, 0x36, 0x3f}, - {0x38, 0x31, 0x3a, 0x3b, 0x3c, 0x3d, 0x36, 0x3f}, - {0x38, 0x31, 0x3a, 0x3b, 0x3c, 0x3d, 0x36, 0x3f}, - {0x38, 0x31, 0x2a, 0x3b, 0x34, 0x3d, 0x36, 0x3f}, - {0x38, 0x31, 0x2a, 0x3b, 0x34, 0x3d, 0x36, 0x3f}, - {0x38, 0x31, 0x2a, 0x1b, 0x34, 0x3d, 0x36, 0x2f}, - {0x38, 0x31, 0x2a, 0x1b, 0x34, 0x3d, 0x36, 0x2f}, - {0x78, 0x31, 0x2a, 0x1b, 0x34, 0x3d, 0x16, 0x2f}, - {0x78, 0x31, 0x2a, 0x1b, 0x34, 0x3d, 0x16, 0x2f}, - {0x78, 0x71, 0x2a, 0x1b, 0x34, 0x7d, 0x16, 0x2f}, - {0x78, 0x71, 0x2a, 0x1b, 0x34, 0x7d, 0x16, 0x2f}, - {0x78, 0x71, 0x4a, 0x1b, 0x74, 0x7d, 0x16, 0x2f}, - {0x78, 0x71, 0x4a, 0x1b, 0x74, 0x7d, 0x16, 0x2f}, - {0x78, 0x71, 0x4a, 0x0b, 0x74, 0x7d, 0x16, 0x4f}, - {0x78, 0x71, 0x4a, 0x0b, 0x74, 0x7d, 0x16, 0x4f}, - {0x78, 0x71, 0x4a, 0x0b, 0x74, 0x7d, 0x06, 0x4f}, - {0x78, 0x71, 0x4a, 0x0b, 0x74, 0x7d, 0x06, 0x4f}, - {0x78, 0x71, 0x4a, 0x0b, 0x74, 0x7d, 0x06, 0x4f}, - {0x78, 0x71, 0x4a, 0x0b, 0x74, 0x7d, 0x06, 0x4f} - }, - { - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x75, 0x4e, 0x0f}, - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x75, 0x4e, 0x0f}, - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x75, 0x4e, 0x0f}, - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x75, 0x4e, 0x0f}, - {0x70, 0x79, 0x12, 0x4b, 0x7c, 0x75, 0x4e, 0x0f}, - {0x70, 0x79, 0x12, 0x4b, 0x7c, 0x75, 0x4e, 0x0f}, - {0x70, 0x79, 0x12, 0x2b, 0x7c, 0x75, 0x4e, 0x1f}, - {0x70, 0x79, 0x12, 0x2b, 0x7c, 0x75, 0x4e, 0x1f}, - {0x30, 0x79, 0x12, 0x2b, 0x7c, 0x75, 0x2e, 0x1f}, - {0x30, 0x79, 0x12, 0x2b, 0x7c, 0x75, 0x2e, 0x1f}, - {0x30, 0x39, 0x12, 0x2b, 0x7c, 0x35, 0x2e, 0x1f}, - {0x30, 0x39, 0x12, 0x2b, 0x7c, 0x35, 0x2e, 0x1f}, - {0x30, 0x39, 0x32, 0x2b, 0x3c, 0x35, 0x2e, 0x1f}, - {0x30, 0x39, 0x32, 0x2b, 0x3c, 0x35, 0x2e, 0x1f}, - {0x30, 0x39, 0x32, 0x3b, 0x3c, 0x35, 0x2e, 0x3f}, - {0x30, 0x39, 0x32, 0x3b, 0x3c, 0x35, 0x2e, 0x3f}, - {0x38, 0x39, 0x32, 0x3b, 0x3c, 0x35, 0x3e, 0x3f}, - {0x38, 0x39, 0x32, 0x3b, 0x3c, 0x35, 0x3e, 0x3f}, - {0x38, 0x31, 0x32, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f}, - {0x38, 0x31, 0x32, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f}, - {0x38, 0x31, 0x22, 0x3b, 0x34, 0x3d, 0x3e, 0x3f}, - {0x38, 0x31, 0x22, 0x3b, 0x34, 0x3d, 0x3e, 0x3f}, - {0x38, 0x31, 0x22, 0x1b, 0x34, 0x3d, 0x3e, 0x2f}, - {0x38, 0x31, 0x22, 0x1b, 0x34, 0x3d, 0x3e, 0x2f}, - {0x78, 0x31, 0x22, 0x1b, 0x34, 0x3d, 0x1e, 0x2f}, - {0x78, 0x31, 0x22, 0x1b, 0x34, 0x3d, 0x1e, 0x2f}, - {0x78, 0x71, 0x22, 0x1b, 0x34, 0x7d, 0x1e, 0x2f}, - {0x78, 0x71, 0x22, 0x1b, 0x34, 0x7d, 0x1e, 0x2f}, - {0x78, 0x71, 0x42, 0x1b, 0x74, 0x7d, 0x1e, 0x2f}, - {0x78, 0x71, 0x42, 0x1b, 0x74, 0x7d, 0x1e, 0x2f}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x7d, 0x1e, 0x4f}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x7d, 0x1e, 0x4f}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x7d, 0x0e, 0x4f}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x7d, 0x0e, 0x4f}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x7d, 0x0e, 0x4f}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x7d, 0x0e, 0x4f} - }, - { - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x75, 0x4e, 0x0f}, - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x75, 0x4e, 0x0f}, - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x75, 0x4e, 0x0f}, - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x75, 0x4e, 0x0f}, - {0x70, 0x79, 0x12, 0x4b, 0x7c, 0x75, 0x4e, 0x0f}, - {0x70, 0x79, 0x12, 0x4b, 0x7c, 0x75, 0x4e, 0x0f}, - {0x70, 0x79, 0x12, 0x2b, 0x7c, 0x75, 0x4e, 0x1f}, - {0x70, 0x79, 0x12, 0x2b, 0x7c, 0x75, 0x4e, 0x1f}, - {0x30, 0x79, 0x12, 0x2b, 0x7c, 0x75, 0x2e, 0x1f}, - {0x30, 0x79, 0x12, 0x2b, 0x7c, 0x75, 0x2e, 0x1f}, - {0x30, 0x39, 0x12, 0x2b, 0x7c, 0x35, 0x2e, 0x1f}, - {0x30, 0x39, 0x12, 0x2b, 0x7c, 0x35, 0x2e, 0x1f}, - {0x30, 0x39, 0x32, 0x2b, 0x3c, 0x35, 0x2e, 0x1f}, - {0x30, 0x39, 0x32, 0x2b, 0x3c, 0x35, 0x2e, 0x1f}, - {0x30, 0x39, 0x32, 0x3b, 0x3c, 0x35, 0x2e, 0x3f}, - {0x30, 0x39, 0x32, 0x3b, 0x3c, 0x35, 0x2e, 0x3f}, - {0x38, 0x39, 0x32, 0x3b, 0x3c, 0x35, 0x3e, 0x3f}, - {0x38, 0x39, 0x32, 0x3b, 0x3c, 0x35, 0x3e, 0x3f}, - {0x38, 0x31, 0x32, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f}, - {0x38, 0x31, 0x32, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f}, - {0x38, 0x31, 0x22, 0x3b, 0x34, 0x3d, 0x3e, 0x3f}, - {0x38, 0x31, 0x22, 0x3b, 0x34, 0x3d, 0x3e, 0x3f}, - {0x38, 0x31, 0x22, 0x1b, 0x34, 0x3d, 0x3e, 0x2f}, - {0x38, 0x31, 0x22, 0x1b, 0x34, 0x3d, 0x3e, 0x2f}, - {0x78, 0x31, 0x22, 0x1b, 0x34, 0x3d, 0x1e, 0x2f}, - {0x78, 0x31, 0x22, 0x1b, 0x34, 0x3d, 0x1e, 0x2f}, - {0x78, 0x71, 0x22, 0x1b, 0x34, 0x7d, 0x1e, 0x2f}, - {0x78, 0x71, 0x22, 0x1b, 0x34, 0x7d, 0x1e, 0x2f}, - {0x78, 0x71, 0x42, 0x1b, 0x74, 0x7d, 0x1e, 0x2f}, - {0x78, 0x71, 0x42, 0x1b, 0x74, 0x7d, 0x1e, 0x2f}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x7d, 0x1e, 0x4f}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x7d, 0x1e, 0x4f}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x7d, 0x0e, 0x4f}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x7d, 0x0e, 0x4f}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x7d, 0x0e, 0x4f}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x7d, 0x0e, 0x4f} - }, - { - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x65, 0x4e, 0x07}, - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x65, 0x4e, 0x07}, - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x65, 0x4e, 0x07}, - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x65, 0x4e, 0x07}, - {0x70, 0x79, 0x12, 0x4b, 0x7c, 0x65, 0x4e, 0x07}, - {0x70, 0x79, 0x12, 0x4b, 0x7c, 0x65, 0x4e, 0x07}, - {0x70, 0x79, 0x12, 0x2b, 0x7c, 0x65, 0x4e, 0x17}, - {0x70, 0x79, 0x12, 0x2b, 0x7c, 0x65, 0x4e, 0x17}, - {0x30, 0x79, 0x12, 0x2b, 0x7c, 0x65, 0x2e, 0x17}, - {0x30, 0x79, 0x12, 0x2b, 0x7c, 0x65, 0x2e, 0x17}, - {0x30, 0x39, 0x12, 0x2b, 0x7c, 0x25, 0x2e, 0x17}, - {0x30, 0x39, 0x12, 0x2b, 0x7c, 0x25, 0x2e, 0x17}, - {0x30, 0x39, 0x32, 0x2b, 0x3c, 0x25, 0x2e, 0x17}, - {0x30, 0x39, 0x32, 0x2b, 0x3c, 0x25, 0x2e, 0x17}, - {0x30, 0x39, 0x32, 0x3b, 0x3c, 0x25, 0x2e, 0x37}, - {0x30, 0x39, 0x32, 0x3b, 0x3c, 0x25, 0x2e, 0x37}, - {0x38, 0x39, 0x32, 0x3b, 0x3c, 0x25, 0x3e, 0x37}, - {0x38, 0x39, 0x32, 0x3b, 0x3c, 0x25, 0x3e, 0x37}, - {0x38, 0x31, 0x32, 0x3b, 0x3c, 0x2d, 0x3e, 0x37}, - {0x38, 0x31, 0x32, 0x3b, 0x3c, 0x2d, 0x3e, 0x37}, - {0x38, 0x31, 0x22, 0x3b, 0x34, 0x2d, 0x3e, 0x37}, - {0x38, 0x31, 0x22, 0x3b, 0x34, 0x2d, 0x3e, 0x37}, - {0x38, 0x31, 0x22, 0x1b, 0x34, 0x2d, 0x3e, 0x27}, - {0x38, 0x31, 0x22, 0x1b, 0x34, 0x2d, 0x3e, 0x27}, - {0x78, 0x31, 0x22, 0x1b, 0x34, 0x2d, 0x1e, 0x27}, - {0x78, 0x31, 0x22, 0x1b, 0x34, 0x2d, 0x1e, 0x27}, - {0x78, 0x71, 0x22, 0x1b, 0x34, 0x6d, 0x1e, 0x27}, - {0x78, 0x71, 0x22, 0x1b, 0x34, 0x6d, 0x1e, 0x27}, - {0x78, 0x71, 0x42, 0x1b, 0x74, 0x6d, 0x1e, 0x27}, - {0x78, 0x71, 0x42, 0x1b, 0x74, 0x6d, 0x1e, 0x27}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x6d, 0x1e, 0x47}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x6d, 0x1e, 0x47}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x6d, 0x0e, 0x47}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x6d, 0x0e, 0x47}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x6d, 0x0e, 0x47}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x6d, 0x0e, 0x47} - }, - { - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x65, 0x4e, 0x07}, - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x65, 0x4e, 0x07}, - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x65, 0x4e, 0x07}, - {0x70, 0x79, 0x02, 0x4b, 0x7c, 0x65, 0x4e, 0x07}, - {0x70, 0x79, 0x12, 0x4b, 0x7c, 0x65, 0x4e, 0x07}, - {0x70, 0x79, 0x12, 0x4b, 0x7c, 0x65, 0x4e, 0x07}, - {0x70, 0x79, 0x12, 0x2b, 0x7c, 0x65, 0x4e, 0x17}, - {0x70, 0x79, 0x12, 0x2b, 0x7c, 0x65, 0x4e, 0x17}, - {0x30, 0x79, 0x12, 0x2b, 0x7c, 0x65, 0x2e, 0x17}, - {0x30, 0x79, 0x12, 0x2b, 0x7c, 0x65, 0x2e, 0x17}, - {0x30, 0x39, 0x12, 0x2b, 0x7c, 0x25, 0x2e, 0x17}, - {0x30, 0x39, 0x12, 0x2b, 0x7c, 0x25, 0x2e, 0x17}, - {0x30, 0x39, 0x32, 0x2b, 0x3c, 0x25, 0x2e, 0x17}, - {0x30, 0x39, 0x32, 0x2b, 0x3c, 0x25, 0x2e, 0x17}, - {0x30, 0x39, 0x32, 0x3b, 0x3c, 0x25, 0x2e, 0x37}, - {0x30, 0x39, 0x32, 0x3b, 0x3c, 0x25, 0x2e, 0x37}, - {0x38, 0x39, 0x32, 0x3b, 0x3c, 0x25, 0x3e, 0x37}, - {0x38, 0x39, 0x32, 0x3b, 0x3c, 0x25, 0x3e, 0x37}, - {0x38, 0x31, 0x32, 0x3b, 0x3c, 0x2d, 0x3e, 0x37}, - {0x38, 0x31, 0x32, 0x3b, 0x3c, 0x2d, 0x3e, 0x37}, - {0x38, 0x31, 0x22, 0x3b, 0x34, 0x2d, 0x3e, 0x37}, - {0x38, 0x31, 0x22, 0x3b, 0x34, 0x2d, 0x3e, 0x37}, - {0x38, 0x31, 0x22, 0x1b, 0x34, 0x2d, 0x3e, 0x27}, - {0x38, 0x31, 0x22, 0x1b, 0x34, 0x2d, 0x3e, 0x27}, - {0x78, 0x31, 0x22, 0x1b, 0x34, 0x2d, 0x1e, 0x27}, - {0x78, 0x31, 0x22, 0x1b, 0x34, 0x2d, 0x1e, 0x27}, - {0x78, 0x71, 0x22, 0x1b, 0x34, 0x6d, 0x1e, 0x27}, - {0x78, 0x71, 0x22, 0x1b, 0x34, 0x6d, 0x1e, 0x27}, - {0x78, 0x71, 0x42, 0x1b, 0x74, 0x6d, 0x1e, 0x27}, - {0x78, 0x71, 0x42, 0x1b, 0x74, 0x6d, 0x1e, 0x27}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x6d, 0x1e, 0x47}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x6d, 0x1e, 0x47}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x6d, 0x0e, 0x47}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x6d, 0x0e, 0x47}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x6d, 0x0e, 0x47}, - {0x78, 0x71, 0x42, 0x0b, 0x74, 0x6d, 0x0e, 0x47} - }, - { - {0x60, 0x79, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x79, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x79, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x79, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x79, 0x12, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x79, 0x12, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x79, 0x12, 0x2b, 0x5c, 0x65, 0x4e, 0x17}, - {0x60, 0x79, 0x12, 0x2b, 0x5c, 0x65, 0x4e, 0x17}, - {0x20, 0x79, 0x12, 0x2b, 0x5c, 0x65, 0x2e, 0x17}, - {0x20, 0x79, 0x12, 0x2b, 0x5c, 0x65, 0x2e, 0x17}, - {0x20, 0x39, 0x12, 0x2b, 0x5c, 0x25, 0x2e, 0x17}, - {0x20, 0x39, 0x12, 0x2b, 0x5c, 0x25, 0x2e, 0x17}, - {0x20, 0x39, 0x32, 0x2b, 0x1c, 0x25, 0x2e, 0x17}, - {0x20, 0x39, 0x32, 0x2b, 0x1c, 0x25, 0x2e, 0x17}, - {0x20, 0x39, 0x32, 0x3b, 0x1c, 0x25, 0x2e, 0x37}, - {0x20, 0x39, 0x32, 0x3b, 0x1c, 0x25, 0x2e, 0x37}, - {0x28, 0x39, 0x32, 0x3b, 0x1c, 0x25, 0x3e, 0x37}, - {0x28, 0x39, 0x32, 0x3b, 0x1c, 0x25, 0x3e, 0x37}, - {0x28, 0x31, 0x32, 0x3b, 0x1c, 0x2d, 0x3e, 0x37}, - {0x28, 0x31, 0x32, 0x3b, 0x1c, 0x2d, 0x3e, 0x37}, - {0x28, 0x31, 0x22, 0x3b, 0x14, 0x2d, 0x3e, 0x37}, - {0x28, 0x31, 0x22, 0x3b, 0x14, 0x2d, 0x3e, 0x37}, - {0x28, 0x31, 0x22, 0x1b, 0x14, 0x2d, 0x3e, 0x27}, - {0x28, 0x31, 0x22, 0x1b, 0x14, 0x2d, 0x3e, 0x27}, - {0x68, 0x31, 0x22, 0x1b, 0x14, 0x2d, 0x1e, 0x27}, - {0x68, 0x31, 0x22, 0x1b, 0x14, 0x2d, 0x1e, 0x27}, - {0x68, 0x71, 0x22, 0x1b, 0x14, 0x6d, 0x1e, 0x27}, - {0x68, 0x71, 0x22, 0x1b, 0x14, 0x6d, 0x1e, 0x27}, - {0x68, 0x71, 0x42, 0x1b, 0x54, 0x6d, 0x1e, 0x27}, - {0x68, 0x71, 0x42, 0x1b, 0x54, 0x6d, 0x1e, 0x27}, - {0x68, 0x71, 0x42, 0x0b, 0x54, 0x6d, 0x1e, 0x47}, - {0x68, 0x71, 0x42, 0x0b, 0x54, 0x6d, 0x1e, 0x47}, - {0x68, 0x71, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x71, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x71, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x71, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47} - }, - { - {0x60, 0x79, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x79, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x79, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x79, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x79, 0x12, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x79, 0x12, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x79, 0x12, 0x2b, 0x5c, 0x65, 0x4e, 0x17}, - {0x60, 0x79, 0x12, 0x2b, 0x5c, 0x65, 0x4e, 0x17}, - {0x20, 0x79, 0x12, 0x2b, 0x5c, 0x65, 0x2e, 0x17}, - {0x20, 0x79, 0x12, 0x2b, 0x5c, 0x65, 0x2e, 0x17}, - {0x20, 0x39, 0x12, 0x2b, 0x5c, 0x25, 0x2e, 0x17}, - {0x20, 0x39, 0x12, 0x2b, 0x5c, 0x25, 0x2e, 0x17}, - {0x20, 0x39, 0x32, 0x2b, 0x1c, 0x25, 0x2e, 0x17}, - {0x20, 0x39, 0x32, 0x2b, 0x1c, 0x25, 0x2e, 0x17}, - {0x20, 0x39, 0x32, 0x3b, 0x1c, 0x25, 0x2e, 0x37}, - {0x20, 0x39, 0x32, 0x3b, 0x1c, 0x25, 0x2e, 0x37}, - {0x28, 0x39, 0x32, 0x3b, 0x1c, 0x25, 0x3e, 0x37}, - {0x28, 0x39, 0x32, 0x3b, 0x1c, 0x25, 0x3e, 0x37}, - {0x28, 0x31, 0x32, 0x3b, 0x1c, 0x2d, 0x3e, 0x37}, - {0x28, 0x31, 0x32, 0x3b, 0x1c, 0x2d, 0x3e, 0x37}, - {0x28, 0x31, 0x22, 0x3b, 0x14, 0x2d, 0x3e, 0x37}, - {0x28, 0x31, 0x22, 0x3b, 0x14, 0x2d, 0x3e, 0x37}, - {0x28, 0x31, 0x22, 0x1b, 0x14, 0x2d, 0x3e, 0x27}, - {0x28, 0x31, 0x22, 0x1b, 0x14, 0x2d, 0x3e, 0x27}, - {0x68, 0x31, 0x22, 0x1b, 0x14, 0x2d, 0x1e, 0x27}, - {0x68, 0x31, 0x22, 0x1b, 0x14, 0x2d, 0x1e, 0x27}, - {0x68, 0x71, 0x22, 0x1b, 0x14, 0x6d, 0x1e, 0x27}, - {0x68, 0x71, 0x22, 0x1b, 0x14, 0x6d, 0x1e, 0x27}, - {0x68, 0x71, 0x42, 0x1b, 0x54, 0x6d, 0x1e, 0x27}, - {0x68, 0x71, 0x42, 0x1b, 0x54, 0x6d, 0x1e, 0x27}, - {0x68, 0x71, 0x42, 0x0b, 0x54, 0x6d, 0x1e, 0x47}, - {0x68, 0x71, 0x42, 0x0b, 0x54, 0x6d, 0x1e, 0x47}, - {0x68, 0x71, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x71, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x71, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x71, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47} - }, - { - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x12, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x12, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x12, 0x6b, 0x5c, 0x65, 0x4e, 0x17}, - {0x60, 0x59, 0x12, 0x6b, 0x5c, 0x65, 0x4e, 0x17}, - {0x20, 0x59, 0x12, 0x6b, 0x5c, 0x65, 0x2e, 0x17}, - {0x20, 0x59, 0x12, 0x6b, 0x5c, 0x65, 0x2e, 0x17}, - {0x20, 0x19, 0x12, 0x6b, 0x5c, 0x25, 0x2e, 0x17}, - {0x20, 0x19, 0x12, 0x6b, 0x5c, 0x25, 0x2e, 0x17}, - {0x20, 0x19, 0x32, 0x6b, 0x1c, 0x25, 0x2e, 0x17}, - {0x20, 0x19, 0x32, 0x6b, 0x1c, 0x25, 0x2e, 0x17}, - {0x20, 0x19, 0x32, 0x7b, 0x1c, 0x25, 0x2e, 0x37}, - {0x20, 0x19, 0x32, 0x7b, 0x1c, 0x25, 0x2e, 0x37}, - {0x28, 0x19, 0x32, 0x7b, 0x1c, 0x25, 0x3e, 0x37}, - {0x28, 0x19, 0x32, 0x7b, 0x1c, 0x25, 0x3e, 0x37}, - {0x28, 0x11, 0x32, 0x7b, 0x1c, 0x2d, 0x3e, 0x37}, - {0x28, 0x11, 0x32, 0x7b, 0x1c, 0x2d, 0x3e, 0x37}, - {0x28, 0x11, 0x22, 0x7b, 0x14, 0x2d, 0x3e, 0x37}, - {0x28, 0x11, 0x22, 0x7b, 0x14, 0x2d, 0x3e, 0x37}, - {0x28, 0x11, 0x22, 0x5b, 0x14, 0x2d, 0x3e, 0x27}, - {0x28, 0x11, 0x22, 0x5b, 0x14, 0x2d, 0x3e, 0x27}, - {0x68, 0x11, 0x22, 0x5b, 0x14, 0x2d, 0x1e, 0x27}, - {0x68, 0x11, 0x22, 0x5b, 0x14, 0x2d, 0x1e, 0x27}, - {0x68, 0x51, 0x22, 0x5b, 0x14, 0x6d, 0x1e, 0x27}, - {0x68, 0x51, 0x22, 0x5b, 0x14, 0x6d, 0x1e, 0x27}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x1e, 0x27}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x1e, 0x27}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x1e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x1e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47} - }, - { - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x12, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x12, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x12, 0x6b, 0x5c, 0x65, 0x4e, 0x17}, - {0x60, 0x59, 0x12, 0x6b, 0x5c, 0x65, 0x4e, 0x17}, - {0x20, 0x59, 0x12, 0x6b, 0x5c, 0x65, 0x2e, 0x17}, - {0x20, 0x59, 0x12, 0x6b, 0x5c, 0x65, 0x2e, 0x17}, - {0x20, 0x19, 0x12, 0x6b, 0x5c, 0x25, 0x2e, 0x17}, - {0x20, 0x19, 0x12, 0x6b, 0x5c, 0x25, 0x2e, 0x17}, - {0x20, 0x19, 0x32, 0x6b, 0x1c, 0x25, 0x2e, 0x17}, - {0x20, 0x19, 0x32, 0x6b, 0x1c, 0x25, 0x2e, 0x17}, - {0x20, 0x19, 0x32, 0x7b, 0x1c, 0x25, 0x2e, 0x37}, - {0x20, 0x19, 0x32, 0x7b, 0x1c, 0x25, 0x2e, 0x37}, - {0x28, 0x19, 0x32, 0x7b, 0x1c, 0x25, 0x3e, 0x37}, - {0x28, 0x19, 0x32, 0x7b, 0x1c, 0x25, 0x3e, 0x37}, - {0x28, 0x11, 0x32, 0x7b, 0x1c, 0x2d, 0x3e, 0x37}, - {0x28, 0x11, 0x32, 0x7b, 0x1c, 0x2d, 0x3e, 0x37}, - {0x28, 0x11, 0x22, 0x7b, 0x14, 0x2d, 0x3e, 0x37}, - {0x28, 0x11, 0x22, 0x7b, 0x14, 0x2d, 0x3e, 0x37}, - {0x28, 0x11, 0x22, 0x5b, 0x14, 0x2d, 0x3e, 0x27}, - {0x28, 0x11, 0x22, 0x5b, 0x14, 0x2d, 0x3e, 0x27}, - {0x68, 0x11, 0x22, 0x5b, 0x14, 0x2d, 0x1e, 0x27}, - {0x68, 0x11, 0x22, 0x5b, 0x14, 0x2d, 0x1e, 0x27}, - {0x68, 0x51, 0x22, 0x5b, 0x14, 0x6d, 0x1e, 0x27}, - {0x68, 0x51, 0x22, 0x5b, 0x14, 0x6d, 0x1e, 0x27}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x1e, 0x27}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x1e, 0x27}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x1e, 0x47}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x1e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47} - }, - { - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x17}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x17}, - {0x20, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x17}, - {0x20, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x17}, - {0x20, 0x19, 0x52, 0x6b, 0x5c, 0x25, 0x6e, 0x17}, - {0x20, 0x19, 0x52, 0x6b, 0x5c, 0x25, 0x6e, 0x17}, - {0x20, 0x19, 0x72, 0x6b, 0x1c, 0x25, 0x6e, 0x17}, - {0x20, 0x19, 0x72, 0x6b, 0x1c, 0x25, 0x6e, 0x17}, - {0x20, 0x19, 0x72, 0x7b, 0x1c, 0x25, 0x6e, 0x37}, - {0x20, 0x19, 0x72, 0x7b, 0x1c, 0x25, 0x6e, 0x37}, - {0x28, 0x19, 0x72, 0x7b, 0x1c, 0x25, 0x7e, 0x37}, - {0x28, 0x19, 0x72, 0x7b, 0x1c, 0x25, 0x7e, 0x37}, - {0x28, 0x11, 0x72, 0x7b, 0x1c, 0x2d, 0x7e, 0x37}, - {0x28, 0x11, 0x72, 0x7b, 0x1c, 0x2d, 0x7e, 0x37}, - {0x28, 0x11, 0x62, 0x7b, 0x14, 0x2d, 0x7e, 0x37}, - {0x28, 0x11, 0x62, 0x7b, 0x14, 0x2d, 0x7e, 0x37}, - {0x28, 0x11, 0x62, 0x5b, 0x14, 0x2d, 0x7e, 0x27}, - {0x28, 0x11, 0x62, 0x5b, 0x14, 0x2d, 0x7e, 0x27}, - {0x68, 0x11, 0x62, 0x5b, 0x14, 0x2d, 0x5e, 0x27}, - {0x68, 0x11, 0x62, 0x5b, 0x14, 0x2d, 0x5e, 0x27}, - {0x68, 0x51, 0x62, 0x5b, 0x14, 0x6d, 0x5e, 0x27}, - {0x68, 0x51, 0x62, 0x5b, 0x14, 0x6d, 0x5e, 0x27}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x27}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x27}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47} - }, - { - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x17}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x17}, - {0x20, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x17}, - {0x20, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x17}, - {0x20, 0x19, 0x52, 0x6b, 0x5c, 0x25, 0x6e, 0x17}, - {0x20, 0x19, 0x52, 0x6b, 0x5c, 0x25, 0x6e, 0x17}, - {0x20, 0x19, 0x72, 0x6b, 0x1c, 0x25, 0x6e, 0x17}, - {0x20, 0x19, 0x72, 0x6b, 0x1c, 0x25, 0x6e, 0x17}, - {0x20, 0x19, 0x72, 0x7b, 0x1c, 0x25, 0x6e, 0x37}, - {0x20, 0x19, 0x72, 0x7b, 0x1c, 0x25, 0x6e, 0x37}, - {0x28, 0x19, 0x72, 0x7b, 0x1c, 0x25, 0x7e, 0x37}, - {0x28, 0x19, 0x72, 0x7b, 0x1c, 0x25, 0x7e, 0x37}, - {0x28, 0x11, 0x72, 0x7b, 0x1c, 0x2d, 0x7e, 0x37}, - {0x28, 0x11, 0x72, 0x7b, 0x1c, 0x2d, 0x7e, 0x37}, - {0x28, 0x11, 0x62, 0x7b, 0x14, 0x2d, 0x7e, 0x37}, - {0x28, 0x11, 0x62, 0x7b, 0x14, 0x2d, 0x7e, 0x37}, - {0x28, 0x11, 0x62, 0x5b, 0x14, 0x2d, 0x7e, 0x27}, - {0x28, 0x11, 0x62, 0x5b, 0x14, 0x2d, 0x7e, 0x27}, - {0x68, 0x11, 0x62, 0x5b, 0x14, 0x2d, 0x5e, 0x27}, - {0x68, 0x11, 0x62, 0x5b, 0x14, 0x2d, 0x5e, 0x27}, - {0x68, 0x51, 0x62, 0x5b, 0x14, 0x6d, 0x5e, 0x27}, - {0x68, 0x51, 0x62, 0x5b, 0x14, 0x6d, 0x5e, 0x27}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x27}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x27}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47} - }, - { - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x20, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x20, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x20, 0x19, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x20, 0x19, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x20, 0x19, 0x72, 0x6b, 0x1c, 0x45, 0x6e, 0x57}, - {0x20, 0x19, 0x72, 0x6b, 0x1c, 0x45, 0x6e, 0x57}, - {0x20, 0x19, 0x72, 0x7b, 0x1c, 0x45, 0x6e, 0x77}, - {0x20, 0x19, 0x72, 0x7b, 0x1c, 0x45, 0x6e, 0x77}, - {0x28, 0x19, 0x72, 0x7b, 0x1c, 0x45, 0x7e, 0x77}, - {0x28, 0x19, 0x72, 0x7b, 0x1c, 0x45, 0x7e, 0x77}, - {0x28, 0x11, 0x72, 0x7b, 0x1c, 0x4d, 0x7e, 0x77}, - {0x28, 0x11, 0x72, 0x7b, 0x1c, 0x4d, 0x7e, 0x77}, - {0x28, 0x11, 0x62, 0x7b, 0x14, 0x4d, 0x7e, 0x77}, - {0x28, 0x11, 0x62, 0x7b, 0x14, 0x4d, 0x7e, 0x77}, - {0x28, 0x11, 0x62, 0x5b, 0x14, 0x4d, 0x7e, 0x67}, - {0x28, 0x11, 0x62, 0x5b, 0x14, 0x4d, 0x7e, 0x67}, - {0x68, 0x11, 0x62, 0x5b, 0x14, 0x4d, 0x5e, 0x67}, - {0x68, 0x11, 0x62, 0x5b, 0x14, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x14, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x14, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47} - }, - { - {0x60, 0x59, 0x02, 0x4b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x20, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x20, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x20, 0x19, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x20, 0x19, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x20, 0x19, 0x72, 0x6b, 0x1c, 0x45, 0x6e, 0x57}, - {0x20, 0x19, 0x72, 0x6b, 0x1c, 0x45, 0x6e, 0x57}, - {0x20, 0x19, 0x72, 0x7b, 0x1c, 0x45, 0x6e, 0x77}, - {0x20, 0x19, 0x72, 0x7b, 0x1c, 0x45, 0x6e, 0x77}, - {0x28, 0x19, 0x72, 0x7b, 0x1c, 0x45, 0x7e, 0x77}, - {0x28, 0x19, 0x72, 0x7b, 0x1c, 0x45, 0x7e, 0x77}, - {0x28, 0x11, 0x72, 0x7b, 0x1c, 0x4d, 0x7e, 0x77}, - {0x28, 0x11, 0x72, 0x7b, 0x1c, 0x4d, 0x7e, 0x77}, - {0x28, 0x11, 0x62, 0x7b, 0x14, 0x4d, 0x7e, 0x77}, - {0x28, 0x11, 0x62, 0x7b, 0x14, 0x4d, 0x7e, 0x77}, - {0x28, 0x11, 0x62, 0x5b, 0x14, 0x4d, 0x7e, 0x67}, - {0x28, 0x11, 0x62, 0x5b, 0x14, 0x4d, 0x7e, 0x67}, - {0x68, 0x11, 0x62, 0x5b, 0x14, 0x4d, 0x5e, 0x67}, - {0x68, 0x11, 0x62, 0x5b, 0x14, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x14, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x14, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x0b, 0x54, 0x6d, 0x0e, 0x47} - }, - { - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x19, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x19, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x19, 0x72, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x19, 0x72, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x19, 0x72, 0x7b, 0x0c, 0x45, 0x6e, 0x77}, - {0x40, 0x19, 0x72, 0x7b, 0x0c, 0x45, 0x6e, 0x77}, - {0x48, 0x19, 0x72, 0x7b, 0x0c, 0x45, 0x7e, 0x77}, - {0x48, 0x19, 0x72, 0x7b, 0x0c, 0x45, 0x7e, 0x77}, - {0x48, 0x11, 0x72, 0x7b, 0x0c, 0x4d, 0x7e, 0x77}, - {0x48, 0x11, 0x72, 0x7b, 0x0c, 0x4d, 0x7e, 0x77}, - {0x48, 0x11, 0x62, 0x7b, 0x04, 0x4d, 0x7e, 0x77}, - {0x48, 0x11, 0x62, 0x7b, 0x04, 0x4d, 0x7e, 0x77}, - {0x48, 0x11, 0x62, 0x5b, 0x04, 0x4d, 0x7e, 0x67}, - {0x48, 0x11, 0x62, 0x5b, 0x04, 0x4d, 0x7e, 0x67}, - {0x68, 0x11, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x11, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47} - }, - { - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x19, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x19, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x19, 0x72, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x19, 0x72, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x19, 0x72, 0x7b, 0x0c, 0x45, 0x6e, 0x77}, - {0x40, 0x19, 0x72, 0x7b, 0x0c, 0x45, 0x6e, 0x77}, - {0x48, 0x19, 0x72, 0x7b, 0x0c, 0x45, 0x7e, 0x77}, - {0x48, 0x19, 0x72, 0x7b, 0x0c, 0x45, 0x7e, 0x77}, - {0x48, 0x11, 0x72, 0x7b, 0x0c, 0x4d, 0x7e, 0x77}, - {0x48, 0x11, 0x72, 0x7b, 0x0c, 0x4d, 0x7e, 0x77}, - {0x48, 0x11, 0x62, 0x7b, 0x04, 0x4d, 0x7e, 0x77}, - {0x48, 0x11, 0x62, 0x7b, 0x04, 0x4d, 0x7e, 0x77}, - {0x48, 0x11, 0x62, 0x5b, 0x04, 0x4d, 0x7e, 0x67}, - {0x48, 0x11, 0x62, 0x5b, 0x04, 0x4d, 0x7e, 0x67}, - {0x48, 0x11, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x11, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47} - }, - { - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x72, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x72, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x6e, 0x77}, - {0x40, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x6e, 0x77}, - {0x48, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x7e, 0x77}, - {0x48, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x7e, 0x77}, - {0x48, 0x01, 0x72, 0x7b, 0x0c, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x72, 0x7b, 0x0c, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x62, 0x7b, 0x04, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x62, 0x7b, 0x04, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x7e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x7e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47} - }, - { - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x4e, 0x07}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x72, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x72, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x6e, 0x77}, - {0x40, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x6e, 0x77}, - {0x48, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x7e, 0x77}, - {0x48, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x7e, 0x77}, - {0x48, 0x01, 0x72, 0x7b, 0x0c, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x72, 0x7b, 0x0c, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x62, 0x7b, 0x04, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x62, 0x7b, 0x04, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x7e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x7e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x42, 0x5b, 0x54, 0x6d, 0x5e, 0x47} - }, - { - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x72, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x72, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x6e, 0x77}, - {0x40, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x6e, 0x77}, - {0x48, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x7e, 0x77}, - {0x48, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x7e, 0x77}, - {0x48, 0x01, 0x72, 0x7b, 0x0c, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x72, 0x7b, 0x0c, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x62, 0x7b, 0x04, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x62, 0x7b, 0x04, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x7e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x7e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67} - }, - { - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x60, 0x59, 0x52, 0x6b, 0x5c, 0x65, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x59, 0x52, 0x6b, 0x5c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x52, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x72, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x72, 0x6b, 0x0c, 0x45, 0x6e, 0x57}, - {0x40, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x6e, 0x77}, - {0x40, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x6e, 0x77}, - {0x48, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x7e, 0x77}, - {0x48, 0x09, 0x72, 0x7b, 0x0c, 0x45, 0x7e, 0x77}, - {0x48, 0x01, 0x72, 0x7b, 0x0c, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x72, 0x7b, 0x0c, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x62, 0x7b, 0x04, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x62, 0x7b, 0x04, 0x4d, 0x7e, 0x77}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x7e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x7e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x48, 0x01, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x04, 0x4d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67}, - {0x68, 0x51, 0x62, 0x5b, 0x54, 0x6d, 0x5e, 0x67} - } - }, - { /* 12,000bps map */ - { - {0x38, 0x21, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27} - }, - { - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27} - }, - { - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27} - }, - { - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27} - }, - { - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27} - }, - { - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x0b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x0e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x0b, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x0b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x0e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x0e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x1e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x13, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x0b, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x0b, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x0b, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x3d, 0x0e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x0e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x0e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x1b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x14, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x0b, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x0b, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x0b, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x0b, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x2a, 0x0b, 0x24, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x0e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x0e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x0e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x0e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x0b, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x32, 0x0b, 0x24, 0x3d, 0x16, 0x37}, - {0x38, 0x01, 0x2a, 0x0b, 0x24, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x2a, 0x0b, 0x24, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x2a, 0x0b, 0x24, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x2d, 0x0e, 0x2f}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x2d, 0x0e, 0x2f}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x0e, 0x27}, - {0x38, 0x01, 0x22, 0x1b, 0x04, 0x2d, 0x0e, 0x27}, - {0x28, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x28, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x22, 0x3b, 0x0c, 0x35, 0x1e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x2a, 0x0b, 0x24, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x2a, 0x0b, 0x24, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x2a, 0x0b, 0x24, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x2d, 0x0e, 0x2f}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x2d, 0x0e, 0x2f}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x2d, 0x0e, 0x2f}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x28, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x28, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x28, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x30, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x13, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x16, 0x37}, - {0x18, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x16, 0x37}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x1d, 0x0e, 0x37}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x1d, 0x0e, 0x37}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x2a, 0x0b, 0x24, 0x3d, 0x0e, 0x37}, - {0x38, 0x01, 0x2a, 0x0b, 0x24, 0x2d, 0x0e, 0x2f}, - {0x38, 0x01, 0x2a, 0x0b, 0x24, 0x2d, 0x0e, 0x2f}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x2d, 0x0e, 0x2f}, - {0x38, 0x01, 0x22, 0x0b, 0x04, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x22, 0x0b, 0x0c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x22, 0x0b, 0x0c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x28, 0x01, 0x22, 0x1b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x28, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x28, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x30, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x1e, 0x27}, - {0x30, 0x09, 0x02, 0x3b, 0x0c, 0x2d, 0x3e, 0x27}, - {0x30, 0x09, 0x02, 0x3b, 0x0c, 0x2d, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x35, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x14, 0x35, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x06, 0x37}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x1d, 0x0e, 0x37}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x1d, 0x0e, 0x37}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x1d, 0x0e, 0x37}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x1d, 0x0e, 0x37}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x2d, 0x0e, 0x2f}, - {0x38, 0x01, 0x2a, 0x0b, 0x24, 0x2d, 0x0e, 0x2f}, - {0x38, 0x01, 0x2a, 0x0b, 0x24, 0x2d, 0x0e, 0x2f}, - {0x38, 0x01, 0x2a, 0x0b, 0x24, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x22, 0x0b, 0x0c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x22, 0x0b, 0x0c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x22, 0x0b, 0x0c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x22, 0x0b, 0x0c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x28, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x28, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x28, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x30, 0x09, 0x02, 0x3b, 0x0c, 0x2d, 0x3e, 0x27}, - {0x30, 0x09, 0x02, 0x3b, 0x0c, 0x2d, 0x3e, 0x27}, - {0x30, 0x09, 0x02, 0x3b, 0x0c, 0x2d, 0x3e, 0x27}, - {0x30, 0x09, 0x02, 0x3b, 0x0c, 0x2d, 0x3e, 0x27}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x0b, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x2a, 0x0b, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x2a, 0x0b, 0x24, 0x1d, 0x06, 0x37}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x1d, 0x0e, 0x37}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x1d, 0x0e, 0x37}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x0d, 0x0e, 0x2f}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x0d, 0x0e, 0x2f}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x2d, 0x0e, 0x2f}, - {0x38, 0x01, 0x2a, 0x0b, 0x24, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x2a, 0x0b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x2a, 0x0b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x22, 0x0b, 0x0c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x22, 0x0b, 0x0c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x22, 0x2b, 0x0c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x22, 0x2b, 0x0c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x28, 0x09, 0x22, 0x3b, 0x0c, 0x2d, 0x0e, 0x27}, - {0x28, 0x09, 0x02, 0x3b, 0x0c, 0x2d, 0x2e, 0x27}, - {0x28, 0x09, 0x02, 0x3b, 0x0c, 0x2d, 0x2e, 0x27}, - {0x30, 0x09, 0x02, 0x3b, 0x0c, 0x2d, 0x3e, 0x27}, - {0x30, 0x09, 0x02, 0x3b, 0x0c, 0x2d, 0x3e, 0x27}, - {0x30, 0x09, 0x02, 0x3b, 0x0c, 0x25, 0x3e, 0x07}, - {0x30, 0x09, 0x02, 0x3b, 0x0c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x0c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x2a, 0x0b, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x2a, 0x0b, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x2a, 0x0b, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x2a, 0x0b, 0x24, 0x0d, 0x06, 0x2f}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x0d, 0x0e, 0x2f}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x0d, 0x0e, 0x2f}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x0d, 0x0e, 0x2f}, - {0x28, 0x21, 0x2a, 0x0b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x2a, 0x0b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x2a, 0x0b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x2a, 0x0b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x2a, 0x2b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x22, 0x2b, 0x0c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x22, 0x2b, 0x0c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x22, 0x2b, 0x0c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x02, 0x3b, 0x0c, 0x2d, 0x2e, 0x27}, - {0x28, 0x09, 0x02, 0x3b, 0x0c, 0x2d, 0x2e, 0x27}, - {0x28, 0x09, 0x02, 0x3b, 0x0c, 0x2d, 0x2e, 0x27}, - {0x28, 0x09, 0x02, 0x3b, 0x0c, 0x25, 0x2e, 0x07}, - {0x30, 0x09, 0x02, 0x3b, 0x0c, 0x25, 0x3e, 0x07}, - {0x30, 0x09, 0x02, 0x3b, 0x0c, 0x25, 0x3e, 0x07}, - {0x30, 0x09, 0x02, 0x3b, 0x0c, 0x25, 0x3e, 0x07}, - {0x30, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x32, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x2a, 0x0b, 0x24, 0x1d, 0x06, 0x37}, - {0x18, 0x21, 0x2a, 0x0b, 0x24, 0x0d, 0x06, 0x2f}, - {0x18, 0x21, 0x2a, 0x0b, 0x24, 0x0d, 0x06, 0x2f}, - {0x18, 0x21, 0x2a, 0x0b, 0x24, 0x0d, 0x06, 0x2f}, - {0x38, 0x21, 0x2a, 0x0b, 0x24, 0x0d, 0x0e, 0x2f}, - {0x28, 0x21, 0x2a, 0x0b, 0x2c, 0x0d, 0x0e, 0x2f}, - {0x28, 0x21, 0x2a, 0x0b, 0x2c, 0x0d, 0x0e, 0x2f}, - {0x28, 0x21, 0x2a, 0x0b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x01, 0x2a, 0x0b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x2a, 0x2b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x2a, 0x2b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x2a, 0x2b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x22, 0x2b, 0x0c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x02, 0x3b, 0x0c, 0x2d, 0x2e, 0x27}, - {0x28, 0x09, 0x02, 0x3b, 0x0c, 0x25, 0x2e, 0x07}, - {0x28, 0x09, 0x02, 0x3b, 0x0c, 0x25, 0x2e, 0x07}, - {0x28, 0x09, 0x02, 0x3b, 0x0c, 0x25, 0x2e, 0x07}, - {0x30, 0x09, 0x02, 0x3b, 0x0c, 0x25, 0x3e, 0x07}, - {0x30, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x30, 0x11, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x0d, 0x06, 0x3f}, - {0x18, 0x21, 0x2a, 0x0b, 0x24, 0x0d, 0x06, 0x2f}, - {0x18, 0x21, 0x2a, 0x0b, 0x24, 0x0d, 0x06, 0x2f}, - {0x18, 0x21, 0x2a, 0x0b, 0x24, 0x0d, 0x06, 0x2f}, - {0x08, 0x21, 0x2a, 0x0b, 0x2c, 0x0d, 0x06, 0x2f}, - {0x28, 0x21, 0x2a, 0x0b, 0x2c, 0x0d, 0x0e, 0x2f}, - {0x28, 0x21, 0x2a, 0x0b, 0x2c, 0x0d, 0x0e, 0x2f}, - {0x28, 0x21, 0x2a, 0x0b, 0x2c, 0x0d, 0x0e, 0x2f}, - {0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x2a, 0x2b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x2a, 0x2b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x2a, 0x2b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x25, 0x2e, 0x0f}, - {0x28, 0x09, 0x02, 0x3b, 0x0c, 0x25, 0x2e, 0x07}, - {0x28, 0x09, 0x02, 0x3b, 0x0c, 0x25, 0x2e, 0x07}, - {0x28, 0x09, 0x02, 0x3b, 0x0c, 0x25, 0x2e, 0x07}, - {0x20, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x0d, 0x06, 0x3f}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x0d, 0x06, 0x3f}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x0d, 0x06, 0x3f}, - {0x18, 0x21, 0x2a, 0x0b, 0x24, 0x0d, 0x06, 0x2f}, - {0x08, 0x21, 0x2a, 0x0b, 0x2c, 0x0d, 0x06, 0x2f}, - {0x08, 0x21, 0x2a, 0x0b, 0x2c, 0x0d, 0x06, 0x2f}, - {0x08, 0x21, 0x2a, 0x0b, 0x2c, 0x0d, 0x06, 0x2f}, - {0x28, 0x21, 0x2a, 0x0b, 0x2c, 0x0d, 0x0e, 0x2f}, - {0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x0d, 0x0e, 0x2f}, - {0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x0d, 0x0e, 0x2f}, - {0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x2a, 0x2b, 0x2c, 0x2d, 0x0e, 0x2f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x25, 0x2e, 0x0f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x25, 0x2e, 0x0f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x25, 0x2e, 0x0f}, - {0x28, 0x09, 0x02, 0x3b, 0x0c, 0x25, 0x2e, 0x07}, - {0x20, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x0d, 0x06, 0x3f}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x0d, 0x06, 0x3f}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x0d, 0x06, 0x3f}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x2a, 0x03, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x2a, 0x0b, 0x2c, 0x0d, 0x06, 0x2f}, - {0x08, 0x21, 0x2a, 0x0b, 0x2c, 0x0d, 0x06, 0x2f}, - {0x08, 0x21, 0x2a, 0x0b, 0x2c, 0x0d, 0x06, 0x2f}, - {0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x0d, 0x0e, 0x2f}, - {0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x0d, 0x0e, 0x2f}, - {0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x0d, 0x0e, 0x2f}, - {0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x0d, 0x0e, 0x2f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x25, 0x2e, 0x0f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x25, 0x2e, 0x0f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x25, 0x2e, 0x0f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x02, 0x2b, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x1d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x0d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x0d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x24, 0x0d, 0x06, 0x3f}, - {0x18, 0x21, 0x2a, 0x03, 0x24, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x2a, 0x03, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x2a, 0x03, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x2a, 0x03, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x2a, 0x0b, 0x2c, 0x0d, 0x06, 0x2f}, - {0x08, 0x29, 0x2a, 0x2b, 0x2c, 0x0d, 0x06, 0x2f}, - {0x08, 0x29, 0x2a, 0x2b, 0x2c, 0x0d, 0x06, 0x2f}, - {0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x0d, 0x0e, 0x2f}, - {0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x0d, 0x0e, 0x2f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x2e, 0x2f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x2e, 0x2f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x25, 0x2e, 0x0f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x25, 0x2e, 0x0f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x25, 0x2e, 0x0f}, - {0x28, 0x09, 0x02, 0x2b, 0x0c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x02, 0x2b, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x02, 0x2b, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x02, 0x2b, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x02, 0x3b, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07}, - {0x20, 0x19, 0x02, 0x3b, 0x1c, 0x25, 0x3e, 0x07} - }, - { - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x0d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x0d, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x3a, 0x03, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x2a, 0x03, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x2a, 0x03, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x2a, 0x03, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x2a, 0x23, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x2a, 0x2b, 0x2c, 0x0d, 0x06, 0x2f}, - {0x08, 0x29, 0x2a, 0x2b, 0x2c, 0x0d, 0x06, 0x2f}, - {0x08, 0x29, 0x2a, 0x2b, 0x2c, 0x0d, 0x06, 0x2f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x2e, 0x2f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x2e, 0x2f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x2e, 0x2f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x2e, 0x2f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x25, 0x2e, 0x0f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x25, 0x2e, 0x0f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x25, 0x2e, 0x0f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x0a, 0x2b, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x02, 0x2b, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x02, 0x2b, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x02, 0x2b, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07} - }, - { - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x3a, 0x03, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x3a, 0x03, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x3a, 0x03, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x2a, 0x03, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x2a, 0x23, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x2a, 0x23, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x2a, 0x23, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x2a, 0x2b, 0x2c, 0x0d, 0x06, 0x2f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x26, 0x2f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x26, 0x2f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x2e, 0x2f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x2e, 0x2f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x2e, 0x0f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x2e, 0x0f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x25, 0x2e, 0x0f}, - {0x28, 0x09, 0x0a, 0x2b, 0x2c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x0a, 0x2b, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x0a, 0x2b, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x0a, 0x2b, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x02, 0x2b, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x2e, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07} - }, - { - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x21, 0x3a, 0x03, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x3a, 0x03, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x21, 0x3a, 0x03, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x3a, 0x23, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x2a, 0x23, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x2a, 0x23, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x2a, 0x23, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x26, 0x2f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x26, 0x2f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x26, 0x2f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x26, 0x2f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x2e, 0x0f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x2e, 0x0f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x2e, 0x0f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x2e, 0x0f}, - {0x20, 0x29, 0x0a, 0x2b, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x0a, 0x2b, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x0a, 0x2b, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x0a, 0x2b, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x0a, 0x33, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07} - }, - { - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x18, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x21, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x21, 0x3a, 0x03, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x3a, 0x23, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x3a, 0x23, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x3a, 0x23, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x2a, 0x23, 0x2c, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x0a, 0x23, 0x2c, 0x0d, 0x26, 0x3f}, - {0x08, 0x29, 0x0a, 0x23, 0x2c, 0x0d, 0x26, 0x3f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x26, 0x2f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x0d, 0x26, 0x2f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x26, 0x0f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x26, 0x0f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x2e, 0x0f}, - {0x28, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x2e, 0x0f}, - {0x20, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x29, 0x0a, 0x2b, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x09, 0x0a, 0x2b, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x0a, 0x33, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x0a, 0x33, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x0a, 0x33, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07}, - {0x20, 0x19, 0x02, 0x33, 0x1c, 0x25, 0x36, 0x07} - }, - { - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x29, 0x3a, 0x23, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x3a, 0x23, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x3a, 0x23, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x1a, 0x23, 0x34, 0x0d, 0x26, 0x3f}, - {0x08, 0x29, 0x0a, 0x23, 0x2c, 0x0d, 0x26, 0x3f}, - {0x08, 0x29, 0x0a, 0x23, 0x2c, 0x0d, 0x26, 0x3f}, - {0x08, 0x29, 0x0a, 0x23, 0x2c, 0x0d, 0x26, 0x3f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x26, 0x0f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x26, 0x0f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x26, 0x0f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x26, 0x0f}, - {0x20, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x39, 0x0a, 0x33, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x0a, 0x33, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x0a, 0x33, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x0a, 0x33, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17} - }, - { - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x29, 0x3a, 0x23, 0x34, 0x0d, 0x06, 0x3f}, - {0x08, 0x29, 0x1a, 0x23, 0x34, 0x0d, 0x26, 0x3f}, - {0x08, 0x29, 0x1a, 0x23, 0x34, 0x0d, 0x26, 0x3f}, - {0x08, 0x29, 0x1a, 0x23, 0x34, 0x0d, 0x26, 0x3f}, - {0x08, 0x29, 0x0a, 0x23, 0x2c, 0x0d, 0x26, 0x3f}, - {0x08, 0x29, 0x0a, 0x23, 0x2c, 0x05, 0x26, 0x1f}, - {0x08, 0x29, 0x0a, 0x23, 0x2c, 0x05, 0x26, 0x1f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x26, 0x0f}, - {0x08, 0x29, 0x0a, 0x2b, 0x2c, 0x05, 0x26, 0x0f}, - {0x00, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x26, 0x0f}, - {0x00, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x26, 0x0f}, - {0x20, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x39, 0x0a, 0x33, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x0a, 0x33, 0x3c, 0x25, 0x2e, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17} - }, - { - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x08, 0x29, 0x1a, 0x23, 0x34, 0x0d, 0x26, 0x3f}, - {0x08, 0x29, 0x1a, 0x23, 0x34, 0x0d, 0x26, 0x3f}, - {0x08, 0x29, 0x1a, 0x23, 0x34, 0x0d, 0x26, 0x3f}, - {0x08, 0x29, 0x0a, 0x23, 0x2c, 0x05, 0x26, 0x1f}, - {0x08, 0x29, 0x0a, 0x23, 0x2c, 0x05, 0x26, 0x1f}, - {0x08, 0x29, 0x0a, 0x23, 0x2c, 0x05, 0x26, 0x1f}, - {0x08, 0x29, 0x0a, 0x23, 0x2c, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x26, 0x0f}, - {0x00, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x26, 0x0f}, - {0x00, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x26, 0x0f}, - {0x00, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x26, 0x0f}, - {0x20, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17} - }, - { - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x08, 0x29, 0x1a, 0x23, 0x34, 0x0d, 0x26, 0x3f}, - {0x08, 0x29, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x08, 0x29, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x08, 0x29, 0x0a, 0x23, 0x2c, 0x05, 0x26, 0x1f}, - {0x08, 0x29, 0x0a, 0x23, 0x2c, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x0a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x0a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x26, 0x0f}, - {0x00, 0x29, 0x0a, 0x2b, 0x3c, 0x05, 0x26, 0x0f}, - {0x00, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x26, 0x0f}, - {0x00, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x26, 0x0f}, - {0x20, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x2e, 0x0f}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x0f}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x0f}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x0f}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17} - }, - { - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x08, 0x29, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x08, 0x29, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x08, 0x29, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x0a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x0a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x0a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x0a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x26, 0x0f}, - {0x00, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x26, 0x0f}, - {0x00, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x26, 0x0f}, - {0x00, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x26, 0x0f}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x0f}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x0f}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x0f}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x0f}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17} - }, - { - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x08, 0x29, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x0a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x0a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x0a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x26, 0x0f}, - {0x00, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x26, 0x0f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x0f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x0f}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x0f}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x0f}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17} - }, - { - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x0a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x0a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x0f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x0f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x0f}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17} - }, - { - {0x10, 0x31, 0x3a, 0x03, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x08, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x29, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x0a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x0a, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x0f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x1c, 0x25, 0x36, 0x17} - }, - { - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17} - }, - { - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17} - }, - { - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17}, - {0x20, 0x19, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17} - }, - { - {0x10, 0x31, 0x3a, 0x23, 0x34, 0x15, 0x06, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x3f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x10, 0x31, 0x1a, 0x23, 0x34, 0x15, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x31, 0x1a, 0x23, 0x34, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x1a, 0x23, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x26, 0x1f}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x00, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x05, 0x36, 0x17}, - {0x20, 0x39, 0x12, 0x33, 0x3c, 0x25, 0x36, 0x17} - } - }, - { /* 9,600bps map */ - { - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x0e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x01, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x12, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x1c, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x00, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x01, 0x12, 0x13, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x12, 0x13, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x09, 0x02, 0x13, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x09, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x1b, 0x0c, 0x1d, 0x0e, 0x07}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x10, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x0e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x11, 0x12, 0x0b, 0x0c, 0x1d, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x12, 0x0b, 0x0c, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x0b, 0x14, 0x15, 0x1e, 0x0f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f}, - {0x08, 0x19, 0x02, 0x03, 0x14, 0x15, 0x1e, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x1d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x06, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x1d, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x0f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x15, 0x16, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x06, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x11, 0x1a, 0x0b, 0x0c, 0x0d, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x1a, 0x0b, 0x0c, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x08, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x07}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x1f} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17} - }, - { - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x10, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x1b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x06, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x11, 0x1a, 0x0b, 0x04, 0x0d, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x1a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x0b, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x04, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17}, - {0x18, 0x19, 0x0a, 0x03, 0x14, 0x05, 0x16, 0x17} - } - }, - { /* 7,200bps map */ - { - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f} - }, - { - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f} - }, - { - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f} - }, - { - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f} - }, - { - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f} - }, - { - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f} - }, - { - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f} - }, - { - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f} - }, - { - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x03, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x04, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x0a, 0x0b, 0x0c, 0x0d, 0x06, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x03, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x04, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07}, - {0x08, 0x01, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07} - }, - { - {0x00, 0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x0f}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x00, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x05, 0x0e, 0x07}, - {0x08, 0x09, 0x02, 0x0b, 0x0c, 0x0d, 0x0e, 0x07} - } - } -}; - -/*- End of file ------------------------------------------------------------*/ diff --git a/libs/spandsp/src/v17tx_constellation_maps.h b/libs/spandsp/src/v17tx_constellation_maps.h deleted file mode 100644 index db327512c2..0000000000 --- a/libs/spandsp/src/v17tx_constellation_maps.h +++ /dev/null @@ -1,313 +0,0 @@ -/* - * SpanDSP - a series of DSP components for telephony - * - * v17tx_constellation_maps.h - ITU V.17 modem transmit part. - * Constellation mapping. - * - * Written by Steve Underwood - * - * Copyright (C) 2004 Steve Underwood - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id: v17tx_constellation_maps.h,v 1.1 2008/05/02 14:44:08 steveu Exp $ - */ - -#if defined(SPANDSP_USE_FIXED_POINTx) -static const complexi16_t v17_abcd_constellation[4] = -#else -static const complexf_t v17_abcd_constellation[4] = -#endif -{ - {-6, -2}, - { 2, -6}, - { 6, 2}, - {-2, 6} -}; - -#if defined(SPANDSP_USE_FIXED_POINTx) -static const complexi16_t v17_14400_constellation[128] = -#else -static const complexf_t v17_14400_constellation[128] = -#endif -{ - {-8, -3}, /* 0x00 */ - { 9, 2}, /* 0x01 */ - { 2, -9}, /* 0x02 */ - {-3, 8}, /* 0x03 */ - { 8, 3}, /* 0x04 */ - {-9, -2}, /* 0x05 */ - {-2, 9}, /* 0x06 */ - { 3, -8}, /* 0x07 */ - {-8, 1}, /* 0x08 */ - { 9, -2}, /* 0x09 */ - {-2, -9}, /* 0x0A */ - { 1, 8}, /* 0x0B */ - { 8, -1}, /* 0x0C */ - {-9, 2}, /* 0x0D */ - { 2, 9}, /* 0x0E */ - {-1, -8}, /* 0x0F */ - {-4, -3}, /* 0x10 */ - { 5, 2}, /* 0x11 */ - { 2, -5}, /* 0x12 */ - {-3, 4}, /* 0x13 */ - { 4, 3}, /* 0x14 */ - {-5, -2}, /* 0x15 */ - {-2, 5}, /* 0x16 */ - { 3, -4}, /* 0x17 */ - {-4, 1}, /* 0x18 */ - { 5, -2}, /* 0x19 */ - {-2, -5}, /* 0x1A */ - { 1, 4}, /* 0x1B */ - { 4, -1}, /* 0x1C */ - {-5, 2}, /* 0x1D */ - { 2, 5}, /* 0x1E */ - {-1, -4}, /* 0x1F */ - { 4, -3}, /* 0x20 */ - {-3, 2}, /* 0x21 */ - { 2, 3}, /* 0x22 */ - {-3, -4}, /* 0x23 */ - {-4, 3}, /* 0x24 */ - { 3, -2}, /* 0x25 */ - {-2, -3}, /* 0x26 */ - { 3, 4}, /* 0x27 */ - { 4, 1}, /* 0x28 */ - {-3, -2}, /* 0x29 */ - {-2, 3}, /* 0x2A */ - { 1, -4}, /* 0x2B */ - {-4, -1}, /* 0x2C */ - { 3, 2}, /* 0x2D */ - { 2, -3}, /* 0x2E */ - {-1, 4}, /* 0x2F */ - { 0, -3}, /* 0x30 */ - { 1, 2}, /* 0x31 */ - { 2, -1}, /* 0x32 */ - {-3, 0}, /* 0x33 */ - { 0, 3}, /* 0x34 */ - {-1, -2}, /* 0x35 */ - {-2, 1}, /* 0x36 */ - { 3, 0}, /* 0x37 */ - { 0, 1}, /* 0x38 */ - { 1, -2}, /* 0x39 */ - {-2, -1}, /* 0x3A */ - { 1, 0}, /* 0x3B */ - { 0, -1}, /* 0x3C */ - {-1, 2}, /* 0x3D */ - { 2, 1}, /* 0x3E */ - {-1, 0}, /* 0x3F */ - { 8, -3}, /* 0x40 */ - {-7, 2}, /* 0x41 */ - { 2, 7}, /* 0x42 */ - {-3, -8}, /* 0x43 */ - {-8, 3}, /* 0x44 */ - { 7, -2}, /* 0x45 */ - {-2, -7}, /* 0x46 */ - { 3, 8}, /* 0x47 */ - { 8, 1}, /* 0x48 */ - {-7, -2}, /* 0x49 */ - {-2, 7}, /* 0x4A */ - { 1, -8}, /* 0x4B */ - {-8, -1}, /* 0x4C */ - { 7, 2}, /* 0x4D */ - { 2, -7}, /* 0x4E */ - {-1, 8}, /* 0x4F */ - {-4, -7}, /* 0x50 */ - { 5, 6}, /* 0x51 */ - { 6, -5}, /* 0x52 */ - {-7, 4}, /* 0x53 */ - { 4, 7}, /* 0x54 */ - {-5, -6}, /* 0x55 */ - {-6, 5}, /* 0x56 */ - { 7, -4}, /* 0x57 */ - {-4, 5}, /* 0x58 */ - { 5, -6}, /* 0x59 */ - {-6, -5}, /* 0x5A */ - { 5, 4}, /* 0x5B */ - { 4, -5}, /* 0x5C */ - {-5, 6}, /* 0x5D */ - { 6, 5}, /* 0x5E */ - {-5, -4}, /* 0x5F */ - { 4, -7}, /* 0x60 */ - {-3, 6}, /* 0x61 */ - { 6, 3}, /* 0x62 */ - {-7, -4}, /* 0x63 */ - {-4, 7}, /* 0x64 */ - { 3, -6}, /* 0x65 */ - {-6, -3}, /* 0x66 */ - { 7, 4}, /* 0x67 */ - { 4, 5}, /* 0x68 */ - {-3, -6}, /* 0x69 */ - {-6, 3}, /* 0x6A */ - { 5, -4}, /* 0x6B */ - {-4, -5}, /* 0x6C */ - { 3, 6}, /* 0x6D */ - { 6, -3}, /* 0x6E */ - {-5, 4}, /* 0x6F */ - { 0, -7}, /* 0x70 */ - { 1, 6}, /* 0x71 */ - { 6, -1}, /* 0x72 */ - {-7, 0}, /* 0x73 */ - { 0, 7}, /* 0x74 */ - {-1, -6}, /* 0x75 */ - {-6, 1}, /* 0x76 */ - { 7, 0}, /* 0x77 */ - { 0, 5}, /* 0x78 */ - { 1, -6}, /* 0x79 */ - {-6, -1}, /* 0x7A */ - { 5, 0}, /* 0x7B */ - { 0, -5}, /* 0x7C */ - {-1, 6}, /* 0x7D */ - { 6, 1}, /* 0x7E */ - {-5, 0} /* 0x7F */ -}; - -#if defined(SPANDSP_USE_FIXED_POINTx) -static const complexi16_t v17_12000_constellation[64] = -#else -static const complexf_t v17_12000_constellation[64] = -#endif -{ - { 7, 1}, /* 0x00 */ - {-5, -1}, /* 0x01 */ - {-1, 5}, /* 0x02 */ - { 1, -7}, /* 0x03 */ - {-7, -1}, /* 0x04 */ - { 5, 1}, /* 0x05 */ - { 1, -5}, /* 0x06 */ - {-1, 7}, /* 0x07 */ - { 3, -3}, /* 0x08 */ - {-1, 3}, /* 0x09 */ - { 3, 1}, /* 0x0A */ - {-3, -3}, /* 0x0B */ - {-3, 3}, /* 0x0C */ - { 1, -3}, /* 0x0D */ - {-3, -1}, /* 0x0E */ - { 3, 3}, /* 0x0F */ - { 7, -7}, /* 0x10 */ - {-5, 7}, /* 0x11 */ - { 7, 5}, /* 0x12 */ - {-7, -7}, /* 0x13 */ - {-7, 7}, /* 0x14 */ - { 5, -7}, /* 0x15 */ - {-7, -5}, /* 0x16 */ - { 7, 7}, /* 0x17 */ - {-1, -7}, /* 0x18 */ - { 3, 7}, /* 0x19 */ - { 7, -3}, /* 0x1A */ - {-7, 1}, /* 0x1B */ - { 1, 7}, /* 0x1C */ - {-3, -7}, /* 0x1D */ - {-7, 3}, /* 0x1E */ - { 7, -1}, /* 0x1F */ - { 3, 5}, /* 0x20 */ - {-1, -5}, /* 0x21 */ - {-5, 1}, /* 0x22 */ - { 5, -3}, /* 0x23 */ - {-3, -5}, /* 0x24 */ - { 1, 5}, /* 0x25 */ - { 5, -1}, /* 0x26 */ - {-5, 3}, /* 0x27 */ - {-1, 1}, /* 0x28 */ - { 3, -1}, /* 0x29 */ - {-1, -3}, /* 0x2A */ - { 1, 1}, /* 0x2B */ - { 1, -1}, /* 0x2C */ - {-3, 1}, /* 0x2D */ - { 1, 3}, /* 0x2E */ - {-1, -1}, /* 0x2F */ - {-5, 5}, /* 0x30 */ - { 7, -5}, /* 0x31 */ - {-5, -7}, /* 0x32 */ - { 5, 5}, /* 0x33 */ - { 5, -5}, /* 0x34 */ - {-7, 5}, /* 0x35 */ - { 5, 7}, /* 0x36 */ - {-5, -5}, /* 0x37 */ - {-5, -3}, /* 0x38 */ - { 7, 3}, /* 0x39 */ - { 3, -7}, /* 0x3A */ - {-3, 5}, /* 0x3B */ - { 5, 3}, /* 0x3C */ - {-7, -3}, /* 0x3D */ - {-3, 7}, /* 0x3E */ - { 3, -5} /* 0x3F */ -}; - -#if defined(SPANDSP_USE_FIXED_POINTx) -static const complexi16_t v17_9600_constellation[32] = -#else -static const complexf_t v17_9600_constellation[32] = -#endif -{ - {-8, 2}, /* 0x00 */ - {-6, -4}, /* 0x01 */ - {-4, 6}, /* 0x02 */ - { 2, 8}, /* 0x03 */ - { 8, -2}, /* 0x04 */ - { 6, 4}, /* 0x05 */ - { 4, -6}, /* 0x06 */ - {-2, -8}, /* 0x07 */ - { 0, 2}, /* 0x08 */ - {-6, 4}, /* 0x09 */ - { 4, 6}, /* 0x0A */ - { 2, 0}, /* 0x0B */ - { 0, -2}, /* 0x0C */ - { 6, -4}, /* 0x0D */ - {-4, -6}, /* 0x0E */ - {-2, 0}, /* 0x0F */ - { 0, -6}, /* 0x10 */ - { 2, -4}, /* 0x11 */ - {-4, -2}, /* 0x12 */ - {-6, 0}, /* 0x13 */ - { 0, 6}, /* 0x14 */ - {-2, 4}, /* 0x15 */ - { 4, 2}, /* 0x16 */ - { 6, 0}, /* 0x17 */ - { 8, 2}, /* 0x18 */ - { 2, 4}, /* 0x19 */ - { 4, -2}, /* 0x1A */ - { 2, -8}, /* 0x1B */ - {-8, -2}, /* 0x1C */ - {-2, -4}, /* 0x1D */ - {-4, 2}, /* 0x1E */ - {-2, 8} /* 0x1F */ -}; - -#if defined(SPANDSP_USE_FIXED_POINTx) -static const complexi16_t v17_7200_constellation[16] = -#else -static const complexf_t v17_7200_constellation[16] = -#endif -{ - { 6, -6}, /* 0x00 */ - {-2, 6}, /* 0x01 */ - { 6, 2}, /* 0x02 */ - {-6, -6}, /* 0x03 */ - {-6, 6}, /* 0x04 */ - { 2, -6}, /* 0x05 */ - {-6, -2}, /* 0x06 */ - { 6, 6}, /* 0x07 */ - {-2, 2}, /* 0x08 */ - { 6, -2}, /* 0x09 */ - {-2, -6}, /* 0x0A */ - { 2, 2}, /* 0x0B */ - { 2, -2}, /* 0x0C */ - {-6, 2}, /* 0x0D */ - { 2, 6}, /* 0x0E */ - {-2, -2} /* 0x0F */ -}; - -/*- End of file ------------------------------------------------------------*/ From 17a0f62812f8291044855462b977567cfb12c1e0 Mon Sep 17 00:00:00 2001 From: cypromis Date: Sat, 24 Jul 2010 23:04:37 +0200 Subject: [PATCH 050/161] got rid of windows endings in timezone.h --- libs/spandsp/src/spandsp/timezone.h | 176 ++++++++++++++-------------- 1 file changed, 88 insertions(+), 88 deletions(-) diff --git a/libs/spandsp/src/spandsp/timezone.h b/libs/spandsp/src/spandsp/timezone.h index 0f9a2eecd6..923f5e0d35 100644 --- a/libs/spandsp/src/spandsp/timezone.h +++ b/libs/spandsp/src/spandsp/timezone.h @@ -1,88 +1,88 @@ -/* - * SpanDSP - a series of DSP components for telephony - * - * timezone.h - Timezone handling for time interpretation - * - * Written by Steve Underwood - * - * Copyright (C) 2010 Steve Underwood - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/*! \file */ - -#if !defined(_SPANDSP_TIMEZONE_H_) -#define _SPANDSP_TIMEZONE_H_ - -/*! \page timezone_page Timezone handling - -\section timezone_sec_1 What does it do? - -\section timezone_sec_2 How does it work? - -*/ - -typedef struct tz_s tz_t; - -enum -{ - TM_SUNDAY = 0, - TM_MONDAY, - TM_TUESDAY, - TM_WEDNESDAY, - TM_THURSDAY, - TM_FRIDAY, - TM_SATURDAY -}; - -enum -{ - TM_JANUARY = 0, - TM_FEBRUARY, - TM_MARCH, - TM_APRIL, - TM_MAY, - TM_JUNE, - TM_JULY, - TM_AUGUST, - TM_SEPTEMBER, - TM_OCTOBER, - TM_NOVEMBER, - TM_DECEMBER -}; - -#if defined(__cplusplus) -extern "C" -{ -#endif - -SPAN_DECLARE(tz_t *) tz_init(tz_t *tz, const char *tzstring); - -SPAN_DECLARE(int) tz_release(tz_t *tz); - -SPAN_DECLARE(int) tz_free(tz_t *tz); - -SPAN_DECLARE(int) tz_localtime(tz_t *tz, struct tm *tm, time_t t); - -SPAN_DECLARE(const char *) tz_tzname(tz_t *tz, int isdst); - -#if defined(__cplusplus) -} -#endif - -#endif -/*- End of file ------------------------------------------------------------*/ +/* + * SpanDSP - a series of DSP components for telephony + * + * timezone.h - Timezone handling for time interpretation + * + * Written by Steve Underwood + * + * Copyright (C) 2010 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/*! \file */ + +#if !defined(_SPANDSP_TIMEZONE_H_) +#define _SPANDSP_TIMEZONE_H_ + +/*! \page timezone_page Timezone handling + +\section timezone_sec_1 What does it do? + +\section timezone_sec_2 How does it work? + +*/ + +typedef struct tz_s tz_t; + +enum +{ + TM_SUNDAY = 0, + TM_MONDAY, + TM_TUESDAY, + TM_WEDNESDAY, + TM_THURSDAY, + TM_FRIDAY, + TM_SATURDAY +}; + +enum +{ + TM_JANUARY = 0, + TM_FEBRUARY, + TM_MARCH, + TM_APRIL, + TM_MAY, + TM_JUNE, + TM_JULY, + TM_AUGUST, + TM_SEPTEMBER, + TM_OCTOBER, + TM_NOVEMBER, + TM_DECEMBER +}; + +#if defined(__cplusplus) +extern "C" +{ +#endif + +SPAN_DECLARE(tz_t *) tz_init(tz_t *tz, const char *tzstring); + +SPAN_DECLARE(int) tz_release(tz_t *tz); + +SPAN_DECLARE(int) tz_free(tz_t *tz); + +SPAN_DECLARE(int) tz_localtime(tz_t *tz, struct tm *tm, time_t t); + +SPAN_DECLARE(const char *) tz_tzname(tz_t *tz, int isdst); + +#if defined(__cplusplus) +} +#endif + +#endif +/*- End of file ------------------------------------------------------------*/ From a5a6d6a62348251a36f31f1a3dbe777797be1f9c Mon Sep 17 00:00:00 2001 From: cypromis Date: Sat, 24 Jul 2010 23:07:27 +0200 Subject: [PATCH 051/161] got rid of crlf windows endings on timezone.c --- libs/spandsp/src/timezone.c | 1644 +++++++++++++++++------------------ 1 file changed, 822 insertions(+), 822 deletions(-) diff --git a/libs/spandsp/src/timezone.c b/libs/spandsp/src/timezone.c index d0cab0989e..b991531e69 100644 --- a/libs/spandsp/src/timezone.c +++ b/libs/spandsp/src/timezone.c @@ -1,822 +1,822 @@ -/* - * SpanDSP - a series of DSP components for telephony - * - * timezone.c - Timezone handling for time interpretation - * - * Written by Steve Underwood - * - * Copyright (C) 2010 Steve Underwood - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/*! \file */ - -/* Timezone processing might not seem like a DSP activity, but getting the headers - right on FAXes demands it. We need to handle multiple time zones within a process, - for FAXes related to different parts of the globe, so the system timezone handling - is not adequate. */ - -/* This timezone handling is derived from public domain software by Arthur David Olson - which you may download from ftp://elsie.nci.nih.gov/pub - at the time of writing. */ - -#if defined(HAVE_CONFIG_H) -#include "config.h" -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include "spandsp/telephony.h" -#include "spandsp/timezone.h" - -#include "spandsp/private/timezone.h" - -#if !defined(FALSE) -#define FALSE 0 -#endif - -#if !defined(TRUE) -#define TRUE (!FALSE) -#endif - -#define SECS_PER_MIN 60 -#define MINS_PER_HOUR 60 -#define HOURS_PER_DAY 24 -#define DAYS_PER_WEEK 7 -#define DAYS_PER_NON_LEAP_YEAR 365 -#define DAYS_PER_LEAP_YEAR 366 -#define SECS_PER_HOUR (SECS_PER_MIN*MINS_PER_HOUR) -#define SECS_PER_DAY ((long int) SECS_PER_HOUR*HOURS_PER_DAY) -#define MONTHS_PER_YEAR 12 - -#define TM_YEAR_BASE 1900 - -#define EPOCH_YEAR 1970 -#define EPOCH_WDAY TM_THURSDAY - -#define isleap(y) (((y)%4) == 0 && (((y)%100) != 0 || ((y)%400) == 0)) - -#define isleap_sum(a, b) isleap((a)%400 + (b)%400) - -/* Unlike 's isdigit, this also works if c < 0 | c > UCHAR_MAX. */ -#define is_digit(c) ((unsigned int) (c) - '0' <= 9) - -#define TZ_DEF_RULE_STRING ",M4.1.0,M10.5.0" - -#define JULIAN_DAY 0 /* Jn - Julian day */ -#define DAY_OF_YEAR 1 /* n - day of year */ -#define MONTH_NTH_DAY_OF_WEEK 2 /* Mm.n.d - month, week, day of week */ - -static const char wildabbr[] = " "; - -static const char gmt[] = "GMT"; - -struct tz_rule_s -{ - int r_type; /* Type of rule--see below */ - int r_day; /* Day number of rule */ - int r_week; /* Week number of rule */ - int r_mon; /* Month number of rule */ - long int r_time; /* Transition time of rule */ -}; - -static const int mon_lengths[2][MONTHS_PER_YEAR] = -{ - {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, - {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} -}; - -static const int year_lengths[2] = -{ - DAYS_PER_NON_LEAP_YEAR, - DAYS_PER_LEAP_YEAR -}; - -static int increment_overflow(int *number, int delta) -{ - int number0; - - number0 = *number; - *number += delta; - return (*number < number0) != (delta < 0); -} -/*- End of function --------------------------------------------------------*/ - -static void set_tzname(tz_t *tz) -{ - struct tz_state_s *sp; - const struct tz_ttinfo_s *ttisp; - int i; - - sp = &tz->state; - tz->tzname[0] = wildabbr; - tz->tzname[1] = wildabbr; - for (i = 0; i < sp->typecnt; i++) - { - ttisp = &sp->ttis[i]; - tz->tzname[ttisp->isdst] = &sp->chars[ttisp->abbrind]; - } - for (i = 0; i < sp->timecnt; i++) - { - ttisp = &sp->ttis[sp->types[i]]; - tz->tzname[ttisp->isdst] = &sp->chars[ttisp->abbrind]; - } -} -/*- End of function --------------------------------------------------------*/ - -/* Return the number of leap years through the end of the given year - where, to make the math easy, the answer for year zero is defined as zero. */ -static int leaps_thru_end_of(const int y) -{ - return (y >= 0) ? (y/4 - y/100 + y/400) : -(leaps_thru_end_of(-(y + 1)) + 1); -} -/*- End of function --------------------------------------------------------*/ - -static struct tm *time_sub(const time_t * const timep, const long int offset, const struct tz_state_s * const sp, struct tm * const tmp) -{ - const struct tz_lsinfo_s *lp; - time_t tdays; - const int *ip; - int32_t corr; - int32_t seconds; - int32_t rem; - int idays; - int y; - int hit; - int i; - - corr = 0; - hit = 0; - i = sp->leapcnt; - while (--i >= 0) - { - lp = &sp->lsis[i]; - if (*timep >= lp->trans) - { - if (*timep == lp->trans) - { - hit = ((i == 0 && lp->corr > 0) || lp->corr > sp->lsis[i - 1].corr); - if (hit) - { - while (i > 0 - && - sp->lsis[i].trans == sp->lsis[i - 1].trans + 1 - && - sp->lsis[i].corr == sp->lsis[i - 1].corr + 1) - { - hit++; - --i; - } - } - } - corr = lp->corr; - break; - } - } - y = EPOCH_YEAR; - tdays = *timep/SECS_PER_DAY; - rem = *timep - tdays*SECS_PER_DAY; - while (tdays < 0 || tdays >= year_lengths[isleap(y)]) - { - int newy; - time_t tdelta; - int idelta; - int leapdays; - - tdelta = tdays / DAYS_PER_LEAP_YEAR; - idelta = tdelta; - if (tdelta - idelta >= 1 || idelta - tdelta >= 1) - return NULL; - if (idelta == 0) - idelta = (tdays < 0) ? -1 : 1; - newy = y; - if (increment_overflow(&newy, idelta)) - return NULL; - leapdays = leaps_thru_end_of(newy - 1) - leaps_thru_end_of(y - 1); - tdays -= ((time_t) newy - y)*DAYS_PER_NON_LEAP_YEAR; - tdays -= leapdays; - y = newy; - } - seconds = tdays*SECS_PER_DAY; - tdays = seconds/SECS_PER_DAY; - rem += seconds - tdays*SECS_PER_DAY; - /* Given the range, we can now fearlessly cast... */ - idays = tdays; - rem += (offset - corr); - while (rem < 0) - { - rem += SECS_PER_DAY; - idays--; - } - while (rem >= SECS_PER_DAY) - { - rem -= SECS_PER_DAY; - idays++; - } - while (idays < 0) - { - if (increment_overflow(&y, -1)) - return NULL; - idays += year_lengths[isleap(y)]; - } - while (idays >= year_lengths[isleap(y)]) - { - idays -= year_lengths[isleap(y)]; - if (increment_overflow(&y, 1)) - return NULL; - } - tmp->tm_year = y; - if (increment_overflow(&tmp->tm_year, -TM_YEAR_BASE)) - return NULL; - tmp->tm_yday = idays; - /* The "extra" mods below avoid overflow problems. */ - tmp->tm_wday = EPOCH_WDAY - + ((y - EPOCH_YEAR) % DAYS_PER_WEEK)*(DAYS_PER_NON_LEAP_YEAR % DAYS_PER_WEEK) - + leaps_thru_end_of(y - 1) - - leaps_thru_end_of(EPOCH_YEAR - 1) - + idays; - tmp->tm_wday %= DAYS_PER_WEEK; - if (tmp->tm_wday < 0) - tmp->tm_wday += DAYS_PER_WEEK; - tmp->tm_hour = (int) (rem/SECS_PER_HOUR); - rem %= SECS_PER_HOUR; - tmp->tm_min = (int) (rem/SECS_PER_MIN); - /* A positive leap second requires a special - * representation. This uses "... ??:59:60" et seq. */ - tmp->tm_sec = (int) (rem%SECS_PER_MIN) + hit; - ip = mon_lengths[isleap(y)]; - for (tmp->tm_mon = 0; idays >= ip[tmp->tm_mon]; (tmp->tm_mon)++) - idays -= ip[tmp->tm_mon]; - tmp->tm_mday = (int) (idays + 1); - tmp->tm_isdst = 0; - return tmp; -} -/*- End of function --------------------------------------------------------*/ - -/* Given a pointer into a time zone string, scan until a character that is not - * a valid character in a zone name is found. Return a pointer to that - * character. */ -static const char *get_tzname(const char *strp) -{ - char c; - - while ((c = *strp) != '\0' && !is_digit(c) && c != ',' && c != '-' && c != '+') - strp++; - return strp; -} -/*- End of function --------------------------------------------------------*/ - -/* Given a pointer into a time zone string, extract a number from that string. - * Check that the number is within a specified range; if it is not, return - * NULL. - * Otherwise, return a pointer to the first character not part of the number. */ -static const char *get_num(const char *strp, int * const nump, const int min, const int max) -{ - char c; - int num; - - if (strp == NULL || !is_digit(c = *strp)) - return NULL; - num = 0; - do - { - num = num*10 + (c - '0'); - if (num > max) - return NULL; /* Illegal value */ - c = *++strp; - } - while (is_digit(c)); - if (num < min) - return NULL; /* Illegal value */ - *nump = num; - return strp; -} -/*- End of function --------------------------------------------------------*/ - -/* Given a pointer into a time zone string, extract a number of seconds, - * in hh[:mm[:ss]] form, from the string. - * If any error occurs, return NULL. - * Otherwise, return a pointer to the first character not part of the number - * of seconds. */ -static const char *get_secs(const char *strp, long int * const secsp) -{ - int num; - - /* HOURS_PER_DAY*DAYS_PER_WEEK - 1 allows quasi-Posix rules like - * "M10.4.6/26", which does not conform to Posix, - * but which specifies the equivalent of - * "02:00 on the first Sunday on or after 23 Oct". */ - strp = get_num(strp, &num, 0, HOURS_PER_DAY*DAYS_PER_WEEK - 1); - if (strp == NULL) - return NULL; - *secsp = num*(long int) SECS_PER_HOUR; - if (*strp == ':') - { - strp = get_num(strp + 1, &num, 0, MINS_PER_HOUR - 1); - if (strp == NULL) - return NULL; - *secsp += num*SECS_PER_MIN; - if (*strp == ':') - { - /* SECS_PER_MIN allows for leap seconds. */ - strp = get_num(strp + 1, &num, 0, SECS_PER_MIN); - if (strp == NULL) - return NULL; - *secsp += num; - } - } - return strp; -} -/*- End of function --------------------------------------------------------*/ - -/* Given a pointer into a time zone string, extract an offset, in - * [+-]hh[:mm[:ss]] form, from the string. - * If any error occurs, return NULL. - * Otherwise, return a pointer to the first character not part of the time. */ -static const char *get_offset(const char *strp, long int * const offsetp) -{ - int neg = 0; - - if (*strp == '-') - { - neg = 1; - strp++; - } - else if (*strp == '+') - { - strp++; - } - strp = get_secs(strp, offsetp); - if (strp == NULL) - return NULL; /* Illegal time */ - if (neg) - *offsetp = -*offsetp; - return strp; -} -/*- End of function --------------------------------------------------------*/ - -/* Given a pointer into a time zone string, extract a rule in the form - * date[/time]. See POSIX section 8 for the format of "date" and "time". - * If a valid rule is not found, return NULL. - * Otherwise, return a pointer to the first character not part of the rule. */ -static const char *get_rule(const char *strp, struct tz_rule_s * const rulep) -{ - if (*strp == 'J') - { - /* Julian day. */ - rulep->r_type = JULIAN_DAY; - strp = get_num(strp + 1, &rulep->r_day, 1, DAYS_PER_NON_LEAP_YEAR); - } - else if (*strp == 'M') - { - /* Month, week, day. */ - rulep->r_type = MONTH_NTH_DAY_OF_WEEK; - strp = get_num(strp + 1, &rulep->r_mon, 1, MONTHS_PER_YEAR); - if (strp == NULL || *strp++ != '.') - return NULL; - strp = get_num(strp, &rulep->r_week, 1, 5); - if (strp == NULL || *strp++ != '.') - return NULL; - strp = get_num(strp, &rulep->r_day, 0, DAYS_PER_WEEK - 1); - } - else if (is_digit(*strp)) - { - /* Day of the year. */ - rulep->r_type = DAY_OF_YEAR; - strp = get_num(strp, &rulep->r_day, 0, DAYS_PER_LEAP_YEAR - 1); - } - else - { - /* Invalid format */ - return NULL; - } - if (strp == NULL) - return NULL; - if (*strp == '/') - { - /* Time specified. */ - strp = get_secs(strp + 1, &rulep->r_time); - } - else - { - /* Default = 2:00:00 */ - rulep->r_time = 2*SECS_PER_HOUR; - } - return strp; -} -/*- End of function --------------------------------------------------------*/ - -/* Given the Epoch-relative time of January 1, 00:00:00 UTC, in a year, the - * year, a rule, and the offset from UTC at the time that rule takes effect, - * calculate the Epoch-relative time that rule takes effect. */ -static time_t trans_time(const time_t janfirst, const int year, const struct tz_rule_s * const rulep, const long int offset) -{ - int leapyear; - time_t value; - int i; - int d; - int m1; - int yy0; - int yy1; - int yy2; - int dow; - - value = 0; - leapyear = isleap(year); - switch (rulep->r_type) - { - case JULIAN_DAY: - /* Jn - Julian day, 1 == January 1, 60 == March 1 even in leap - * years. - * In non-leap years, or if the day number is 59 or less, just - * add SECS_PER_DAY times the day number-1 to the time of - * January 1, midnight, to get the day. */ - value = janfirst + (rulep->r_day - 1)*SECS_PER_DAY; - if (leapyear && rulep->r_day >= 60) - value += SECS_PER_DAY; - break; - case DAY_OF_YEAR: - /* n - day of year. - * Just add SECS_PER_DAY times the day number to the time of - * January 1, midnight, to get the day. */ - value = janfirst + rulep->r_day * SECS_PER_DAY; - break; - case MONTH_NTH_DAY_OF_WEEK: - /* Mm.n.d - nth "dth day" of month m. */ - value = janfirst; - for (i = 0; i < rulep->r_mon - 1; i++) - value += mon_lengths[leapyear][i]*SECS_PER_DAY; - - /* Use Zeller's Congruence to get day-of-week of first day of month. */ - m1 = (rulep->r_mon + 9)%12 + 1; - yy0 = (rulep->r_mon <= 2) ? (year - 1) : year; - yy1 = yy0/100; - yy2 = yy0%100; - dow = ((26*m1 - 2)/10 + 1 + yy2 + yy2/4 + yy1/4 - 2*yy1)%7; - if (dow < 0) - dow += DAYS_PER_WEEK; - - /* "dow" is the day-of-week of the first day of the month. Get - * the day-of-month (zero-origin) of the first "dow" day of the - * month. */ - d = rulep->r_day - dow; - if (d < 0) - d += DAYS_PER_WEEK; - for (i = 1; i < rulep->r_week; i++) - { - if (d + DAYS_PER_WEEK >= mon_lengths[leapyear][rulep->r_mon - 1]) - break; - d += DAYS_PER_WEEK; - } - - /* "d" is the day-of-month (zero-origin) of the day we want. */ - value += d*SECS_PER_DAY; - break; - } - - /* "value" is the Epoch-relative time of 00:00:00 UTC on the day in - * question. To get the Epoch-relative time of the specified local - * time on that day, add the transition time and the current offset - * from UTC. */ - return value + rulep->r_time + offset; -} -/*- End of function --------------------------------------------------------*/ - -/* Given a POSIX section 8-style TZ string, fill in the rule tables as - appropriate. */ -static int tzparse(const char *name, struct tz_state_s * const sp, const int lastditch) -{ - const char *stdname; - const char *dstname; - size_t stdlen; - size_t dstlen; - long int stdoffset; - long int dstoffset; - long int theirstdoffset; - long int theirdstoffset; - long int theiroffset; - unsigned char *typep; - char *cp; - int load_result; - int isdst; - int i; - int j; - int year; - struct tz_rule_s start; - struct tz_rule_s end; - time_t *atp; - time_t janfirst; - time_t starttime; - time_t endtime; - - dstname = NULL; - stdname = name; - if (lastditch) - { - stdlen = strlen(name); /* Length of standard zone name */ - name += stdlen; - if (stdlen >= sizeof(sp->chars)) - stdlen = sizeof(sp->chars) - 1; - stdoffset = 0; - } - else - { - name = get_tzname(name); - stdlen = name - stdname; - if (stdlen < 3) - return -1; - if (*name == '\0') - return -1; - name = get_offset(name, &stdoffset); - if (name == NULL) - return -1; - } - load_result = -1; - if (load_result != 0) - sp->leapcnt = 0; /* So, we're off a little */ - if (*name != '\0') - { - dstname = name; - name = get_tzname(name); - dstlen = name - dstname; /* Length of DST zone name */ - if (dstlen < 3) - return -1; - if (*name != '\0' && *name != ',' && *name != ';') - { - if ((name = get_offset(name, &dstoffset)) == NULL) - return -1; - } - else - { - dstoffset = stdoffset - SECS_PER_HOUR; - } - if (*name == '\0' && load_result != 0) - name = TZ_DEF_RULE_STRING; - if (*name == ',' || *name == ';') - { - if ((name = get_rule(name + 1, &start)) == NULL) - return -1; - if (*name++ != ',') - return -1; - if ((name = get_rule(name, &end)) == NULL) - return -1; - if (*name != '\0') - return -1; - sp->typecnt = 2; /* Standard time and DST */ - /* Two transitions per year, from EPOCH_YEAR to 2037. */ - sp->timecnt = 2*(2037 - EPOCH_YEAR + 1); - if (sp->timecnt > TZ_MAX_TIMES) - return -1; - sp->ttis[0].gmtoff = -dstoffset; - sp->ttis[0].isdst = 1; - sp->ttis[0].abbrind = stdlen + 1; - sp->ttis[1].gmtoff = -stdoffset; - sp->ttis[1].isdst = 0; - sp->ttis[1].abbrind = 0; - atp = sp->ats; - typep = sp->types; - janfirst = 0; - for (year = EPOCH_YEAR; year <= 2037; year++) - { - starttime = trans_time(janfirst, year, &start, stdoffset); - endtime = trans_time(janfirst, year, &end, dstoffset); - if (starttime > endtime) - { - *atp++ = endtime; - *typep++ = 1; /* DST ends */ - *atp++ = starttime; - *typep++ = 0; /* DST begins */ - } - else - { - *atp++ = starttime; - *typep++ = 0; /* DST begins */ - *atp++ = endtime; - *typep++ = 1; /* DST ends */ - } - janfirst += year_lengths[isleap(year)]*SECS_PER_DAY; - } - } - else - { - if (*name != '\0') - return -1; - /* Initial values of theirstdoffset and theirdstoffset. */ - theirstdoffset = 0; - for (i = 0; i < sp->timecnt; i++) - { - j = sp->types[i]; - if (!sp->ttis[j].isdst) - { - theirstdoffset = -sp->ttis[j].gmtoff; - break; - } - } - theirdstoffset = 0; - for (i = 0; i < sp->timecnt; i++) - { - j = sp->types[i]; - if (sp->ttis[j].isdst) - { - theirdstoffset = -sp->ttis[j].gmtoff; - break; - } - } - /* Initially we're assumed to be in standard time. */ - isdst = FALSE; - theiroffset = theirstdoffset; - /* Now juggle transition times and types tracking offsets as you do. */ - for (i = 0; i < sp->timecnt; i++) - { - j = sp->types[i]; - sp->types[i] = sp->ttis[j].isdst; - if (sp->ttis[j].ttisgmt) - { - /* No adjustment to transition time */ - } - else - { - /* If summer time is in effect, and the - * transition time was not specified as - * standard time, add the summer time - * offset to the transition time; - * otherwise, add the standard time - * offset to the transition time. */ - /* Transitions from DST to DDST - * will effectively disappear since - * POSIX provides for only one DST - * offset. */ - if (isdst && !sp->ttis[j].ttisstd) - sp->ats[i] += (dstoffset - theirdstoffset); - else - sp->ats[i] += (stdoffset - theirstdoffset); - } - theiroffset = -sp->ttis[j].gmtoff; - if (sp->ttis[j].isdst) - theirdstoffset = theiroffset; - else - theirstdoffset = theiroffset; - } - /* Finally, fill in ttis. ttisstd and ttisgmt need not be handled. */ - sp->ttis[0].gmtoff = -stdoffset; - sp->ttis[0].isdst = FALSE; - sp->ttis[0].abbrind = 0; - sp->ttis[1].gmtoff = -dstoffset; - sp->ttis[1].isdst = TRUE; - sp->ttis[1].abbrind = stdlen + 1; - sp->typecnt = 2; - } - } - else - { - dstlen = 0; - sp->typecnt = 1; /* Only standard time */ - sp->timecnt = 0; - sp->ttis[0].gmtoff = -stdoffset; - sp->ttis[0].isdst = 0; - sp->ttis[0].abbrind = 0; - } - sp->charcnt = stdlen + 1; - if (dstlen != 0) - sp->charcnt += dstlen + 1; - if ((size_t) sp->charcnt > sizeof(sp->chars)) - return -1; - cp = sp->chars; - strncpy(cp, stdname, stdlen); - cp += stdlen; - *cp++ = '\0'; - if (dstlen != 0) - { - strncpy(cp, dstname, dstlen); - cp[dstlen] = '\0'; - } - return 0; -} -/*- End of function --------------------------------------------------------*/ - -static void tz_set(tz_t *tz, const char *tzstring) -{ - const char *name = ""; - struct tz_state_s *lclptr = &tz->state; - - if (tzstring) - name = tzstring; - - /* See if we are already set OK */ - if (tz->lcl_is_set > 0 && strcmp(tz->lcl_tzname, name) == 0) - return; - tz->lcl_is_set = strlen(name) < sizeof(tz->lcl_tzname); - if (tz->lcl_is_set) - strcpy(tz->lcl_tzname, name); - - if (name[0] == '\0') - { - /* User wants it fast rather than right, so, we're off a little. */ - lclptr->leapcnt = 0; - lclptr->timecnt = 0; - lclptr->typecnt = 0; - lclptr->ttis[0].isdst = 0; - lclptr->ttis[0].gmtoff = 0; - lclptr->ttis[0].abbrind = 0; - strcpy(lclptr->chars, gmt); - } - else if (name[0] == ':' || tzparse(name, lclptr, FALSE) != 0) - { - tzparse(gmt, lclptr, TRUE); - } - set_tzname(tz); -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) tz_localtime(tz_t *tz, struct tm *tmp, time_t t) -{ - struct tz_state_s *sp; - const struct tz_ttinfo_s *ttisp; - int i; - - sp = &tz->state; - - if (sp->timecnt == 0 || t < sp->ats[0]) - { - i = 0; - while (sp->ttis[i].isdst) - { - if (++i >= sp->typecnt) - { - i = 0; - break; - } - } - } - else - { - for (i = 1; i < sp->timecnt; i++) - { - if (t < sp->ats[i]) - break; - } - i = (int) sp->types[i - 1]; - } - ttisp = &sp->ttis[i]; - time_sub(&t, ttisp->gmtoff, sp, tmp); - tmp->tm_isdst = ttisp->isdst; - tz->tzname[tmp->tm_isdst] = &sp->chars[ttisp->abbrind]; - return 0; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(const char *) tz_tzname(tz_t *tz, int isdst) -{ - return tz->tzname[(!isdst) ? 0 : 1]; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(tz_t *) tz_init(tz_t *tz, const char *tzstring) -{ - if (tz == NULL) - { - if ((tz = (tz_t *) malloc(sizeof(*tz))) == NULL) - return NULL; - } - memset(tz, 0, sizeof(*tz)); - tz->tzname[0] = - tz->tzname[1] = wildabbr; - tz_set(tz, tzstring); - return tz; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) tz_release(tz_t *tz) -{ - return 0; -} -/*- End of function --------------------------------------------------------*/ - -SPAN_DECLARE(int) tz_free(tz_t *tz) -{ - if (tz) - free(tz); - return 0; -} -/*- End of function --------------------------------------------------------*/ -/*- End of file ------------------------------------------------------------*/ +/* + * SpanDSP - a series of DSP components for telephony + * + * timezone.c - Timezone handling for time interpretation + * + * Written by Steve Underwood + * + * Copyright (C) 2010 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/*! \file */ + +/* Timezone processing might not seem like a DSP activity, but getting the headers + right on FAXes demands it. We need to handle multiple time zones within a process, + for FAXes related to different parts of the globe, so the system timezone handling + is not adequate. */ + +/* This timezone handling is derived from public domain software by Arthur David Olson + which you may download from ftp://elsie.nci.nih.gov/pub + at the time of writing. */ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "spandsp/telephony.h" +#include "spandsp/timezone.h" + +#include "spandsp/private/timezone.h" + +#if !defined(FALSE) +#define FALSE 0 +#endif + +#if !defined(TRUE) +#define TRUE (!FALSE) +#endif + +#define SECS_PER_MIN 60 +#define MINS_PER_HOUR 60 +#define HOURS_PER_DAY 24 +#define DAYS_PER_WEEK 7 +#define DAYS_PER_NON_LEAP_YEAR 365 +#define DAYS_PER_LEAP_YEAR 366 +#define SECS_PER_HOUR (SECS_PER_MIN*MINS_PER_HOUR) +#define SECS_PER_DAY ((long int) SECS_PER_HOUR*HOURS_PER_DAY) +#define MONTHS_PER_YEAR 12 + +#define TM_YEAR_BASE 1900 + +#define EPOCH_YEAR 1970 +#define EPOCH_WDAY TM_THURSDAY + +#define isleap(y) (((y)%4) == 0 && (((y)%100) != 0 || ((y)%400) == 0)) + +#define isleap_sum(a, b) isleap((a)%400 + (b)%400) + +/* Unlike 's isdigit, this also works if c < 0 | c > UCHAR_MAX. */ +#define is_digit(c) ((unsigned int) (c) - '0' <= 9) + +#define TZ_DEF_RULE_STRING ",M4.1.0,M10.5.0" + +#define JULIAN_DAY 0 /* Jn - Julian day */ +#define DAY_OF_YEAR 1 /* n - day of year */ +#define MONTH_NTH_DAY_OF_WEEK 2 /* Mm.n.d - month, week, day of week */ + +static const char wildabbr[] = " "; + +static const char gmt[] = "GMT"; + +struct tz_rule_s +{ + int r_type; /* Type of rule--see below */ + int r_day; /* Day number of rule */ + int r_week; /* Week number of rule */ + int r_mon; /* Month number of rule */ + long int r_time; /* Transition time of rule */ +}; + +static const int mon_lengths[2][MONTHS_PER_YEAR] = +{ + {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, + {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} +}; + +static const int year_lengths[2] = +{ + DAYS_PER_NON_LEAP_YEAR, + DAYS_PER_LEAP_YEAR +}; + +static int increment_overflow(int *number, int delta) +{ + int number0; + + number0 = *number; + *number += delta; + return (*number < number0) != (delta < 0); +} +/*- End of function --------------------------------------------------------*/ + +static void set_tzname(tz_t *tz) +{ + struct tz_state_s *sp; + const struct tz_ttinfo_s *ttisp; + int i; + + sp = &tz->state; + tz->tzname[0] = wildabbr; + tz->tzname[1] = wildabbr; + for (i = 0; i < sp->typecnt; i++) + { + ttisp = &sp->ttis[i]; + tz->tzname[ttisp->isdst] = &sp->chars[ttisp->abbrind]; + } + for (i = 0; i < sp->timecnt; i++) + { + ttisp = &sp->ttis[sp->types[i]]; + tz->tzname[ttisp->isdst] = &sp->chars[ttisp->abbrind]; + } +} +/*- End of function --------------------------------------------------------*/ + +/* Return the number of leap years through the end of the given year + where, to make the math easy, the answer for year zero is defined as zero. */ +static int leaps_thru_end_of(const int y) +{ + return (y >= 0) ? (y/4 - y/100 + y/400) : -(leaps_thru_end_of(-(y + 1)) + 1); +} +/*- End of function --------------------------------------------------------*/ + +static struct tm *time_sub(const time_t * const timep, const long int offset, const struct tz_state_s * const sp, struct tm * const tmp) +{ + const struct tz_lsinfo_s *lp; + time_t tdays; + const int *ip; + int32_t corr; + int32_t seconds; + int32_t rem; + int idays; + int y; + int hit; + int i; + + corr = 0; + hit = 0; + i = sp->leapcnt; + while (--i >= 0) + { + lp = &sp->lsis[i]; + if (*timep >= lp->trans) + { + if (*timep == lp->trans) + { + hit = ((i == 0 && lp->corr > 0) || lp->corr > sp->lsis[i - 1].corr); + if (hit) + { + while (i > 0 + && + sp->lsis[i].trans == sp->lsis[i - 1].trans + 1 + && + sp->lsis[i].corr == sp->lsis[i - 1].corr + 1) + { + hit++; + --i; + } + } + } + corr = lp->corr; + break; + } + } + y = EPOCH_YEAR; + tdays = *timep/SECS_PER_DAY; + rem = *timep - tdays*SECS_PER_DAY; + while (tdays < 0 || tdays >= year_lengths[isleap(y)]) + { + int newy; + time_t tdelta; + int idelta; + int leapdays; + + tdelta = tdays / DAYS_PER_LEAP_YEAR; + idelta = tdelta; + if (tdelta - idelta >= 1 || idelta - tdelta >= 1) + return NULL; + if (idelta == 0) + idelta = (tdays < 0) ? -1 : 1; + newy = y; + if (increment_overflow(&newy, idelta)) + return NULL; + leapdays = leaps_thru_end_of(newy - 1) - leaps_thru_end_of(y - 1); + tdays -= ((time_t) newy - y)*DAYS_PER_NON_LEAP_YEAR; + tdays -= leapdays; + y = newy; + } + seconds = tdays*SECS_PER_DAY; + tdays = seconds/SECS_PER_DAY; + rem += seconds - tdays*SECS_PER_DAY; + /* Given the range, we can now fearlessly cast... */ + idays = tdays; + rem += (offset - corr); + while (rem < 0) + { + rem += SECS_PER_DAY; + idays--; + } + while (rem >= SECS_PER_DAY) + { + rem -= SECS_PER_DAY; + idays++; + } + while (idays < 0) + { + if (increment_overflow(&y, -1)) + return NULL; + idays += year_lengths[isleap(y)]; + } + while (idays >= year_lengths[isleap(y)]) + { + idays -= year_lengths[isleap(y)]; + if (increment_overflow(&y, 1)) + return NULL; + } + tmp->tm_year = y; + if (increment_overflow(&tmp->tm_year, -TM_YEAR_BASE)) + return NULL; + tmp->tm_yday = idays; + /* The "extra" mods below avoid overflow problems. */ + tmp->tm_wday = EPOCH_WDAY + + ((y - EPOCH_YEAR) % DAYS_PER_WEEK)*(DAYS_PER_NON_LEAP_YEAR % DAYS_PER_WEEK) + + leaps_thru_end_of(y - 1) + - leaps_thru_end_of(EPOCH_YEAR - 1) + + idays; + tmp->tm_wday %= DAYS_PER_WEEK; + if (tmp->tm_wday < 0) + tmp->tm_wday += DAYS_PER_WEEK; + tmp->tm_hour = (int) (rem/SECS_PER_HOUR); + rem %= SECS_PER_HOUR; + tmp->tm_min = (int) (rem/SECS_PER_MIN); + /* A positive leap second requires a special + * representation. This uses "... ??:59:60" et seq. */ + tmp->tm_sec = (int) (rem%SECS_PER_MIN) + hit; + ip = mon_lengths[isleap(y)]; + for (tmp->tm_mon = 0; idays >= ip[tmp->tm_mon]; (tmp->tm_mon)++) + idays -= ip[tmp->tm_mon]; + tmp->tm_mday = (int) (idays + 1); + tmp->tm_isdst = 0; + return tmp; +} +/*- End of function --------------------------------------------------------*/ + +/* Given a pointer into a time zone string, scan until a character that is not + * a valid character in a zone name is found. Return a pointer to that + * character. */ +static const char *get_tzname(const char *strp) +{ + char c; + + while ((c = *strp) != '\0' && !is_digit(c) && c != ',' && c != '-' && c != '+') + strp++; + return strp; +} +/*- End of function --------------------------------------------------------*/ + +/* Given a pointer into a time zone string, extract a number from that string. + * Check that the number is within a specified range; if it is not, return + * NULL. + * Otherwise, return a pointer to the first character not part of the number. */ +static const char *get_num(const char *strp, int * const nump, const int min, const int max) +{ + char c; + int num; + + if (strp == NULL || !is_digit(c = *strp)) + return NULL; + num = 0; + do + { + num = num*10 + (c - '0'); + if (num > max) + return NULL; /* Illegal value */ + c = *++strp; + } + while (is_digit(c)); + if (num < min) + return NULL; /* Illegal value */ + *nump = num; + return strp; +} +/*- End of function --------------------------------------------------------*/ + +/* Given a pointer into a time zone string, extract a number of seconds, + * in hh[:mm[:ss]] form, from the string. + * If any error occurs, return NULL. + * Otherwise, return a pointer to the first character not part of the number + * of seconds. */ +static const char *get_secs(const char *strp, long int * const secsp) +{ + int num; + + /* HOURS_PER_DAY*DAYS_PER_WEEK - 1 allows quasi-Posix rules like + * "M10.4.6/26", which does not conform to Posix, + * but which specifies the equivalent of + * "02:00 on the first Sunday on or after 23 Oct". */ + strp = get_num(strp, &num, 0, HOURS_PER_DAY*DAYS_PER_WEEK - 1); + if (strp == NULL) + return NULL; + *secsp = num*(long int) SECS_PER_HOUR; + if (*strp == ':') + { + strp = get_num(strp + 1, &num, 0, MINS_PER_HOUR - 1); + if (strp == NULL) + return NULL; + *secsp += num*SECS_PER_MIN; + if (*strp == ':') + { + /* SECS_PER_MIN allows for leap seconds. */ + strp = get_num(strp + 1, &num, 0, SECS_PER_MIN); + if (strp == NULL) + return NULL; + *secsp += num; + } + } + return strp; +} +/*- End of function --------------------------------------------------------*/ + +/* Given a pointer into a time zone string, extract an offset, in + * [+-]hh[:mm[:ss]] form, from the string. + * If any error occurs, return NULL. + * Otherwise, return a pointer to the first character not part of the time. */ +static const char *get_offset(const char *strp, long int * const offsetp) +{ + int neg = 0; + + if (*strp == '-') + { + neg = 1; + strp++; + } + else if (*strp == '+') + { + strp++; + } + strp = get_secs(strp, offsetp); + if (strp == NULL) + return NULL; /* Illegal time */ + if (neg) + *offsetp = -*offsetp; + return strp; +} +/*- End of function --------------------------------------------------------*/ + +/* Given a pointer into a time zone string, extract a rule in the form + * date[/time]. See POSIX section 8 for the format of "date" and "time". + * If a valid rule is not found, return NULL. + * Otherwise, return a pointer to the first character not part of the rule. */ +static const char *get_rule(const char *strp, struct tz_rule_s * const rulep) +{ + if (*strp == 'J') + { + /* Julian day. */ + rulep->r_type = JULIAN_DAY; + strp = get_num(strp + 1, &rulep->r_day, 1, DAYS_PER_NON_LEAP_YEAR); + } + else if (*strp == 'M') + { + /* Month, week, day. */ + rulep->r_type = MONTH_NTH_DAY_OF_WEEK; + strp = get_num(strp + 1, &rulep->r_mon, 1, MONTHS_PER_YEAR); + if (strp == NULL || *strp++ != '.') + return NULL; + strp = get_num(strp, &rulep->r_week, 1, 5); + if (strp == NULL || *strp++ != '.') + return NULL; + strp = get_num(strp, &rulep->r_day, 0, DAYS_PER_WEEK - 1); + } + else if (is_digit(*strp)) + { + /* Day of the year. */ + rulep->r_type = DAY_OF_YEAR; + strp = get_num(strp, &rulep->r_day, 0, DAYS_PER_LEAP_YEAR - 1); + } + else + { + /* Invalid format */ + return NULL; + } + if (strp == NULL) + return NULL; + if (*strp == '/') + { + /* Time specified. */ + strp = get_secs(strp + 1, &rulep->r_time); + } + else + { + /* Default = 2:00:00 */ + rulep->r_time = 2*SECS_PER_HOUR; + } + return strp; +} +/*- End of function --------------------------------------------------------*/ + +/* Given the Epoch-relative time of January 1, 00:00:00 UTC, in a year, the + * year, a rule, and the offset from UTC at the time that rule takes effect, + * calculate the Epoch-relative time that rule takes effect. */ +static time_t trans_time(const time_t janfirst, const int year, const struct tz_rule_s * const rulep, const long int offset) +{ + int leapyear; + time_t value; + int i; + int d; + int m1; + int yy0; + int yy1; + int yy2; + int dow; + + value = 0; + leapyear = isleap(year); + switch (rulep->r_type) + { + case JULIAN_DAY: + /* Jn - Julian day, 1 == January 1, 60 == March 1 even in leap + * years. + * In non-leap years, or if the day number is 59 or less, just + * add SECS_PER_DAY times the day number-1 to the time of + * January 1, midnight, to get the day. */ + value = janfirst + (rulep->r_day - 1)*SECS_PER_DAY; + if (leapyear && rulep->r_day >= 60) + value += SECS_PER_DAY; + break; + case DAY_OF_YEAR: + /* n - day of year. + * Just add SECS_PER_DAY times the day number to the time of + * January 1, midnight, to get the day. */ + value = janfirst + rulep->r_day * SECS_PER_DAY; + break; + case MONTH_NTH_DAY_OF_WEEK: + /* Mm.n.d - nth "dth day" of month m. */ + value = janfirst; + for (i = 0; i < rulep->r_mon - 1; i++) + value += mon_lengths[leapyear][i]*SECS_PER_DAY; + + /* Use Zeller's Congruence to get day-of-week of first day of month. */ + m1 = (rulep->r_mon + 9)%12 + 1; + yy0 = (rulep->r_mon <= 2) ? (year - 1) : year; + yy1 = yy0/100; + yy2 = yy0%100; + dow = ((26*m1 - 2)/10 + 1 + yy2 + yy2/4 + yy1/4 - 2*yy1)%7; + if (dow < 0) + dow += DAYS_PER_WEEK; + + /* "dow" is the day-of-week of the first day of the month. Get + * the day-of-month (zero-origin) of the first "dow" day of the + * month. */ + d = rulep->r_day - dow; + if (d < 0) + d += DAYS_PER_WEEK; + for (i = 1; i < rulep->r_week; i++) + { + if (d + DAYS_PER_WEEK >= mon_lengths[leapyear][rulep->r_mon - 1]) + break; + d += DAYS_PER_WEEK; + } + + /* "d" is the day-of-month (zero-origin) of the day we want. */ + value += d*SECS_PER_DAY; + break; + } + + /* "value" is the Epoch-relative time of 00:00:00 UTC on the day in + * question. To get the Epoch-relative time of the specified local + * time on that day, add the transition time and the current offset + * from UTC. */ + return value + rulep->r_time + offset; +} +/*- End of function --------------------------------------------------------*/ + +/* Given a POSIX section 8-style TZ string, fill in the rule tables as + appropriate. */ +static int tzparse(const char *name, struct tz_state_s * const sp, const int lastditch) +{ + const char *stdname; + const char *dstname; + size_t stdlen; + size_t dstlen; + long int stdoffset; + long int dstoffset; + long int theirstdoffset; + long int theirdstoffset; + long int theiroffset; + unsigned char *typep; + char *cp; + int load_result; + int isdst; + int i; + int j; + int year; + struct tz_rule_s start; + struct tz_rule_s end; + time_t *atp; + time_t janfirst; + time_t starttime; + time_t endtime; + + dstname = NULL; + stdname = name; + if (lastditch) + { + stdlen = strlen(name); /* Length of standard zone name */ + name += stdlen; + if (stdlen >= sizeof(sp->chars)) + stdlen = sizeof(sp->chars) - 1; + stdoffset = 0; + } + else + { + name = get_tzname(name); + stdlen = name - stdname; + if (stdlen < 3) + return -1; + if (*name == '\0') + return -1; + name = get_offset(name, &stdoffset); + if (name == NULL) + return -1; + } + load_result = -1; + if (load_result != 0) + sp->leapcnt = 0; /* So, we're off a little */ + if (*name != '\0') + { + dstname = name; + name = get_tzname(name); + dstlen = name - dstname; /* Length of DST zone name */ + if (dstlen < 3) + return -1; + if (*name != '\0' && *name != ',' && *name != ';') + { + if ((name = get_offset(name, &dstoffset)) == NULL) + return -1; + } + else + { + dstoffset = stdoffset - SECS_PER_HOUR; + } + if (*name == '\0' && load_result != 0) + name = TZ_DEF_RULE_STRING; + if (*name == ',' || *name == ';') + { + if ((name = get_rule(name + 1, &start)) == NULL) + return -1; + if (*name++ != ',') + return -1; + if ((name = get_rule(name, &end)) == NULL) + return -1; + if (*name != '\0') + return -1; + sp->typecnt = 2; /* Standard time and DST */ + /* Two transitions per year, from EPOCH_YEAR to 2037. */ + sp->timecnt = 2*(2037 - EPOCH_YEAR + 1); + if (sp->timecnt > TZ_MAX_TIMES) + return -1; + sp->ttis[0].gmtoff = -dstoffset; + sp->ttis[0].isdst = 1; + sp->ttis[0].abbrind = stdlen + 1; + sp->ttis[1].gmtoff = -stdoffset; + sp->ttis[1].isdst = 0; + sp->ttis[1].abbrind = 0; + atp = sp->ats; + typep = sp->types; + janfirst = 0; + for (year = EPOCH_YEAR; year <= 2037; year++) + { + starttime = trans_time(janfirst, year, &start, stdoffset); + endtime = trans_time(janfirst, year, &end, dstoffset); + if (starttime > endtime) + { + *atp++ = endtime; + *typep++ = 1; /* DST ends */ + *atp++ = starttime; + *typep++ = 0; /* DST begins */ + } + else + { + *atp++ = starttime; + *typep++ = 0; /* DST begins */ + *atp++ = endtime; + *typep++ = 1; /* DST ends */ + } + janfirst += year_lengths[isleap(year)]*SECS_PER_DAY; + } + } + else + { + if (*name != '\0') + return -1; + /* Initial values of theirstdoffset and theirdstoffset. */ + theirstdoffset = 0; + for (i = 0; i < sp->timecnt; i++) + { + j = sp->types[i]; + if (!sp->ttis[j].isdst) + { + theirstdoffset = -sp->ttis[j].gmtoff; + break; + } + } + theirdstoffset = 0; + for (i = 0; i < sp->timecnt; i++) + { + j = sp->types[i]; + if (sp->ttis[j].isdst) + { + theirdstoffset = -sp->ttis[j].gmtoff; + break; + } + } + /* Initially we're assumed to be in standard time. */ + isdst = FALSE; + theiroffset = theirstdoffset; + /* Now juggle transition times and types tracking offsets as you do. */ + for (i = 0; i < sp->timecnt; i++) + { + j = sp->types[i]; + sp->types[i] = sp->ttis[j].isdst; + if (sp->ttis[j].ttisgmt) + { + /* No adjustment to transition time */ + } + else + { + /* If summer time is in effect, and the + * transition time was not specified as + * standard time, add the summer time + * offset to the transition time; + * otherwise, add the standard time + * offset to the transition time. */ + /* Transitions from DST to DDST + * will effectively disappear since + * POSIX provides for only one DST + * offset. */ + if (isdst && !sp->ttis[j].ttisstd) + sp->ats[i] += (dstoffset - theirdstoffset); + else + sp->ats[i] += (stdoffset - theirstdoffset); + } + theiroffset = -sp->ttis[j].gmtoff; + if (sp->ttis[j].isdst) + theirdstoffset = theiroffset; + else + theirstdoffset = theiroffset; + } + /* Finally, fill in ttis. ttisstd and ttisgmt need not be handled. */ + sp->ttis[0].gmtoff = -stdoffset; + sp->ttis[0].isdst = FALSE; + sp->ttis[0].abbrind = 0; + sp->ttis[1].gmtoff = -dstoffset; + sp->ttis[1].isdst = TRUE; + sp->ttis[1].abbrind = stdlen + 1; + sp->typecnt = 2; + } + } + else + { + dstlen = 0; + sp->typecnt = 1; /* Only standard time */ + sp->timecnt = 0; + sp->ttis[0].gmtoff = -stdoffset; + sp->ttis[0].isdst = 0; + sp->ttis[0].abbrind = 0; + } + sp->charcnt = stdlen + 1; + if (dstlen != 0) + sp->charcnt += dstlen + 1; + if ((size_t) sp->charcnt > sizeof(sp->chars)) + return -1; + cp = sp->chars; + strncpy(cp, stdname, stdlen); + cp += stdlen; + *cp++ = '\0'; + if (dstlen != 0) + { + strncpy(cp, dstname, dstlen); + cp[dstlen] = '\0'; + } + return 0; +} +/*- End of function --------------------------------------------------------*/ + +static void tz_set(tz_t *tz, const char *tzstring) +{ + const char *name = ""; + struct tz_state_s *lclptr = &tz->state; + + if (tzstring) + name = tzstring; + + /* See if we are already set OK */ + if (tz->lcl_is_set > 0 && strcmp(tz->lcl_tzname, name) == 0) + return; + tz->lcl_is_set = strlen(name) < sizeof(tz->lcl_tzname); + if (tz->lcl_is_set) + strcpy(tz->lcl_tzname, name); + + if (name[0] == '\0') + { + /* User wants it fast rather than right, so, we're off a little. */ + lclptr->leapcnt = 0; + lclptr->timecnt = 0; + lclptr->typecnt = 0; + lclptr->ttis[0].isdst = 0; + lclptr->ttis[0].gmtoff = 0; + lclptr->ttis[0].abbrind = 0; + strcpy(lclptr->chars, gmt); + } + else if (name[0] == ':' || tzparse(name, lclptr, FALSE) != 0) + { + tzparse(gmt, lclptr, TRUE); + } + set_tzname(tz); +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(int) tz_localtime(tz_t *tz, struct tm *tmp, time_t t) +{ + struct tz_state_s *sp; + const struct tz_ttinfo_s *ttisp; + int i; + + sp = &tz->state; + + if (sp->timecnt == 0 || t < sp->ats[0]) + { + i = 0; + while (sp->ttis[i].isdst) + { + if (++i >= sp->typecnt) + { + i = 0; + break; + } + } + } + else + { + for (i = 1; i < sp->timecnt; i++) + { + if (t < sp->ats[i]) + break; + } + i = (int) sp->types[i - 1]; + } + ttisp = &sp->ttis[i]; + time_sub(&t, ttisp->gmtoff, sp, tmp); + tmp->tm_isdst = ttisp->isdst; + tz->tzname[tmp->tm_isdst] = &sp->chars[ttisp->abbrind]; + return 0; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(const char *) tz_tzname(tz_t *tz, int isdst) +{ + return tz->tzname[(!isdst) ? 0 : 1]; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(tz_t *) tz_init(tz_t *tz, const char *tzstring) +{ + if (tz == NULL) + { + if ((tz = (tz_t *) malloc(sizeof(*tz))) == NULL) + return NULL; + } + memset(tz, 0, sizeof(*tz)); + tz->tzname[0] = + tz->tzname[1] = wildabbr; + tz_set(tz, tzstring); + return tz; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(int) tz_release(tz_t *tz) +{ + return 0; +} +/*- End of function --------------------------------------------------------*/ + +SPAN_DECLARE(int) tz_free(tz_t *tz) +{ + if (tz) + free(tz); + return 0; +} +/*- End of function --------------------------------------------------------*/ +/*- End of file ------------------------------------------------------------*/ From a763fd434a79f0195480d51c53ea3f4f1dacc923 Mon Sep 17 00:00:00 2001 From: cypromis Date: Sun, 25 Jul 2010 09:57:54 +0200 Subject: [PATCH 052/161] more windows endings ..... --- libs/spandsp/src/spandsp/private/timezone.h | 180 ++++++++++---------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/libs/spandsp/src/spandsp/private/timezone.h b/libs/spandsp/src/spandsp/private/timezone.h index b1c770b364..9f28cc3d2b 100644 --- a/libs/spandsp/src/spandsp/private/timezone.h +++ b/libs/spandsp/src/spandsp/private/timezone.h @@ -1,90 +1,90 @@ -/* - * SpanDSP - a series of DSP components for telephony - * - * private/timezone.h - Timezone handling for time interpretation - * - * Written by Steve Underwood - * - * Copyright (C) 2010 Steve Underwood - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#if !defined(_SPANDSP_PRIVATE_TIMEZONE_H_) -#define _SPANDSP_PRIVATE_TIMEZONE_H_ - -#define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */ - -#define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */ - -#define TZNAME_MAX 255 - -/* The TZ_MAX_TIMES value below is enough to handle a bit more than a - * year's worth of solar time (corrected daily to the nearest second) or - * 138 years of Pacific Presidential Election time - * (where there are three time zone transitions every fourth year). */ -#define TZ_MAX_TIMES 370 - -#if !defined(NOSOLAR) -#define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */ -#else -/* Must be at least 14 for Europe/Riga as of Jan 12 1995, - * as noted by Earl Chew . */ -#define TZ_MAX_TYPES 20 /* Maximum number of local time types */ -#endif - -#define TZ_BIGGEST(a, b) (((a) > (b)) ? (a) : (b)) - -/* Time type information */ -struct tz_ttinfo_s -{ - int32_t gmtoff; /* UTC offset in seconds */ - int isdst; /* Used to set tm_isdst */ - int abbrind; /* Abbreviation list index */ - int ttisstd; /* TRUE if transition is std time */ - int ttisgmt; /* TRUE if transition is UTC */ -}; - -/* Leap second information */ -struct tz_lsinfo_s -{ - time_t trans; /* Transition time */ - int32_t corr; /* Correction to apply */ -}; - -struct tz_state_s -{ - int leapcnt; - int timecnt; - int typecnt; - int charcnt; - time_t ats[TZ_MAX_TIMES]; - uint8_t types[TZ_MAX_TIMES]; - struct tz_ttinfo_s ttis[TZ_MAX_TYPES]; - char chars[TZ_BIGGEST(TZ_MAX_CHARS + 1, (2*(TZNAME_MAX + 1)))]; - struct tz_lsinfo_s lsis[TZ_MAX_LEAPS]; -}; - -struct tz_s -{ - struct tz_state_s state; - char lcl_tzname[TZNAME_MAX + 1]; - int lcl_is_set; - const char *tzname[2]; -}; - -#endif -/*- End of file ------------------------------------------------------------*/ +/* + * SpanDSP - a series of DSP components for telephony + * + * private/timezone.h - Timezone handling for time interpretation + * + * Written by Steve Underwood + * + * Copyright (C) 2010 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(_SPANDSP_PRIVATE_TIMEZONE_H_) +#define _SPANDSP_PRIVATE_TIMEZONE_H_ + +#define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */ + +#define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */ + +#define TZNAME_MAX 255 + +/* The TZ_MAX_TIMES value below is enough to handle a bit more than a + * year's worth of solar time (corrected daily to the nearest second) or + * 138 years of Pacific Presidential Election time + * (where there are three time zone transitions every fourth year). */ +#define TZ_MAX_TIMES 370 + +#if !defined(NOSOLAR) +#define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */ +#else +/* Must be at least 14 for Europe/Riga as of Jan 12 1995, + * as noted by Earl Chew . */ +#define TZ_MAX_TYPES 20 /* Maximum number of local time types */ +#endif + +#define TZ_BIGGEST(a, b) (((a) > (b)) ? (a) : (b)) + +/* Time type information */ +struct tz_ttinfo_s +{ + int32_t gmtoff; /* UTC offset in seconds */ + int isdst; /* Used to set tm_isdst */ + int abbrind; /* Abbreviation list index */ + int ttisstd; /* TRUE if transition is std time */ + int ttisgmt; /* TRUE if transition is UTC */ +}; + +/* Leap second information */ +struct tz_lsinfo_s +{ + time_t trans; /* Transition time */ + int32_t corr; /* Correction to apply */ +}; + +struct tz_state_s +{ + int leapcnt; + int timecnt; + int typecnt; + int charcnt; + time_t ats[TZ_MAX_TIMES]; + uint8_t types[TZ_MAX_TIMES]; + struct tz_ttinfo_s ttis[TZ_MAX_TYPES]; + char chars[TZ_BIGGEST(TZ_MAX_CHARS + 1, (2*(TZNAME_MAX + 1)))]; + struct tz_lsinfo_s lsis[TZ_MAX_LEAPS]; +}; + +struct tz_s +{ + struct tz_state_s state; + char lcl_tzname[TZNAME_MAX + 1]; + int lcl_is_set; + const char *tzname[2]; +}; + +#endif +/*- End of file ------------------------------------------------------------*/ From e704f021969119f255a323ca93ed479efe73b176 Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Sun, 25 Jul 2010 10:10:06 +0200 Subject: [PATCH 053/161] FSBUILD-285: Fix build with --with-curl --- configure.in | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/configure.in b/configure.in index 8d2307640b..c6d89f8d54 100644 --- a/configure.in +++ b/configure.in @@ -725,6 +725,10 @@ AC_ARG_WITH(libcurl, AC_HELP_STRING([--with-libcurl=DIR],[look for the curl library in DIR]), [_libcurl_with=$withval],[_libcurl_with=ifelse([$1],,[yes],[$1])]) +AC_CACHE_CHECK([whether to use system libcurl library], [ac_cv_use_system_curl], [ + LIBCURL_CHECK_CONFIG([yes], [7.13.0], [ac_cv_use_system_curl='yes'], [ac_cv_use_system_curl='no']) +]) + if test "$_libcurl_with" = "no" ; then ac_cv_use_system_curl=no; fi @@ -732,10 +736,6 @@ if test "$_libcurl_with" = "yes" ; then ac_cv_use_system_curl=yes; fi -AC_CACHE_CHECK([whether to use system libcurl library], [ac_cv_use_system_curl], [ - LIBCURL_CHECK_CONFIG([yes], [7.13.0], [ac_cv_use_system_curl='yes'], [ac_cv_use_system_curl='no']) -]) - if test "$ac_cv_use_system_curl" != "yes" ; then LIBCURL_DEPS='${switch_builddir}/libs/curl/lib/libcurl.la' LIBCURL='${switch_builddir}/libs/curl/lib/libcurl.la' From f6496b4f31e211d0242fa820581cf33eb47ab792 Mon Sep 17 00:00:00 2001 From: cypromis Date: Mon, 26 Jul 2010 10:40:47 +0200 Subject: [PATCH 054/161] small fix for Solaris in spandsp. Needs recheck by Steve I guess. --- libs/spandsp/src/v18.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/spandsp/src/v18.c b/libs/spandsp/src/v18.c index d84b56edc4..18d94b4b90 100644 --- a/libs/spandsp/src/v18.c +++ b/libs/spandsp/src/v18.c @@ -111,7 +111,7 @@ static const struct dtmf_to_ascii_s dtmf_to_ascii[] = {"##8", 'W'}, {"##9", 'Z'}, {"##0", ' '}, -#if defined(WIN32) +#if defined(WIN32) || ( defined(__SVR4) && defined (__sun)) {"#*1", 'X'}, // (Note 1) 111 1011 {"#*2", 'X'}, // (Note 1) 111 1100 {"#*3", 'X'}, // (Note 1) 111 1101 From d70cc852f7ac0162c5ca77e50789155952006ed3 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Mon, 26 Jul 2010 08:29:44 -0500 Subject: [PATCH 055/161] FSBUILD-293 Fix Windows build after libspandsp update --- libs/spandsp/src/libspandsp.2008.vcproj | 3 +++ libs/spandsp/src/msvc/spandsp.h | 2 ++ 2 files changed, 5 insertions(+) diff --git a/libs/spandsp/src/libspandsp.2008.vcproj b/libs/spandsp/src/libspandsp.2008.vcproj index 6f57c7801e..027a6fc664 100644 --- a/libs/spandsp/src/libspandsp.2008.vcproj +++ b/libs/spandsp/src/libspandsp.2008.vcproj @@ -226,6 +226,7 @@ + @@ -294,6 +295,8 @@ + + diff --git a/libs/spandsp/src/msvc/spandsp.h b/libs/spandsp/src/msvc/spandsp.h index 4e06660bdf..deb146884e 100644 --- a/libs/spandsp/src/msvc/spandsp.h +++ b/libs/spandsp/src/msvc/spandsp.h @@ -101,6 +101,8 @@ #include #include #include +#include +#include #include #include #include From 411b0cac367d4fadaad558bfee43ae5dac18eb17 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Mon, 26 Jul 2010 08:59:30 -0500 Subject: [PATCH 056/161] FSBUILD-293 2010 --- libs/spandsp/src/libspandsp.2010.vcxproj | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libs/spandsp/src/libspandsp.2010.vcxproj b/libs/spandsp/src/libspandsp.2010.vcxproj index dd5b5d97fa..bb2ae97878 100644 --- a/libs/spandsp/src/libspandsp.2010.vcxproj +++ b/libs/spandsp/src/libspandsp.2010.vcxproj @@ -219,6 +219,7 @@ + @@ -288,6 +289,8 @@ + + From 812f4309ee88e05068e93d1d08b0edadf55a2c6b Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Mon, 26 Jul 2010 11:34:04 -0500 Subject: [PATCH 057/161] VS 2010 - Change to V4 framework, add SWIG v2.0 files to fix release build exceptions(temp fix till we upgrade all SWIG files) --- .../mod_managed/freeswitch_wrap.2010.cxx | 32117 ++++++++++++++++ .../managed/FreeSWITCH.Managed.2010.csproj | 5 +- .../mod_managed/managed/swig.2010.cs | 29767 ++++++++++++++ .../mod_managed/mod_managed.2010.vcxproj | 8 +- 4 files changed, 61890 insertions(+), 7 deletions(-) create mode 100644 src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx create mode 100644 src/mod/languages/mod_managed/managed/swig.2010.cs diff --git a/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx b/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx new file mode 100644 index 0000000000..8759c33bf7 --- /dev/null +++ b/src/mod/languages/mod_managed/freeswitch_wrap.2010.cxx @@ -0,0 +1,32117 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + +#define SWIGCSHARP + + +#ifdef __cplusplus +/* SwigValueWrapper is described in swig.swg */ +template class SwigValueWrapper { + struct SwigMovePointer { + T *ptr; + SwigMovePointer(T *p) : ptr(p) { } + ~SwigMovePointer() { delete ptr; } + SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; } + } pointer; + SwigValueWrapper& operator=(const SwigValueWrapper& rhs); + SwigValueWrapper(const SwigValueWrapper& rhs); +public: + SwigValueWrapper() : pointer(0) { } + SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; } + operator T&() const { return *pointer.ptr; } + T *operator&() { return pointer.ptr; } +}; + +template T SwigValueInit() { + return T(); +} +#endif + +/* ----------------------------------------------------------------------------- + * This section contains generic SWIG labels for method/variable + * declarations/attributes, and other compiler dependent labels. + * ----------------------------------------------------------------------------- */ + +/* template workaround for compilers that cannot correctly implement the C++ standard */ +#ifndef SWIGTEMPLATEDISAMBIGUATOR +# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) +# define SWIGTEMPLATEDISAMBIGUATOR template +# elif defined(__HP_aCC) +/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ +/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ +# define SWIGTEMPLATEDISAMBIGUATOR template +# else +# define SWIGTEMPLATEDISAMBIGUATOR +# endif +#endif + +/* inline attribute */ +#ifndef SWIGINLINE +# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) +# define SWIGINLINE inline +# else +# define SWIGINLINE +# endif +#endif + +/* attribute recognised by some compilers to avoid 'unused' warnings */ +#ifndef SWIGUNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +# elif defined(__ICC) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +#endif + +#ifndef SWIG_MSC_UNSUPPRESS_4505 +# if defined(_MSC_VER) +# pragma warning(disable : 4505) /* unreferenced local function has been removed */ +# endif +#endif + +#ifndef SWIGUNUSEDPARM +# ifdef __cplusplus +# define SWIGUNUSEDPARM(p) +# else +# define SWIGUNUSEDPARM(p) p SWIGUNUSED +# endif +#endif + +/* internal SWIG method */ +#ifndef SWIGINTERN +# define SWIGINTERN static SWIGUNUSED +#endif + +/* internal inline SWIG method */ +#ifndef SWIGINTERNINLINE +# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE +#endif + +/* exporting methods */ +#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# ifndef GCC_HASCLASSVISIBILITY +# define GCC_HASCLASSVISIBILITY +# endif +#endif + +#ifndef SWIGEXPORT +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# if defined(STATIC_LINKED) +# define SWIGEXPORT +# else +# define SWIGEXPORT __declspec(dllexport) +# endif +# else +# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) +# define SWIGEXPORT __attribute__ ((visibility("default"))) +# else +# define SWIGEXPORT +# endif +# endif +#endif + +/* calling conventions for Windows */ +#ifndef SWIGSTDCALL +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# define SWIGSTDCALL __stdcall +# else +# define SWIGSTDCALL +# endif +#endif + +/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ +#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ +#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) +# define _SCL_SECURE_NO_DEPRECATE +#endif + + + +#include +#include +#include + + +/* Support for throwing C# exceptions from C/C++. There are two types: + * Exceptions that take a message and ArgumentExceptions that take a message and a parameter name. */ +typedef enum { + SWIG_CSharpApplicationException, + SWIG_CSharpArithmeticException, + SWIG_CSharpDivideByZeroException, + SWIG_CSharpIndexOutOfRangeException, + SWIG_CSharpInvalidCastException, + SWIG_CSharpInvalidOperationException, + SWIG_CSharpIOException, + SWIG_CSharpNullReferenceException, + SWIG_CSharpOutOfMemoryException, + SWIG_CSharpOverflowException, + SWIG_CSharpSystemException +} SWIG_CSharpExceptionCodes; + +typedef enum { + SWIG_CSharpArgumentException, + SWIG_CSharpArgumentNullException, + SWIG_CSharpArgumentOutOfRangeException +} SWIG_CSharpExceptionArgumentCodes; + +typedef void (SWIGSTDCALL* SWIG_CSharpExceptionCallback_t)(const char *); +typedef void (SWIGSTDCALL* SWIG_CSharpExceptionArgumentCallback_t)(const char *, const char *); + +typedef struct { + SWIG_CSharpExceptionCodes code; + SWIG_CSharpExceptionCallback_t callback; +} SWIG_CSharpException_t; + +typedef struct { + SWIG_CSharpExceptionArgumentCodes code; + SWIG_CSharpExceptionArgumentCallback_t callback; +} SWIG_CSharpExceptionArgument_t; + +static SWIG_CSharpException_t SWIG_csharp_exceptions[] = { + { SWIG_CSharpApplicationException, NULL }, + { SWIG_CSharpArithmeticException, NULL }, + { SWIG_CSharpDivideByZeroException, NULL }, + { SWIG_CSharpIndexOutOfRangeException, NULL }, + { SWIG_CSharpInvalidCastException, NULL }, + { SWIG_CSharpInvalidOperationException, NULL }, + { SWIG_CSharpIOException, NULL }, + { SWIG_CSharpNullReferenceException, NULL }, + { SWIG_CSharpOutOfMemoryException, NULL }, + { SWIG_CSharpOverflowException, NULL }, + { SWIG_CSharpSystemException, NULL } +}; + +static SWIG_CSharpExceptionArgument_t SWIG_csharp_exceptions_argument[] = { + { SWIG_CSharpArgumentException, NULL }, + { SWIG_CSharpArgumentNullException, NULL }, + { SWIG_CSharpArgumentOutOfRangeException, NULL } +}; + +static void SWIGUNUSED SWIG_CSharpSetPendingException(SWIG_CSharpExceptionCodes code, const char *msg) { + SWIG_CSharpExceptionCallback_t callback = SWIG_csharp_exceptions[SWIG_CSharpApplicationException].callback; + if ((size_t)code < sizeof(SWIG_csharp_exceptions)/sizeof(SWIG_CSharpException_t)) { + callback = SWIG_csharp_exceptions[code].callback; + } + callback(msg); +} + +static void SWIGUNUSED SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpExceptionArgumentCodes code, const char *msg, const char *param_name) { + SWIG_CSharpExceptionArgumentCallback_t callback = SWIG_csharp_exceptions_argument[SWIG_CSharpArgumentException].callback; + if ((size_t)code < sizeof(SWIG_csharp_exceptions_argument)/sizeof(SWIG_CSharpExceptionArgument_t)) { + callback = SWIG_csharp_exceptions_argument[code].callback; + } + callback(msg, param_name); +} + + +#ifdef __cplusplus +extern "C" +#endif +SWIGEXPORT void SWIGSTDCALL SWIGRegisterExceptionCallbacks_freeswitch( + SWIG_CSharpExceptionCallback_t applicationCallback, + SWIG_CSharpExceptionCallback_t arithmeticCallback, + SWIG_CSharpExceptionCallback_t divideByZeroCallback, + SWIG_CSharpExceptionCallback_t indexOutOfRangeCallback, + SWIG_CSharpExceptionCallback_t invalidCastCallback, + SWIG_CSharpExceptionCallback_t invalidOperationCallback, + SWIG_CSharpExceptionCallback_t ioCallback, + SWIG_CSharpExceptionCallback_t nullReferenceCallback, + SWIG_CSharpExceptionCallback_t outOfMemoryCallback, + SWIG_CSharpExceptionCallback_t overflowCallback, + SWIG_CSharpExceptionCallback_t systemCallback) { + SWIG_csharp_exceptions[SWIG_CSharpApplicationException].callback = applicationCallback; + SWIG_csharp_exceptions[SWIG_CSharpArithmeticException].callback = arithmeticCallback; + SWIG_csharp_exceptions[SWIG_CSharpDivideByZeroException].callback = divideByZeroCallback; + SWIG_csharp_exceptions[SWIG_CSharpIndexOutOfRangeException].callback = indexOutOfRangeCallback; + SWIG_csharp_exceptions[SWIG_CSharpInvalidCastException].callback = invalidCastCallback; + SWIG_csharp_exceptions[SWIG_CSharpInvalidOperationException].callback = invalidOperationCallback; + SWIG_csharp_exceptions[SWIG_CSharpIOException].callback = ioCallback; + SWIG_csharp_exceptions[SWIG_CSharpNullReferenceException].callback = nullReferenceCallback; + SWIG_csharp_exceptions[SWIG_CSharpOutOfMemoryException].callback = outOfMemoryCallback; + SWIG_csharp_exceptions[SWIG_CSharpOverflowException].callback = overflowCallback; + SWIG_csharp_exceptions[SWIG_CSharpSystemException].callback = systemCallback; +} + +#ifdef __cplusplus +extern "C" +#endif +SWIGEXPORT void SWIGSTDCALL SWIGRegisterExceptionArgumentCallbacks_freeswitch( + SWIG_CSharpExceptionArgumentCallback_t argumentCallback, + SWIG_CSharpExceptionArgumentCallback_t argumentNullCallback, + SWIG_CSharpExceptionArgumentCallback_t argumentOutOfRangeCallback) { + SWIG_csharp_exceptions_argument[SWIG_CSharpArgumentException].callback = argumentCallback; + SWIG_csharp_exceptions_argument[SWIG_CSharpArgumentNullException].callback = argumentNullCallback; + SWIG_csharp_exceptions_argument[SWIG_CSharpArgumentOutOfRangeException].callback = argumentOutOfRangeCallback; +} + + +/* Contract support */ + +#define SWIG_contract_assert(nullreturn, expr, msg) if (!(expr)) {SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, msg, ""); return nullreturn; } else + + + +/* Callback for returning strings to C# without leaking memory */ +#ifndef _MANAGED +#include +#include +#include +#include +#include +#include +#endif + +typedef char * (SWIGSTDCALL* SWIG_CSharpStringHelperCallback)(const char *); +static SWIG_CSharpStringHelperCallback SWIG_csharp_string_callback_real = NULL; + + +#ifdef __cplusplus +extern "C" +#endif +SWIGEXPORT void SWIGSTDCALL SWIGRegisterStringCallback_freeswitch(SWIG_CSharpStringHelperCallback callback) { + /* Set this only once, in the main appdomain */ + if (SWIG_csharp_string_callback_real == NULL) SWIG_csharp_string_callback_real = callback; +} +char * SWIG_csharp_string_callback(const char * str) { +#ifndef _MANAGED + // Mono won't transition appdomains properly after the callback, so we force it + MonoDomain* dom = mono_domain_get(); + char* res = SWIG_csharp_string_callback_real(str); + mono_domain_set(dom, true); + return res; +#else + return SWIG_csharp_string_callback_real(str); +#endif +} + + +#include "switch.h" +#include "switch_cpp.h" +#include "freeswitch_managed.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +SWIGEXPORT char * SWIGSTDCALL CSharp_FREESWITCH_PEN_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("27880"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_FREESWITCH_OID_PREFIX_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)(".1.3.6.1.4.1.27880"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_FREESWITCH_ITAD_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("543"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp___EXTENSIONS___get() { + int jresult ; + int result; + + result = (int)(1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp___BSD_VISIBLE_get() { + int jresult ; + int result; + + result = (int)(1); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_ENT_ORIGINATE_DELIM_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)(":_:"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_BLANK_STRING_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\0"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_TON_UNDEF_get() { + int jresult ; + int result; + + result = (int)(255); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_NUMPLAN_UNDEF_get() { + int jresult ; + int result; + + result = (int)(255); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_ESC_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33["); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char SWIGSTDCALL CSharp_SWITCH_SEQ_HOME_CHAR_get() { + char jresult ; + char result; + + result = (char)('H'); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_HOME_CHAR_STR_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("H"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char SWIGSTDCALL CSharp_SWITCH_SEQ_CLEARLINE_CHAR_get() { + char jresult ; + char result; + + result = (char)('1'); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_CLEARLINE_CHAR_STR_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("1"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_CLEARLINEEND_CHAR_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("K"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char SWIGSTDCALL CSharp_SWITCH_SEQ_CLEARSCR_CHAR0_get() { + char jresult ; + char result; + + result = (char)('2'); + jresult = result; + return jresult; +} + + +SWIGEXPORT char SWIGSTDCALL CSharp_SWITCH_SEQ_CLEARSCR_CHAR1_get() { + char jresult ; + char result; + + result = (char)('J'); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_CLEARSCR_CHAR_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("2J"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_AND_COLOR_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)(";"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_END_COLOR_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_F_BLACK_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("30"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_F_RED_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("31"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_F_GREEN_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("32"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_F_YELLOW_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("33"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_F_BLUE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("34"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_F_MAGEN_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("35"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_F_CYAN_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("36"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_F_WHITE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("37"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_B_BLACK_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("40"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_B_RED_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("41"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_B_GREEN_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("42"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_B_YELLOW_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("43"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_B_BLUE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("44"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_B_MAGEN_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("45"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_B_CYAN_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("46"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_B_WHITE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("47"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_FBLACK_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[30m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_FRED_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[31m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_FGREEN_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[32m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_FYELLOW_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[33m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_FBLUE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[34m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_FMAGEN_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[35m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_FCYAN_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[36m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_FWHITE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[37m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_BBLACK_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[40m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_BRED_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[41m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_BGREEN_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[42m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_BYELLOW_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[43m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_BBLUE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[44m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_BMAGEN_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[45m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_BCYAN_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[46m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_BWHITE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[47m"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_HOME_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[H"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_CLEARLINE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[1"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_CLEARLINEEND_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[K"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEQ_CLEARSCR_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\33[2J\33[H"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_DEFAULT_CLID_NAME_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("\0"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_DEFAULT_DTMF_DURATION_get() { + int jresult ; + int result; + + result = (int)(2000); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_MIN_DTMF_DURATION_get() { + int jresult ; + int result; + + result = (int)(400); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_MAX_DTMF_DURATION_get() { + int jresult ; + int result; + + result = (int)(192000); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_PATH_SEPARATOR_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("/"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_URL_SEPARATOR_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("://"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_IGNORE_DISPLAY_UPDATES_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("ignore_display_updates"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_AUDIO_SPOOL_PATH_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("audio_spool_path"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_BRIDGE_HANGUP_CAUSE_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("bridge_hangup_cause"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_READ_TERMINATOR_USED_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("read_terminator_used"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("send_silence_when_idle"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CURRENT_APPLICATION_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("current_application"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CURRENT_APPLICATION_DATA_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("current_application_data"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("current_application_response"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_ENABLE_HEARTBEAT_EVENTS_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("enable_heartbeat_events"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_BYPASS_MEDIA_AFTER_BRIDGE_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("bypass_media_after_bridge"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_READ_RESULT_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("read_result"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_COPY_XML_CDR_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("copy_xml_cdr"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("proto_specific_hangup_cause"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CHANNEL_EXECUTE_ON_ANSWER_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("execute_on_answer"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CHANNEL_EXECUTE_ON_PRE_ANSWER_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("execute_on_pre_answer"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CHANNEL_EXECUTE_ON_MEDIA_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("execute_on_media"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CHANNEL_API_ON_ANSWER_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("api_on_answer"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CHANNEL_EXECUTE_ON_RING_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("execute_on_ring"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CALL_TIMEOUT_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("call_timeout"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_HOLDING_UUID_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("holding_uuid"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SOFT_HOLDING_UUID_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("soft_holding_uuid"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_API_BRIDGE_END_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("api_after_bridge"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_API_HANGUP_HOOK_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("api_hangup_hook"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_API_REPORTING_HOOK_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("api_reporting_hook"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("session_in_hangup_hook"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_PROCESS_CDR_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("process_cdr"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_FORCE_PROCESS_CDR_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("force_process_cdr"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_BRIDGE_CHANNEL_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("bridge_channel"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CHANNEL_NAME_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("channel_name"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_BRIDGE_UUID_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("bridge_uuid"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CONTINUE_ON_FAILURE_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("continue_on_fail"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_PLAYBACK_TERMINATORS_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("playback_terminators"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_PLAYBACK_TERMINATOR_USED_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("playback_terminator_used"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CACHE_SPEECH_HANDLES_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("cache_speech_handles"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CACHE_SPEECH_HANDLES_OBJ_NAME_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("__cache_speech_handles_obj__"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_BYPASS_MEDIA_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("bypass_media"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_PROXY_MEDIA_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("proxy_media"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_ENDPOINT_DISPOSITION_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("endpoint_disposition"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_HOLD_MUSIC_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("hold_music"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_EXPORT_VARS_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("export_vars"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_R_SDP_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("switch_r_sdp"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_L_SDP_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("switch_l_sdp"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_B_SDP_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("switch_m_sdp"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_BRIDGE_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("bridge_to"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SIGNAL_BRIDGE_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("signal_bridge_to"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SIGNAL_BOND_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("signal_bond"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_ORIGINATOR_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("originator"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_ORIGINATOR_CODEC_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("originator_codec"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_ORIGINATOR_VIDEO_CODEC_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("originator_video_codec"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_LOCAL_MEDIA_IP_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("local_media_ip"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_LOCAL_MEDIA_PORT_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("local_media_port"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_REMOTE_MEDIA_IP_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("remote_media_ip"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_REMOTE_MEDIA_PORT_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("remote_media_port"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_REMOTE_VIDEO_IP_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("remote_video_ip"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_REMOTE_VIDEO_PORT_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("remote_video_port"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_LOCAL_VIDEO_IP_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("local_video_ip"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_LOCAL_VIDEO_PORT_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("local_video_port"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("hangup_after_bridge"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_PARK_AFTER_BRIDGE_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("park_after_bridge"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("transfer_after_bridge"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_EXEC_AFTER_BRIDGE_APP_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("exec_after_bridge_app"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_EXEC_AFTER_BRIDGE_ARG_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("exec_after_bridge_arg"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_MAX_FORWARDS_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("max_forwards"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_DISABLE_APP_LOG_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("disable_app_log"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_SPEECH_KEY_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("speech"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_UUID_BRIDGE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("uuid_bridge"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_BITS_PER_BYTE_get() { + int jresult ; + int result; + + result = (int)(8); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_DEFAULT_FILE_BUFFER_LEN_get() { + int jresult ; + int result; + + result = (int)(65536); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_DTMF_LOG_LEN_get() { + int jresult ; + int result; + + result = (int)(1000); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_dtmf_t_digit_set(void * jarg1, char jarg2) { + switch_dtmf_t *arg1 = (switch_dtmf_t *) 0 ; + char arg2 ; + + arg1 = (switch_dtmf_t *)jarg1; + arg2 = (char)jarg2; + if (arg1) (arg1)->digit = arg2; +} + + +SWIGEXPORT char SWIGSTDCALL CSharp_switch_dtmf_t_digit_get(void * jarg1) { + char jresult ; + switch_dtmf_t *arg1 = (switch_dtmf_t *) 0 ; + char result; + + arg1 = (switch_dtmf_t *)jarg1; + result = (char) ((arg1)->digit); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_dtmf_t_duration_set(void * jarg1, unsigned long jarg2) { + switch_dtmf_t *arg1 = (switch_dtmf_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_dtmf_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->duration = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_dtmf_t_duration_get(void * jarg1) { + unsigned long jresult ; + switch_dtmf_t *arg1 = (switch_dtmf_t *) 0 ; + uint32_t result; + + arg1 = (switch_dtmf_t *)jarg1; + result = (uint32_t) ((arg1)->duration); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_dtmf_t() { + void * jresult ; + switch_dtmf_t *result = 0 ; + + result = (switch_dtmf_t *)new switch_dtmf_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_dtmf_t(void * jarg1) { + switch_dtmf_t *arg1 = (switch_dtmf_t *) 0 ; + + arg1 = (switch_dtmf_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_bitpack_t_buf_set(void * jarg1, void * jarg2) { + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t *arg2 = (switch_byte_t *) 0 ; + + arg1 = (switch_bitpack_t *)jarg1; + arg2 = (switch_byte_t *)jarg2; + if (arg1) (arg1)->buf = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_bitpack_t_buf_get(void * jarg1) { + void * jresult ; + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t *result = 0 ; + + arg1 = (switch_bitpack_t *)jarg1; + result = (switch_byte_t *) ((arg1)->buf); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_bitpack_t_buflen_set(void * jarg1, unsigned long jarg2) { + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_bitpack_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->buflen = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_bitpack_t_buflen_get(void * jarg1) { + unsigned long jresult ; + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + uint32_t result; + + arg1 = (switch_bitpack_t *)jarg1; + result = (uint32_t) ((arg1)->buflen); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_bitpack_t_cur_set(void * jarg1, void * jarg2) { + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t *arg2 = (switch_byte_t *) 0 ; + + arg1 = (switch_bitpack_t *)jarg1; + arg2 = (switch_byte_t *)jarg2; + if (arg1) (arg1)->cur = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_bitpack_t_cur_get(void * jarg1) { + void * jresult ; + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t *result = 0 ; + + arg1 = (switch_bitpack_t *)jarg1; + result = (switch_byte_t *) ((arg1)->cur); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_bitpack_t_bytes_set(void * jarg1, unsigned long jarg2) { + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_bitpack_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->bytes = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_bitpack_t_bytes_get(void * jarg1) { + unsigned long jresult ; + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + uint32_t result; + + arg1 = (switch_bitpack_t *)jarg1; + result = (uint32_t) ((arg1)->bytes); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_bitpack_t_bits_tot_set(void * jarg1, unsigned long jarg2) { + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_bitpack_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->bits_tot = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_bitpack_t_bits_tot_get(void * jarg1) { + unsigned long jresult ; + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + uint32_t result; + + arg1 = (switch_bitpack_t *)jarg1; + result = (uint32_t) ((arg1)->bits_tot); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_bitpack_t_bits_cur_set(void * jarg1, unsigned char jarg2) { + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t arg2 ; + + arg1 = (switch_bitpack_t *)jarg1; + arg2 = (switch_byte_t)jarg2; + if (arg1) (arg1)->bits_cur = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_bitpack_t_bits_cur_get(void * jarg1) { + unsigned char jresult ; + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t result; + + arg1 = (switch_bitpack_t *)jarg1; + result = (switch_byte_t) ((arg1)->bits_cur); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_bitpack_t_bits_rem_set(void * jarg1, unsigned char jarg2) { + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t arg2 ; + + arg1 = (switch_bitpack_t *)jarg1; + arg2 = (switch_byte_t)jarg2; + if (arg1) (arg1)->bits_rem = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_bitpack_t_bits_rem_get(void * jarg1) { + unsigned char jresult ; + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t result; + + arg1 = (switch_bitpack_t *)jarg1; + result = (switch_byte_t) ((arg1)->bits_rem); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_bitpack_t_frame_bits_set(void * jarg1, unsigned char jarg2) { + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t arg2 ; + + arg1 = (switch_bitpack_t *)jarg1; + arg2 = (switch_byte_t)jarg2; + if (arg1) (arg1)->frame_bits = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_bitpack_t_frame_bits_get(void * jarg1) { + unsigned char jresult ; + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t result; + + arg1 = (switch_bitpack_t *)jarg1; + result = (switch_byte_t) ((arg1)->frame_bits); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_bitpack_t_shiftby_set(void * jarg1, unsigned char jarg2) { + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t arg2 ; + + arg1 = (switch_bitpack_t *)jarg1; + arg2 = (switch_byte_t)jarg2; + if (arg1) (arg1)->shiftby = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_bitpack_t_shiftby_get(void * jarg1) { + unsigned char jresult ; + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t result; + + arg1 = (switch_bitpack_t *)jarg1; + result = (switch_byte_t) ((arg1)->shiftby); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_bitpack_t_this_byte_set(void * jarg1, unsigned char jarg2) { + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t arg2 ; + + arg1 = (switch_bitpack_t *)jarg1; + arg2 = (switch_byte_t)jarg2; + if (arg1) (arg1)->this_byte = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_bitpack_t_this_byte_get(void * jarg1) { + unsigned char jresult ; + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t result; + + arg1 = (switch_bitpack_t *)jarg1; + result = (switch_byte_t) ((arg1)->this_byte); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_bitpack_t_under_set(void * jarg1, unsigned char jarg2) { + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t arg2 ; + + arg1 = (switch_bitpack_t *)jarg1; + arg2 = (switch_byte_t)jarg2; + if (arg1) (arg1)->under = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_bitpack_t_under_get(void * jarg1) { + unsigned char jresult ; + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t result; + + arg1 = (switch_bitpack_t *)jarg1; + result = (switch_byte_t) ((arg1)->under); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_bitpack_t_over_set(void * jarg1, unsigned char jarg2) { + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t arg2 ; + + arg1 = (switch_bitpack_t *)jarg1; + arg2 = (switch_byte_t)jarg2; + if (arg1) (arg1)->over = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_bitpack_t_over_get(void * jarg1) { + unsigned char jresult ; + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_byte_t result; + + arg1 = (switch_bitpack_t *)jarg1; + result = (switch_byte_t) ((arg1)->over); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_bitpack_t_mode_set(void * jarg1, int jarg2) { + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_bitpack_mode_t arg2 ; + + arg1 = (switch_bitpack_t *)jarg1; + arg2 = (switch_bitpack_mode_t)jarg2; + if (arg1) (arg1)->mode = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_bitpack_t_mode_get(void * jarg1) { + int jresult ; + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + switch_bitpack_mode_t result; + + arg1 = (switch_bitpack_t *)jarg1; + result = (switch_bitpack_mode_t) ((arg1)->mode); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_bitpack_t() { + void * jresult ; + switch_bitpack_t *result = 0 ; + + result = (switch_bitpack_t *)new switch_bitpack_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_bitpack_t(void * jarg1) { + switch_bitpack_t *arg1 = (switch_bitpack_t *) 0 ; + + arg1 = (switch_bitpack_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directories_base_dir_set(void * jarg1, char * jarg2) { + switch_directories *arg1 = (switch_directories *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_directories *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->base_dir) delete [] arg1->base_dir; + if (arg2) { + arg1->base_dir = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->base_dir, (const char *)arg2); + } else { + arg1->base_dir = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_directories_base_dir_get(void * jarg1) { + char * jresult ; + switch_directories *arg1 = (switch_directories *) 0 ; + char *result = 0 ; + + arg1 = (switch_directories *)jarg1; + result = (char *) ((arg1)->base_dir); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directories_mod_dir_set(void * jarg1, char * jarg2) { + switch_directories *arg1 = (switch_directories *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_directories *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->mod_dir) delete [] arg1->mod_dir; + if (arg2) { + arg1->mod_dir = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->mod_dir, (const char *)arg2); + } else { + arg1->mod_dir = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_directories_mod_dir_get(void * jarg1) { + char * jresult ; + switch_directories *arg1 = (switch_directories *) 0 ; + char *result = 0 ; + + arg1 = (switch_directories *)jarg1; + result = (char *) ((arg1)->mod_dir); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directories_conf_dir_set(void * jarg1, char * jarg2) { + switch_directories *arg1 = (switch_directories *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_directories *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->conf_dir) delete [] arg1->conf_dir; + if (arg2) { + arg1->conf_dir = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->conf_dir, (const char *)arg2); + } else { + arg1->conf_dir = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_directories_conf_dir_get(void * jarg1) { + char * jresult ; + switch_directories *arg1 = (switch_directories *) 0 ; + char *result = 0 ; + + arg1 = (switch_directories *)jarg1; + result = (char *) ((arg1)->conf_dir); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directories_log_dir_set(void * jarg1, char * jarg2) { + switch_directories *arg1 = (switch_directories *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_directories *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->log_dir) delete [] arg1->log_dir; + if (arg2) { + arg1->log_dir = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->log_dir, (const char *)arg2); + } else { + arg1->log_dir = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_directories_log_dir_get(void * jarg1) { + char * jresult ; + switch_directories *arg1 = (switch_directories *) 0 ; + char *result = 0 ; + + arg1 = (switch_directories *)jarg1; + result = (char *) ((arg1)->log_dir); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directories_run_dir_set(void * jarg1, char * jarg2) { + switch_directories *arg1 = (switch_directories *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_directories *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->run_dir) delete [] arg1->run_dir; + if (arg2) { + arg1->run_dir = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->run_dir, (const char *)arg2); + } else { + arg1->run_dir = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_directories_run_dir_get(void * jarg1) { + char * jresult ; + switch_directories *arg1 = (switch_directories *) 0 ; + char *result = 0 ; + + arg1 = (switch_directories *)jarg1; + result = (char *) ((arg1)->run_dir); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directories_db_dir_set(void * jarg1, char * jarg2) { + switch_directories *arg1 = (switch_directories *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_directories *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->db_dir) delete [] arg1->db_dir; + if (arg2) { + arg1->db_dir = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->db_dir, (const char *)arg2); + } else { + arg1->db_dir = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_directories_db_dir_get(void * jarg1) { + char * jresult ; + switch_directories *arg1 = (switch_directories *) 0 ; + char *result = 0 ; + + arg1 = (switch_directories *)jarg1; + result = (char *) ((arg1)->db_dir); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directories_script_dir_set(void * jarg1, char * jarg2) { + switch_directories *arg1 = (switch_directories *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_directories *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->script_dir) delete [] arg1->script_dir; + if (arg2) { + arg1->script_dir = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->script_dir, (const char *)arg2); + } else { + arg1->script_dir = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_directories_script_dir_get(void * jarg1) { + char * jresult ; + switch_directories *arg1 = (switch_directories *) 0 ; + char *result = 0 ; + + arg1 = (switch_directories *)jarg1; + result = (char *) ((arg1)->script_dir); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directories_temp_dir_set(void * jarg1, char * jarg2) { + switch_directories *arg1 = (switch_directories *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_directories *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->temp_dir) delete [] arg1->temp_dir; + if (arg2) { + arg1->temp_dir = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->temp_dir, (const char *)arg2); + } else { + arg1->temp_dir = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_directories_temp_dir_get(void * jarg1) { + char * jresult ; + switch_directories *arg1 = (switch_directories *) 0 ; + char *result = 0 ; + + arg1 = (switch_directories *)jarg1; + result = (char *) ((arg1)->temp_dir); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directories_htdocs_dir_set(void * jarg1, char * jarg2) { + switch_directories *arg1 = (switch_directories *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_directories *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->htdocs_dir) delete [] arg1->htdocs_dir; + if (arg2) { + arg1->htdocs_dir = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->htdocs_dir, (const char *)arg2); + } else { + arg1->htdocs_dir = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_directories_htdocs_dir_get(void * jarg1) { + char * jresult ; + switch_directories *arg1 = (switch_directories *) 0 ; + char *result = 0 ; + + arg1 = (switch_directories *)jarg1; + result = (char *) ((arg1)->htdocs_dir); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directories_grammar_dir_set(void * jarg1, char * jarg2) { + switch_directories *arg1 = (switch_directories *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_directories *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->grammar_dir) delete [] arg1->grammar_dir; + if (arg2) { + arg1->grammar_dir = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->grammar_dir, (const char *)arg2); + } else { + arg1->grammar_dir = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_directories_grammar_dir_get(void * jarg1) { + char * jresult ; + switch_directories *arg1 = (switch_directories *) 0 ; + char *result = 0 ; + + arg1 = (switch_directories *)jarg1; + result = (char *) ((arg1)->grammar_dir); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directories_storage_dir_set(void * jarg1, char * jarg2) { + switch_directories *arg1 = (switch_directories *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_directories *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->storage_dir) delete [] arg1->storage_dir; + if (arg2) { + arg1->storage_dir = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->storage_dir, (const char *)arg2); + } else { + arg1->storage_dir = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_directories_storage_dir_get(void * jarg1) { + char * jresult ; + switch_directories *arg1 = (switch_directories *) 0 ; + char *result = 0 ; + + arg1 = (switch_directories *)jarg1; + result = (char *) ((arg1)->storage_dir); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directories_recordings_dir_set(void * jarg1, char * jarg2) { + switch_directories *arg1 = (switch_directories *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_directories *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->recordings_dir) delete [] arg1->recordings_dir; + if (arg2) { + arg1->recordings_dir = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->recordings_dir, (const char *)arg2); + } else { + arg1->recordings_dir = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_directories_recordings_dir_get(void * jarg1) { + char * jresult ; + switch_directories *arg1 = (switch_directories *) 0 ; + char *result = 0 ; + + arg1 = (switch_directories *)jarg1; + result = (char *) ((arg1)->recordings_dir); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directories_sounds_dir_set(void * jarg1, char * jarg2) { + switch_directories *arg1 = (switch_directories *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_directories *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->sounds_dir) delete [] arg1->sounds_dir; + if (arg2) { + arg1->sounds_dir = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->sounds_dir, (const char *)arg2); + } else { + arg1->sounds_dir = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_directories_sounds_dir_get(void * jarg1) { + char * jresult ; + switch_directories *arg1 = (switch_directories *) 0 ; + char *result = 0 ; + + arg1 = (switch_directories *)jarg1; + result = (char *) ((arg1)->sounds_dir); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_directories() { + void * jresult ; + switch_directories *result = 0 ; + + result = (switch_directories *)new switch_directories(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_directories(void * jarg1) { + switch_directories *arg1 = (switch_directories *) 0 ; + + arg1 = (switch_directories *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_SWITCH_GLOBAL_dirs_set(void * jarg1) { + switch_directories *arg1 = (switch_directories *) 0 ; + + arg1 = (switch_directories *)jarg1; + SWITCH_GLOBAL_dirs = *arg1; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_SWITCH_GLOBAL_dirs_get() { + void * jresult ; + switch_directories *result = 0 ; + + result = (switch_directories *)&SWITCH_GLOBAL_dirs; + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_MAX_STACKS_get() { + int jresult ; + int result; + + result = (int)(16); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_THREAD_STACKSIZE_get() { + int jresult ; + int result; + + result = (int)(240*1024); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_SYSTEM_THREAD_STACKSIZE_get() { + int jresult ; + int result; + + result = (int)(8192*1024); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_MAX_INTERVAL_get() { + int jresult ; + int result; + + result = (int)(120); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_INTERVAL_PAD_get() { + int jresult ; + int result; + + result = (int)(10); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_MAX_SAMPLE_LEN_get() { + int jresult ; + int result; + + result = (int)(48); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_BYTES_PER_SAMPLE_get() { + int jresult ; + int result; + + result = (int)(2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_RECOMMENDED_BUFFER_SIZE_get() { + int jresult ; + int result; + + result = (int)(4096); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_MAX_CODECS_get() { + int jresult ; + int result; + + result = (int)(50); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_MAX_STATE_HANDLERS_get() { + int jresult ; + int result; + + result = (int)(30); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_QUEUE_LEN_get() { + int jresult ; + int result; + + result = (int)(100000); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_MAX_MANAGEMENT_BUFFER_LEN_get() { + int jresult ; + int result; + + result = (int)(1024*8); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_numbers_t_raw_bytes_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)->raw_bytes = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_numbers_t_raw_bytes_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)->raw_bytes); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_numbers_t_media_bytes_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)->media_bytes = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_numbers_t_media_bytes_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)->media_bytes); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_numbers_t_packet_count_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)->packet_count = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_numbers_t_packet_count_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)->packet_count); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_numbers_t_media_packet_count_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)->media_packet_count = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_numbers_t_media_packet_count_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)->media_packet_count); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_numbers_t_skip_packet_count_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)->skip_packet_count = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_numbers_t_skip_packet_count_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)->skip_packet_count); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_numbers_t_jb_packet_count_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)->jb_packet_count = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_numbers_t_jb_packet_count_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)->jb_packet_count); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_numbers_t_dtmf_packet_count_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)->dtmf_packet_count = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_numbers_t_dtmf_packet_count_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)->dtmf_packet_count); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_numbers_t_cng_packet_count_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)->cng_packet_count = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_numbers_t_cng_packet_count_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)->cng_packet_count); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_numbers_t_flush_packet_count_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)->flush_packet_count = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_numbers_t_flush_packet_count_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)->flush_packet_count); + 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 ; + + result = (switch_rtp_numbers_t *)new switch_rtp_numbers_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_rtp_numbers_t(void * jarg1) { + switch_rtp_numbers_t *arg1 = (switch_rtp_numbers_t *) 0 ; + + arg1 = (switch_rtp_numbers_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_stats_t_inbound_set(void * jarg1, void * jarg2) { + switch_rtp_stats_t *arg1 = (switch_rtp_stats_t *) 0 ; + switch_rtp_numbers_t *arg2 = (switch_rtp_numbers_t *) 0 ; + + arg1 = (switch_rtp_stats_t *)jarg1; + arg2 = (switch_rtp_numbers_t *)jarg2; + if (arg1) (arg1)->inbound = *arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_stats_t_inbound_get(void * jarg1) { + void * jresult ; + switch_rtp_stats_t *arg1 = (switch_rtp_stats_t *) 0 ; + switch_rtp_numbers_t *result = 0 ; + + arg1 = (switch_rtp_stats_t *)jarg1; + result = (switch_rtp_numbers_t *)& ((arg1)->inbound); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_stats_t_outbound_set(void * jarg1, void * jarg2) { + switch_rtp_stats_t *arg1 = (switch_rtp_stats_t *) 0 ; + switch_rtp_numbers_t *arg2 = (switch_rtp_numbers_t *) 0 ; + + arg1 = (switch_rtp_stats_t *)jarg1; + arg2 = (switch_rtp_numbers_t *)jarg2; + if (arg1) (arg1)->outbound = *arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_stats_t_outbound_get(void * jarg1) { + void * jresult ; + switch_rtp_stats_t *arg1 = (switch_rtp_stats_t *) 0 ; + switch_rtp_numbers_t *result = 0 ; + + arg1 = (switch_rtp_stats_t *)jarg1; + result = (switch_rtp_numbers_t *)& ((arg1)->outbound); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_rtp_stats_t() { + void * jresult ; + switch_rtp_stats_t *result = 0 ; + + result = (switch_rtp_stats_t *)new switch_rtp_stats_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_rtp_stats_t(void * jarg1) { + switch_rtp_stats_t *arg1 = (switch_rtp_stats_t *) 0 ; + + arg1 = (switch_rtp_stats_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_RTP_CNG_PAYLOAD_get() { + int jresult ; + int result; + + result = (int)(13); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_hdr_t_version_set(void * jarg1, unsigned int jarg2) { + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_rtp_hdr_t *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->version = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtp_hdr_t_version_get(void * jarg1) { + unsigned int jresult ; + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int result; + + arg1 = (switch_rtp_hdr_t *)jarg1; + result = (unsigned int) ((arg1)->version); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_hdr_t_p_set(void * jarg1, unsigned int jarg2) { + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_rtp_hdr_t *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->p = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtp_hdr_t_p_get(void * jarg1) { + unsigned int jresult ; + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int result; + + arg1 = (switch_rtp_hdr_t *)jarg1; + result = (unsigned int) ((arg1)->p); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_hdr_t_x_set(void * jarg1, unsigned int jarg2) { + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_rtp_hdr_t *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->x = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtp_hdr_t_x_get(void * jarg1) { + unsigned int jresult ; + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int result; + + arg1 = (switch_rtp_hdr_t *)jarg1; + result = (unsigned int) ((arg1)->x); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_hdr_t_cc_set(void * jarg1, unsigned int jarg2) { + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_rtp_hdr_t *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->cc = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtp_hdr_t_cc_get(void * jarg1) { + unsigned int jresult ; + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int result; + + arg1 = (switch_rtp_hdr_t *)jarg1; + result = (unsigned int) ((arg1)->cc); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_hdr_t_m_set(void * jarg1, unsigned int jarg2) { + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_rtp_hdr_t *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->m = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtp_hdr_t_m_get(void * jarg1) { + unsigned int jresult ; + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int result; + + arg1 = (switch_rtp_hdr_t *)jarg1; + result = (unsigned int) ((arg1)->m); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_hdr_t_pt_set(void * jarg1, unsigned int jarg2) { + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_rtp_hdr_t *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->pt = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtp_hdr_t_pt_get(void * jarg1) { + unsigned int jresult ; + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int result; + + arg1 = (switch_rtp_hdr_t *)jarg1; + result = (unsigned int) ((arg1)->pt); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_hdr_t_seq_set(void * jarg1, unsigned int jarg2) { + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_rtp_hdr_t *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->seq = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtp_hdr_t_seq_get(void * jarg1) { + unsigned int jresult ; + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int result; + + arg1 = (switch_rtp_hdr_t *)jarg1; + result = (unsigned int) ((arg1)->seq); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_hdr_t_ts_set(void * jarg1, unsigned int jarg2) { + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_rtp_hdr_t *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->ts = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtp_hdr_t_ts_get(void * jarg1) { + unsigned int jresult ; + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int result; + + arg1 = (switch_rtp_hdr_t *)jarg1; + result = (unsigned int) ((arg1)->ts); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_hdr_t_ssrc_set(void * jarg1, unsigned int jarg2) { + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_rtp_hdr_t *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->ssrc = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtp_hdr_t_ssrc_get(void * jarg1) { + unsigned int jresult ; + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + unsigned int result; + + arg1 = (switch_rtp_hdr_t *)jarg1; + result = (unsigned int) ((arg1)->ssrc); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_rtp_hdr_t() { + void * jresult ; + switch_rtp_hdr_t *result = 0 ; + + result = (switch_rtp_hdr_t *)new switch_rtp_hdr_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_rtp_hdr_t(void * jarg1) { + switch_rtp_hdr_t *arg1 = (switch_rtp_hdr_t *) 0 ; + + arg1 = (switch_rtp_hdr_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtcp_hdr_t_version_set(void * jarg1, unsigned int jarg2) { + switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_rtcp_hdr_t *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->version = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtcp_hdr_t_version_get(void * jarg1) { + unsigned int jresult ; + switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ; + unsigned int result; + + arg1 = (switch_rtcp_hdr_t *)jarg1; + result = (unsigned int) ((arg1)->version); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtcp_hdr_t_p_set(void * jarg1, unsigned int jarg2) { + switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_rtcp_hdr_t *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->p = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtcp_hdr_t_p_get(void * jarg1) { + unsigned int jresult ; + switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ; + unsigned int result; + + arg1 = (switch_rtcp_hdr_t *)jarg1; + result = (unsigned int) ((arg1)->p); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtcp_hdr_t_count_set(void * jarg1, unsigned int jarg2) { + switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_rtcp_hdr_t *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->count = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtcp_hdr_t_count_get(void * jarg1) { + unsigned int jresult ; + switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ; + unsigned int result; + + arg1 = (switch_rtcp_hdr_t *)jarg1; + result = (unsigned int) ((arg1)->count); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtcp_hdr_t_type_set(void * jarg1, unsigned int jarg2) { + switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_rtcp_hdr_t *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->type = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtcp_hdr_t_type_get(void * jarg1) { + unsigned int jresult ; + switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ; + unsigned int result; + + arg1 = (switch_rtcp_hdr_t *)jarg1; + result = (unsigned int) ((arg1)->type); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtcp_hdr_t_length_set(void * jarg1, unsigned int jarg2) { + switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_rtcp_hdr_t *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->length = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_rtcp_hdr_t_length_get(void * jarg1) { + unsigned int jresult ; + switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ; + unsigned int result; + + arg1 = (switch_rtcp_hdr_t *)jarg1; + result = (unsigned int) ((arg1)->length); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_rtcp_hdr_t() { + void * jresult ; + switch_rtcp_hdr_t *result = 0 ; + + result = (switch_rtcp_hdr_t *)new switch_rtcp_hdr_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_rtcp_hdr_t(void * jarg1) { + switch_rtcp_hdr_t *arg1 = (switch_rtcp_hdr_t *) 0 ; + + arg1 = (switch_rtcp_hdr_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxVersion_set(void * jarg1, unsigned short jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint16_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (uint16_t)jarg2; + if (arg1) (arg1)->T38FaxVersion = arg2; +} + + +SWIGEXPORT unsigned short SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxVersion_get(void * jarg1) { + unsigned short jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint16_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (uint16_t) ((arg1)->T38FaxVersion); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38MaxBitRate_set(void * jarg1, unsigned long jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->T38MaxBitRate = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_t38_options_t_T38MaxBitRate_get(void * jarg1) { + unsigned long jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (uint32_t) ((arg1)->T38MaxBitRate); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxFillBitRemoval_set(void * jarg1, int jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + switch_bool_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (switch_bool_t)jarg2; + if (arg1) (arg1)->T38FaxFillBitRemoval = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxFillBitRemoval_get(void * jarg1) { + int jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + switch_bool_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (switch_bool_t) ((arg1)->T38FaxFillBitRemoval); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxTranscodingMMR_set(void * jarg1, int jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + switch_bool_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (switch_bool_t)jarg2; + if (arg1) (arg1)->T38FaxTranscodingMMR = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxTranscodingMMR_get(void * jarg1) { + int jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + switch_bool_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (switch_bool_t) ((arg1)->T38FaxTranscodingMMR); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxTranscodingJBIG_set(void * jarg1, int jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + switch_bool_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (switch_bool_t)jarg2; + if (arg1) (arg1)->T38FaxTranscodingJBIG = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxTranscodingJBIG_get(void * jarg1) { + int jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + switch_bool_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (switch_bool_t) ((arg1)->T38FaxTranscodingJBIG); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxRateManagement_set(void * jarg1, char * jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->T38FaxRateManagement = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->T38FaxRateManagement, (const char *)arg2); + } else { + arg1->T38FaxRateManagement = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxRateManagement_get(void * jarg1) { + char * jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + result = (char *) ((arg1)->T38FaxRateManagement); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxMaxBuffer_set(void * jarg1, unsigned long jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->T38FaxMaxBuffer = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxMaxBuffer_get(void * jarg1) { + unsigned long jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (uint32_t) ((arg1)->T38FaxMaxBuffer); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxMaxDatagram_set(void * jarg1, unsigned long jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->T38FaxMaxDatagram = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxMaxDatagram_get(void * jarg1) { + unsigned long jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (uint32_t) ((arg1)->T38FaxMaxDatagram); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxUdpEC_set(void * jarg1, char * jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->T38FaxUdpEC = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->T38FaxUdpEC, (const char *)arg2); + } else { + arg1->T38FaxUdpEC = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_t38_options_t_T38FaxUdpEC_get(void * jarg1) { + char * jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + result = (char *) ((arg1)->T38FaxUdpEC); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_T38VendorInfo_set(void * jarg1, char * jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->T38VendorInfo = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->T38VendorInfo, (const char *)arg2); + } else { + arg1->T38VendorInfo = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_t38_options_t_T38VendorInfo_get(void * jarg1) { + char * jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + result = (char *) ((arg1)->T38VendorInfo); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_remote_ip_set(void * jarg1, char * jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->remote_ip = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->remote_ip, (const char *)arg2); + } else { + arg1->remote_ip = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_t38_options_t_remote_ip_get(void * jarg1) { + char * jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + result = (char *) ((arg1)->remote_ip); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_remote_port_set(void * jarg1, unsigned long jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->remote_port = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_t38_options_t_remote_port_get(void * jarg1) { + unsigned long jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (uint32_t) ((arg1)->remote_port); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_local_ip_set(void * jarg1, char * jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->local_ip = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->local_ip, (const char *)arg2); + } else { + arg1->local_ip = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_t38_options_t_local_ip_get(void * jarg1) { + char * jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + result = (char *) ((arg1)->local_ip); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_t38_options_t_local_port_set(void * jarg1, unsigned long jarg2) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_t38_options_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->local_port = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_t38_options_t_local_port_get(void * jarg1) { + unsigned long jresult ; + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + uint32_t result; + + arg1 = (switch_t38_options_t *)jarg1; + result = (uint32_t) ((arg1)->local_port); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_t38_options_t() { + void * jresult ; + switch_t38_options_t *result = 0 ; + + result = (switch_t38_options_t *)new switch_t38_options_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_t38_options_t(void * jarg1) { + switch_t38_options_t *arg1 = (switch_t38_options_t *) 0 ; + + arg1 = (switch_t38_options_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_console_callback_match_node_val_set(void * jarg1, char * jarg2) { + switch_console_callback_match_node *arg1 = (switch_console_callback_match_node *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_console_callback_match_node *)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_switch_console_callback_match_node_val_get(void * jarg1) { + char * jresult ; + switch_console_callback_match_node *arg1 = (switch_console_callback_match_node *) 0 ; + char *result = 0 ; + + arg1 = (switch_console_callback_match_node *)jarg1; + result = (char *) ((arg1)->val); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_console_callback_match_node_next_set(void * jarg1, void * jarg2) { + switch_console_callback_match_node *arg1 = (switch_console_callback_match_node *) 0 ; + switch_console_callback_match_node *arg2 = (switch_console_callback_match_node *) 0 ; + + arg1 = (switch_console_callback_match_node *)jarg1; + arg2 = (switch_console_callback_match_node *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_console_callback_match_node_next_get(void * jarg1) { + void * jresult ; + switch_console_callback_match_node *arg1 = (switch_console_callback_match_node *) 0 ; + switch_console_callback_match_node *result = 0 ; + + arg1 = (switch_console_callback_match_node *)jarg1; + result = (switch_console_callback_match_node *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_console_callback_match_node() { + void * jresult ; + switch_console_callback_match_node *result = 0 ; + + result = (switch_console_callback_match_node *)new switch_console_callback_match_node(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_console_callback_match_node(void * jarg1) { + switch_console_callback_match_node *arg1 = (switch_console_callback_match_node *) 0 ; + + arg1 = (switch_console_callback_match_node *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_console_callback_match_head_set(void * jarg1, void * jarg2) { + switch_console_callback_match *arg1 = (switch_console_callback_match *) 0 ; + switch_console_callback_match_node *arg2 = (switch_console_callback_match_node *) 0 ; + + arg1 = (switch_console_callback_match *)jarg1; + arg2 = (switch_console_callback_match_node *)jarg2; + if (arg1) (arg1)->head = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_console_callback_match_head_get(void * jarg1) { + void * jresult ; + switch_console_callback_match *arg1 = (switch_console_callback_match *) 0 ; + switch_console_callback_match_node *result = 0 ; + + arg1 = (switch_console_callback_match *)jarg1; + result = (switch_console_callback_match_node *) ((arg1)->head); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_console_callback_match_end_set(void * jarg1, void * jarg2) { + switch_console_callback_match *arg1 = (switch_console_callback_match *) 0 ; + switch_console_callback_match_node *arg2 = (switch_console_callback_match_node *) 0 ; + + arg1 = (switch_console_callback_match *)jarg1; + arg2 = (switch_console_callback_match_node *)jarg2; + if (arg1) (arg1)->end = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_console_callback_match_end_get(void * jarg1) { + void * jresult ; + switch_console_callback_match *arg1 = (switch_console_callback_match *) 0 ; + switch_console_callback_match_node *result = 0 ; + + arg1 = (switch_console_callback_match *)jarg1; + result = (switch_console_callback_match_node *) ((arg1)->end); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_console_callback_match_count_set(void * jarg1, int jarg2) { + switch_console_callback_match *arg1 = (switch_console_callback_match *) 0 ; + int arg2 ; + + arg1 = (switch_console_callback_match *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->count = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_console_callback_match_count_get(void * jarg1) { + int jresult ; + switch_console_callback_match *arg1 = (switch_console_callback_match *) 0 ; + int result; + + arg1 = (switch_console_callback_match *)jarg1; + result = (int) ((arg1)->count); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_console_callback_match_dynamic_set(void * jarg1, int jarg2) { + switch_console_callback_match *arg1 = (switch_console_callback_match *) 0 ; + int arg2 ; + + arg1 = (switch_console_callback_match *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->dynamic = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_console_callback_match_dynamic_get(void * jarg1) { + int jresult ; + switch_console_callback_match *arg1 = (switch_console_callback_match *) 0 ; + int result; + + arg1 = (switch_console_callback_match *)jarg1; + result = (int) ((arg1)->dynamic); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_console_callback_match() { + void * jresult ; + switch_console_callback_match *result = 0 ; + + result = (switch_console_callback_match *)new switch_console_callback_match(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_console_callback_match(void * jarg1) { + switch_console_callback_match *arg1 = (switch_console_callback_match *) 0 ; + + arg1 = (switch_console_callback_match *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_input_args_t_input_callback_set(void * jarg1, void * jarg2) { + switch_input_args_t *arg1 = (switch_input_args_t *) 0 ; + switch_input_callback_function_t arg2 = (switch_input_callback_function_t) 0 ; + + arg1 = (switch_input_args_t *)jarg1; + arg2 = (switch_input_callback_function_t)jarg2; + if (arg1) (arg1)->input_callback = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_input_args_t_input_callback_get(void * jarg1) { + void * jresult ; + switch_input_args_t *arg1 = (switch_input_args_t *) 0 ; + switch_input_callback_function_t result; + + arg1 = (switch_input_args_t *)jarg1; + result = (switch_input_callback_function_t) ((arg1)->input_callback); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_input_args_t_buf_set(void * jarg1, void * jarg2) { + switch_input_args_t *arg1 = (switch_input_args_t *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_input_args_t *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->buf = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_input_args_t_buf_get(void * jarg1) { + void * jresult ; + switch_input_args_t *arg1 = (switch_input_args_t *) 0 ; + void *result = 0 ; + + arg1 = (switch_input_args_t *)jarg1; + result = (void *) ((arg1)->buf); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_input_args_t_buflen_set(void * jarg1, unsigned long jarg2) { + switch_input_args_t *arg1 = (switch_input_args_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_input_args_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->buflen = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_input_args_t_buflen_get(void * jarg1) { + unsigned long jresult ; + switch_input_args_t *arg1 = (switch_input_args_t *) 0 ; + uint32_t result; + + arg1 = (switch_input_args_t *)jarg1; + result = (uint32_t) ((arg1)->buflen); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_input_args_t_read_frame_callback_set(void * jarg1, void * jarg2) { + switch_input_args_t *arg1 = (switch_input_args_t *) 0 ; + switch_read_frame_callback_function_t arg2 = (switch_read_frame_callback_function_t) 0 ; + + arg1 = (switch_input_args_t *)jarg1; + arg2 = (switch_read_frame_callback_function_t)jarg2; + if (arg1) (arg1)->read_frame_callback = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_input_args_t_read_frame_callback_get(void * jarg1) { + void * jresult ; + switch_input_args_t *arg1 = (switch_input_args_t *) 0 ; + switch_read_frame_callback_function_t result; + + arg1 = (switch_input_args_t *)jarg1; + result = (switch_read_frame_callback_function_t) ((arg1)->read_frame_callback); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_input_args_t_user_data_set(void * jarg1, void * jarg2) { + switch_input_args_t *arg1 = (switch_input_args_t *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_input_args_t *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->user_data = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_input_args_t_user_data_get(void * jarg1) { + void * jresult ; + switch_input_args_t *arg1 = (switch_input_args_t *) 0 ; + void *result = 0 ; + + arg1 = (switch_input_args_t *)jarg1; + result = (void *) ((arg1)->user_data); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_input_args_t() { + void * jresult ; + switch_input_args_t *result = 0 ; + + result = (switch_input_args_t *)new switch_input_args_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_input_args_t(void * jarg1) { + switch_input_args_t *arg1 = (switch_input_args_t *) 0 ; + + arg1 = (switch_input_args_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_say_args_t_type_set(void * jarg1, int jarg2) { + switch_say_args_t *arg1 = (switch_say_args_t *) 0 ; + switch_say_type_t arg2 ; + + arg1 = (switch_say_args_t *)jarg1; + arg2 = (switch_say_type_t)jarg2; + if (arg1) (arg1)->type = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_say_args_t_type_get(void * jarg1) { + int jresult ; + switch_say_args_t *arg1 = (switch_say_args_t *) 0 ; + switch_say_type_t result; + + arg1 = (switch_say_args_t *)jarg1; + result = (switch_say_type_t) ((arg1)->type); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_say_args_t_method_set(void * jarg1, int jarg2) { + switch_say_args_t *arg1 = (switch_say_args_t *) 0 ; + switch_say_method_t arg2 ; + + arg1 = (switch_say_args_t *)jarg1; + arg2 = (switch_say_method_t)jarg2; + if (arg1) (arg1)->method = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_say_args_t_method_get(void * jarg1) { + int jresult ; + switch_say_args_t *arg1 = (switch_say_args_t *) 0 ; + switch_say_method_t result; + + arg1 = (switch_say_args_t *)jarg1; + result = (switch_say_method_t) ((arg1)->method); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_say_args_t_gender_set(void * jarg1, int jarg2) { + switch_say_args_t *arg1 = (switch_say_args_t *) 0 ; + switch_say_gender_t arg2 ; + + arg1 = (switch_say_args_t *)jarg1; + arg2 = (switch_say_gender_t)jarg2; + if (arg1) (arg1)->gender = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_say_args_t_gender_get(void * jarg1) { + int jresult ; + switch_say_args_t *arg1 = (switch_say_args_t *) 0 ; + switch_say_gender_t result; + + arg1 = (switch_say_args_t *)jarg1; + result = (switch_say_gender_t) ((arg1)->gender); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_say_args_t() { + void * jresult ; + switch_say_args_t *result = 0 ; + + result = (switch_say_args_t *)new switch_say_args_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_say_args_t(void * jarg1) { + switch_say_args_t *arg1 = (switch_say_args_t *) 0 ; + + arg1 = (switch_say_args_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_API_VERSION_get() { + int jresult ; + int result; + + result = (int)(4); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_loadable_module_function_table_t_switch_api_version_set(void * jarg1, int jarg2) { + switch_loadable_module_function_table_t *arg1 = (switch_loadable_module_function_table_t *) 0 ; + int arg2 ; + + arg1 = (switch_loadable_module_function_table_t *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->switch_api_version = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_loadable_module_function_table_t_switch_api_version_get(void * jarg1) { + int jresult ; + switch_loadable_module_function_table_t *arg1 = (switch_loadable_module_function_table_t *) 0 ; + int result; + + arg1 = (switch_loadable_module_function_table_t *)jarg1; + result = (int) ((arg1)->switch_api_version); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_loadable_module_function_table_t_load_set(void * jarg1, void * jarg2) { + switch_loadable_module_function_table_t *arg1 = (switch_loadable_module_function_table_t *) 0 ; + switch_module_load_t arg2 = (switch_module_load_t) 0 ; + + arg1 = (switch_loadable_module_function_table_t *)jarg1; + arg2 = (switch_module_load_t)jarg2; + if (arg1) (arg1)->load = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_loadable_module_function_table_t_load_get(void * jarg1) { + void * jresult ; + switch_loadable_module_function_table_t *arg1 = (switch_loadable_module_function_table_t *) 0 ; + switch_module_load_t result; + + arg1 = (switch_loadable_module_function_table_t *)jarg1; + result = (switch_module_load_t) ((arg1)->load); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_loadable_module_function_table_t_shutdown_set(void * jarg1, void * jarg2) { + switch_loadable_module_function_table_t *arg1 = (switch_loadable_module_function_table_t *) 0 ; + switch_module_shutdown_t arg2 = (switch_module_shutdown_t) 0 ; + + arg1 = (switch_loadable_module_function_table_t *)jarg1; + arg2 = (switch_module_shutdown_t)jarg2; + if (arg1) (arg1)->shutdown = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_loadable_module_function_table_t_shutdown_get(void * jarg1) { + void * jresult ; + switch_loadable_module_function_table_t *arg1 = (switch_loadable_module_function_table_t *) 0 ; + switch_module_shutdown_t result; + + arg1 = (switch_loadable_module_function_table_t *)jarg1; + result = (switch_module_shutdown_t) ((arg1)->shutdown); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_loadable_module_function_table_t_runtime_set(void * jarg1, void * jarg2) { + switch_loadable_module_function_table_t *arg1 = (switch_loadable_module_function_table_t *) 0 ; + switch_module_runtime_t arg2 = (switch_module_runtime_t) 0 ; + + arg1 = (switch_loadable_module_function_table_t *)jarg1; + arg2 = (switch_module_runtime_t)jarg2; + if (arg1) (arg1)->runtime = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_loadable_module_function_table_t_runtime_get(void * jarg1) { + void * jresult ; + switch_loadable_module_function_table_t *arg1 = (switch_loadable_module_function_table_t *) 0 ; + switch_module_runtime_t result; + + arg1 = (switch_loadable_module_function_table_t *)jarg1; + result = (switch_module_runtime_t) ((arg1)->runtime); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_loadable_module_function_table_t_flags_set(void * jarg1, unsigned long jarg2) { + switch_loadable_module_function_table_t *arg1 = (switch_loadable_module_function_table_t *) 0 ; + switch_module_flag_t arg2 ; + + arg1 = (switch_loadable_module_function_table_t *)jarg1; + arg2 = (switch_module_flag_t)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_loadable_module_function_table_t_flags_get(void * jarg1) { + unsigned long jresult ; + switch_loadable_module_function_table_t *arg1 = (switch_loadable_module_function_table_t *) 0 ; + switch_module_flag_t result; + + arg1 = (switch_loadable_module_function_table_t *)jarg1; + result = (switch_module_flag_t) ((arg1)->flags); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_loadable_module_function_table_t() { + void * jresult ; + switch_loadable_module_function_table_t *result = 0 ; + + result = (switch_loadable_module_function_table_t *)new switch_loadable_module_function_table_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_loadable_module_function_table_t(void * jarg1) { + switch_loadable_module_function_table_t *arg1 = (switch_loadable_module_function_table_t *) 0 ; + + arg1 = (switch_loadable_module_function_table_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_close(void * jarg1) { + int jresult ; + switch_core_db_t *arg1 = (switch_core_db_t *) 0 ; + int result; + + arg1 = (switch_core_db_t *)jarg1; + result = (int)switch_core_db_close(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_open(char * jarg1, void * jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_core_db_t **arg2 = (switch_core_db_t **) 0 ; + int result; + + arg1 = (char *)jarg1; + arg2 = (switch_core_db_t **)jarg2; + result = (int)switch_core_db_open((char const *)arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_db_column_text(void * jarg1, int jarg2) { + void * jresult ; + switch_core_db_stmt_t *arg1 = (switch_core_db_stmt_t *) 0 ; + int arg2 ; + unsigned char *result = 0 ; + + arg1 = (switch_core_db_stmt_t *)jarg1; + arg2 = (int)jarg2; + result = (unsigned char *)switch_core_db_column_text(arg1,arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_db_column_name(void * jarg1, int jarg2) { + char * jresult ; + switch_core_db_stmt_t *arg1 = (switch_core_db_stmt_t *) 0 ; + int arg2 ; + char *result = 0 ; + + arg1 = (switch_core_db_stmt_t *)jarg1; + arg2 = (int)jarg2; + result = (char *)switch_core_db_column_name(arg1,arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_column_count(void * jarg1) { + int jresult ; + switch_core_db_stmt_t *arg1 = (switch_core_db_stmt_t *) 0 ; + int result; + + arg1 = (switch_core_db_stmt_t *)jarg1; + result = (int)switch_core_db_column_count(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_db_errmsg(void * jarg1) { + char * jresult ; + switch_core_db_t *arg1 = (switch_core_db_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_core_db_t *)jarg1; + result = (char *)switch_core_db_errmsg(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_exec(void * jarg1, char * jarg2, void * jarg3, void * jarg4, void * jarg5) { + int jresult ; + switch_core_db_t *arg1 = (switch_core_db_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_core_db_callback_func_t arg3 = (switch_core_db_callback_func_t) 0 ; + void *arg4 = (void *) 0 ; + char **arg5 = (char **) 0 ; + int result; + + arg1 = (switch_core_db_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_core_db_callback_func_t)jarg3; + arg4 = (void *)jarg4; + arg5 = (char **)jarg5; + result = (int)switch_core_db_exec(arg1,(char const *)arg2,arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_finalize(void * jarg1) { + int jresult ; + switch_core_db_stmt_t *arg1 = (switch_core_db_stmt_t *) 0 ; + int result; + + arg1 = (switch_core_db_stmt_t *)jarg1; + result = (int)switch_core_db_finalize(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_prepare(void * jarg1, char * jarg2, int jarg3, void * jarg4, void * jarg5) { + int jresult ; + switch_core_db_t *arg1 = (switch_core_db_t *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + switch_core_db_stmt_t **arg4 = (switch_core_db_stmt_t **) 0 ; + char **arg5 = (char **) 0 ; + int result; + + arg1 = (switch_core_db_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int)jarg3; + arg4 = (switch_core_db_stmt_t **)jarg4; + arg5 = (char **)jarg5; + result = (int)switch_core_db_prepare(arg1,(char const *)arg2,arg3,arg4,(char const **)arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_step(void * jarg1) { + int jresult ; + switch_core_db_stmt_t *arg1 = (switch_core_db_stmt_t *) 0 ; + int result; + + arg1 = (switch_core_db_stmt_t *)jarg1; + result = (int)switch_core_db_step(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_reset(void * jarg1) { + int jresult ; + switch_core_db_stmt_t *arg1 = (switch_core_db_stmt_t *) 0 ; + int result; + + arg1 = (switch_core_db_stmt_t *)jarg1; + result = (int)switch_core_db_reset(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_bind_int(void * jarg1, int jarg2, int jarg3) { + int jresult ; + switch_core_db_stmt_t *arg1 = (switch_core_db_stmt_t *) 0 ; + int arg2 ; + int arg3 ; + int result; + + arg1 = (switch_core_db_stmt_t *)jarg1; + arg2 = (int)jarg2; + arg3 = (int)jarg3; + result = (int)switch_core_db_bind_int(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_bind_int64(void * jarg1, int jarg2, long long jarg3) { + int jresult ; + switch_core_db_stmt_t *arg1 = (switch_core_db_stmt_t *) 0 ; + int arg2 ; + int64_t arg3 ; + int result; + + arg1 = (switch_core_db_stmt_t *)jarg1; + arg2 = (int)jarg2; + arg3 = (int64_t)jarg3; + result = (int)switch_core_db_bind_int64(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_bind_text(void * jarg1, int jarg2, char * jarg3, int jarg4, void * jarg5) { + int jresult ; + switch_core_db_stmt_t *arg1 = (switch_core_db_stmt_t *) 0 ; + int arg2 ; + char *arg3 = (char *) 0 ; + int arg4 ; + switch_core_db_destructor_type_t arg5 = (switch_core_db_destructor_type_t) 0 ; + int result; + + arg1 = (switch_core_db_stmt_t *)jarg1; + arg2 = (int)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + arg5 = (switch_core_db_destructor_type_t)jarg5; + result = (int)switch_core_db_bind_text(arg1,arg2,(char const *)arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_bind_double(void * jarg1, int jarg2, double jarg3) { + int jresult ; + switch_core_db_stmt_t *arg1 = (switch_core_db_stmt_t *) 0 ; + int arg2 ; + double arg3 ; + int result; + + arg1 = (switch_core_db_stmt_t *)jarg1; + arg2 = (int)jarg2; + arg3 = (double)jarg3; + result = (int)switch_core_db_bind_double(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT long long SWIGSTDCALL CSharp_switch_core_db_last_insert_rowid(void * jarg1) { + long long jresult ; + switch_core_db_t *arg1 = (switch_core_db_t *) 0 ; + int64_t result; + + arg1 = (switch_core_db_t *)jarg1; + result = (int64_t)switch_core_db_last_insert_rowid(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_get_table(void * jarg1, char * jarg2, void * jarg3, void * jarg4, void * jarg5, void * jarg6) { + int jresult ; + switch_core_db_t *arg1 = (switch_core_db_t *) 0 ; + char *arg2 = (char *) 0 ; + char ***arg3 = (char ***) 0 ; + int *arg4 = (int *) 0 ; + int *arg5 = (int *) 0 ; + char **arg6 = (char **) 0 ; + int result; + + arg1 = (switch_core_db_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char ***)jarg3; + arg4 = (int *)jarg4; + arg5 = (int *)jarg5; + arg6 = (char **)jarg6; + result = (int)switch_core_db_get_table(arg1,(char const *)arg2,arg3,arg4,arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_db_free_table(void * jarg1) { + char **arg1 = (char **) 0 ; + + arg1 = (char **)jarg1; + switch_core_db_free_table(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_db_free(char * jarg1) { + char *arg1 = (char *) 0 ; + + arg1 = (char *)jarg1; + switch_core_db_free(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_changes(void * jarg1) { + int jresult ; + switch_core_db_t *arg1 = (switch_core_db_t *) 0 ; + int result; + + arg1 = (switch_core_db_t *)jarg1; + result = (int)switch_core_db_changes(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_OK_get() { + int jresult ; + int result; + + result = (int)(0); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_ERROR_get() { + int jresult ; + int result; + + result = (int)(1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_INTERNAL_get() { + int jresult ; + int result; + + result = (int)(2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_PERM_get() { + int jresult ; + int result; + + result = (int)(3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_ABORT_get() { + int jresult ; + int result; + + result = (int)(4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_BUSY_get() { + int jresult ; + int result; + + result = (int)(5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_LOCKED_get() { + int jresult ; + int result; + + result = (int)(6); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_NOMEM_get() { + int jresult ; + int result; + + result = (int)(7); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_READONLY_get() { + int jresult ; + int result; + + result = (int)(8); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_INTERRUPT_get() { + int jresult ; + int result; + + result = (int)(9); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_IOERR_get() { + int jresult ; + int result; + + result = (int)(10); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_CORRUPT_get() { + int jresult ; + int result; + + result = (int)(11); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_NOTFOUND_get() { + int jresult ; + int result; + + result = (int)(12); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_FULL_get() { + int jresult ; + int result; + + result = (int)(13); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_CANTOPEN_get() { + int jresult ; + int result; + + result = (int)(14); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_PROTOCOL_get() { + int jresult ; + int result; + + result = (int)(15); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_EMPTY_get() { + int jresult ; + int result; + + result = (int)(16); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_SCHEMA_get() { + int jresult ; + int result; + + result = (int)(17); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_TOOBIG_get() { + int jresult ; + int result; + + result = (int)(18); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_CONSTRAINT_get() { + int jresult ; + int result; + + result = (int)(19); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_MISMATCH_get() { + int jresult ; + int result; + + result = (int)(20); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_MISUSE_get() { + int jresult ; + int result; + + result = (int)(21); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_NOLFS_get() { + int jresult ; + int result; + + result = (int)(22); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_AUTH_get() { + int jresult ; + int result; + + result = (int)(23); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_FORMAT_get() { + int jresult ; + int result; + + result = (int)(24); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_RANGE_get() { + int jresult ; + int result; + + result = (int)(25); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_NOTADB_get() { + int jresult ; + int result; + + result = (int)(26); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_ROW_get() { + int jresult ; + int result; + + result = (int)(100); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CORE_DB_DONE_get() { + int jresult ; + int result; + + result = (int)(101); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_regex_compile(char * jarg1, int jarg2, void * jarg3, void * jarg4, void * jarg5) { + void * jresult ; + char *arg1 = (char *) 0 ; + int arg2 ; + char **arg3 = (char **) 0 ; + int *arg4 = (int *) 0 ; + unsigned char *arg5 = (unsigned char *) 0 ; + switch_regex_t *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (int)jarg2; + arg3 = (char **)jarg3; + arg4 = (int *)jarg4; + arg5 = (unsigned char *)jarg5; + result = (switch_regex_t *)switch_regex_compile((char const *)arg1,arg2,(char const **)arg3,arg4,(unsigned char const *)arg5); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_regex_copy_substring(char * jarg1, void * jarg2, int jarg3, int jarg4, char * jarg5, int jarg6) { + int jresult ; + char *arg1 = (char *) 0 ; + int *arg2 = (int *) 0 ; + int arg3 ; + int arg4 ; + char *arg5 = (char *) 0 ; + int arg6 ; + int result; + + arg1 = (char *)jarg1; + arg2 = (int *)jarg2; + arg3 = (int)jarg3; + arg4 = (int)jarg4; + arg5 = (char *)jarg5; + arg6 = (int)jarg6; + result = (int)switch_regex_copy_substring((char const *)arg1,arg2,arg3,arg4,arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_regex_free(void * jarg1) { + void *arg1 = (void *) 0 ; + + arg1 = (void *)jarg1; + switch_regex_free(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_regex_perform(char * jarg1, char * jarg2, void * jarg3, void * jarg4, unsigned long jarg5) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_regex_t **arg3 = (switch_regex_t **) 0 ; + int *arg4 = (int *) 0 ; + uint32_t arg5 ; + int result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_regex_t **)jarg3; + arg4 = (int *)jarg4; + arg5 = (uint32_t)jarg5; + result = (int)switch_regex_perform((char const *)arg1,(char const *)arg2,arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_perform_substitution(void * jarg1, int jarg2, char * jarg3, char * jarg4, char * jarg5, void * jarg6, void * jarg7) { + switch_regex_t *arg1 = (switch_regex_t *) 0 ; + int arg2 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + switch_size_t arg6 ; + int *arg7 = (int *) 0 ; + switch_size_t *argp6 ; + + arg1 = (switch_regex_t *)jarg1; + arg2 = (int)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + argp6 = (switch_size_t *)jarg6; + if (!argp6) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return ; + } + arg6 = *argp6; + arg7 = (int *)jarg7; + switch_perform_substitution(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5,arg6,arg7); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_regex_match(char * jarg1, char * jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_regex_match((char const *)arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_regex_match_partial(char * jarg1, char * jarg2, void * jarg3) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int *)jarg3; + result = (switch_status_t)switch_regex_match_partial((char const *)arg1,(char const *)arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_MAX_CORE_THREAD_SESSION_OBJS_get() { + int jresult ; + int result; + + result = (int)(128); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_MAX_STREAMS_get() { + int jresult ; + int result; + + result = (int)(128); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_time_duration_mms_set(void * jarg1, unsigned long jarg2) { + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_core_time_duration *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->mms = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_time_duration_mms_get(void * jarg1) { + unsigned long jresult ; + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + uint32_t result; + + arg1 = (switch_core_time_duration *)jarg1; + result = (uint32_t) ((arg1)->mms); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_time_duration_ms_set(void * jarg1, unsigned long jarg2) { + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_core_time_duration *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->ms = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_time_duration_ms_get(void * jarg1) { + unsigned long jresult ; + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + uint32_t result; + + arg1 = (switch_core_time_duration *)jarg1; + result = (uint32_t) ((arg1)->ms); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_time_duration_sec_set(void * jarg1, unsigned long jarg2) { + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_core_time_duration *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->sec = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_time_duration_sec_get(void * jarg1) { + unsigned long jresult ; + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + uint32_t result; + + arg1 = (switch_core_time_duration *)jarg1; + result = (uint32_t) ((arg1)->sec); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_time_duration_min_set(void * jarg1, unsigned long jarg2) { + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_core_time_duration *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->min = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_time_duration_min_get(void * jarg1) { + unsigned long jresult ; + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + uint32_t result; + + arg1 = (switch_core_time_duration *)jarg1; + result = (uint32_t) ((arg1)->min); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_time_duration_hr_set(void * jarg1, unsigned long jarg2) { + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_core_time_duration *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->hr = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_time_duration_hr_get(void * jarg1) { + unsigned long jresult ; + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + uint32_t result; + + arg1 = (switch_core_time_duration *)jarg1; + result = (uint32_t) ((arg1)->hr); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_time_duration_day_set(void * jarg1, unsigned long jarg2) { + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_core_time_duration *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->day = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_time_duration_day_get(void * jarg1) { + unsigned long jresult ; + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + uint32_t result; + + arg1 = (switch_core_time_duration *)jarg1; + result = (uint32_t) ((arg1)->day); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_time_duration_yr_set(void * jarg1, unsigned long jarg2) { + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_core_time_duration *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->yr = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_time_duration_yr_get(void * jarg1) { + unsigned long jresult ; + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + uint32_t result; + + arg1 = (switch_core_time_duration *)jarg1; + result = (uint32_t) ((arg1)->yr); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_core_time_duration() { + void * jresult ; + switch_core_time_duration *result = 0 ; + + result = (switch_core_time_duration *)new switch_core_time_duration(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_core_time_duration(void * jarg1) { + switch_core_time_duration *arg1 = (switch_core_time_duration *) 0 ; + + arg1 = (switch_core_time_duration *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_app_log_app_set(void * jarg1, char * jarg2) { + switch_app_log *arg1 = (switch_app_log *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_app_log *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->app) delete [] arg1->app; + if (arg2) { + arg1->app = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->app, (const char *)arg2); + } else { + arg1->app = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_app_log_app_get(void * jarg1) { + char * jresult ; + switch_app_log *arg1 = (switch_app_log *) 0 ; + char *result = 0 ; + + arg1 = (switch_app_log *)jarg1; + result = (char *) ((arg1)->app); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_app_log_arg_set(void * jarg1, char * jarg2) { + switch_app_log *arg1 = (switch_app_log *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_app_log *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->arg) delete [] arg1->arg; + if (arg2) { + arg1->arg = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->arg, (const char *)arg2); + } else { + arg1->arg = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_app_log_arg_get(void * jarg1) { + char * jresult ; + switch_app_log *arg1 = (switch_app_log *) 0 ; + char *result = 0 ; + + arg1 = (switch_app_log *)jarg1; + result = (char *) ((arg1)->arg); + jresult = SWIG_csharp_string_callback((const char *)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 ; + + arg1 = (switch_app_log *)jarg1; + arg2 = (switch_app_log *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_app_log_next_get(void * jarg1) { + void * jresult ; + switch_app_log *arg1 = (switch_app_log *) 0 ; + switch_app_log *result = 0 ; + + arg1 = (switch_app_log *)jarg1; + result = (switch_app_log *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_app_log() { + void * jresult ; + switch_app_log *result = 0 ; + + result = (switch_app_log *)new switch_app_log(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_app_log(void * jarg1) { + switch_app_log *arg1 = (switch_app_log *) 0 ; + + arg1 = (switch_app_log *)jarg1; + delete arg1; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_MESSAGE_STRING_ARG_MAX_get() { + int jresult ; + int result; + + result = (int)(10); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_from_set(void * jarg1, char * jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_core_session_message *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->from) delete [] arg1->from; + if (arg2) { + arg1->from = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->from, (const char *)arg2); + } else { + arg1->from = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_session_message_from_get(void * jarg1) { + char * jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + char *result = 0 ; + + arg1 = (switch_core_session_message *)jarg1; + result = (char *) ((arg1)->from); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_message_id_set(void * jarg1, int jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + switch_core_session_message_types_t arg2 ; + + arg1 = (switch_core_session_message *)jarg1; + arg2 = (switch_core_session_message_types_t)jarg2; + if (arg1) (arg1)->message_id = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_message_message_id_get(void * jarg1) { + int jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + switch_core_session_message_types_t result; + + arg1 = (switch_core_session_message *)jarg1; + result = (switch_core_session_message_types_t) ((arg1)->message_id); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_numeric_arg_set(void * jarg1, int jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + int arg2 ; + + arg1 = (switch_core_session_message *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->numeric_arg = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_message_numeric_arg_get(void * jarg1) { + int jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + int result; + + arg1 = (switch_core_session_message *)jarg1; + result = (int) ((arg1)->numeric_arg); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_string_arg_set(void * jarg1, char * jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_core_session_message *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->string_arg = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->string_arg, (const char *)arg2); + } else { + arg1->string_arg = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_session_message_string_arg_get(void * jarg1) { + char * jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + char *result = 0 ; + + arg1 = (switch_core_session_message *)jarg1; + result = (char *) ((arg1)->string_arg); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_string_arg_size_set(void * jarg1, void * jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_core_session_message *)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)->string_arg_size = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_message_string_arg_size_get(void * jarg1) { + void * jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + switch_size_t result; + + arg1 = (switch_core_session_message *)jarg1; + result = ((arg1)->string_arg_size); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_pointer_arg_set(void * jarg1, void * jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_core_session_message *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->pointer_arg = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_message_pointer_arg_get(void * jarg1) { + void * jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + void *result = 0 ; + + arg1 = (switch_core_session_message *)jarg1; + result = (void *) ((arg1)->pointer_arg); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_pointer_arg_size_set(void * jarg1, void * jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_core_session_message *)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)->pointer_arg_size = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_message_pointer_arg_size_get(void * jarg1) { + void * jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + switch_size_t result; + + arg1 = (switch_core_session_message *)jarg1; + result = ((arg1)->pointer_arg_size); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_numeric_reply_set(void * jarg1, int jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + int arg2 ; + + arg1 = (switch_core_session_message *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->numeric_reply = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_message_numeric_reply_get(void * jarg1) { + int jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + int result; + + arg1 = (switch_core_session_message *)jarg1; + result = (int) ((arg1)->numeric_reply); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_string_reply_set(void * jarg1, char * jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_core_session_message *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->string_reply) delete [] arg1->string_reply; + if (arg2) { + arg1->string_reply = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->string_reply, (const char *)arg2); + } else { + arg1->string_reply = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_session_message_string_reply_get(void * jarg1) { + char * jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + char *result = 0 ; + + arg1 = (switch_core_session_message *)jarg1; + result = (char *) ((arg1)->string_reply); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_string_reply_size_set(void * jarg1, void * jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_core_session_message *)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)->string_reply_size = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_message_string_reply_size_get(void * jarg1) { + void * jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + switch_size_t result; + + arg1 = (switch_core_session_message *)jarg1; + result = ((arg1)->string_reply_size); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_pointer_reply_set(void * jarg1, void * jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_core_session_message *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->pointer_reply = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_message_pointer_reply_get(void * jarg1) { + void * jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + void *result = 0 ; + + arg1 = (switch_core_session_message *)jarg1; + result = (void *) ((arg1)->pointer_reply); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_pointer_reply_size_set(void * jarg1, void * jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_core_session_message *)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)->pointer_reply_size = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_message_pointer_reply_size_get(void * jarg1) { + void * jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + switch_size_t result; + + arg1 = (switch_core_session_message *)jarg1; + result = ((arg1)->pointer_reply_size); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_flags_set(void * jarg1, unsigned long jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + switch_core_session_message_flag_t arg2 ; + + arg1 = (switch_core_session_message *)jarg1; + arg2 = (switch_core_session_message_flag_t)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_session_message_flags_get(void * jarg1) { + unsigned long jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + switch_core_session_message_flag_t result; + + arg1 = (switch_core_session_message *)jarg1; + result = (switch_core_session_message_flag_t) ((arg1)->flags); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message__file_set(void * jarg1, char * jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_core_session_message *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->_file = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->_file, (const char *)arg2); + } else { + arg1->_file = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_session_message__file_get(void * jarg1) { + char * jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + char *result = 0 ; + + arg1 = (switch_core_session_message *)jarg1; + result = (char *) ((arg1)->_file); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message__func_set(void * jarg1, char * jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_core_session_message *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->_func = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->_func, (const char *)arg2); + } else { + arg1->_func = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_session_message__func_get(void * jarg1) { + char * jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + char *result = 0 ; + + arg1 = (switch_core_session_message *)jarg1; + result = (char *) ((arg1)->_func); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message__line_set(void * jarg1, int jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + int arg2 ; + + arg1 = (switch_core_session_message *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->_line = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_message__line_get(void * jarg1) { + int jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + int result; + + arg1 = (switch_core_session_message *)jarg1; + result = (int) ((arg1)->_line); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_string_array_arg_set(void * jarg1, void * jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + char **arg2 ; + + arg1 = (switch_core_session_message *)jarg1; + arg2 = (char **)jarg2; + { + size_t ii; + char const * *b = (char const * *) arg1->string_array_arg; + for (ii = 0; ii < (size_t)10; ii++) b[ii] = *((char const * *) arg2 + ii); + } +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_message_string_array_arg_get(void * jarg1) { + void * jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + char **result = 0 ; + + arg1 = (switch_core_session_message *)jarg1; + result = (char **)(char **) ((arg1)->string_array_arg); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_delivery_time_set(void * jarg1, void * jarg2) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + time_t arg2 ; + time_t *argp2 ; + + arg1 = (switch_core_session_message *)jarg1; + argp2 = (time_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null time_t", 0); + return ; + } + arg2 = *argp2; + if (arg1) (arg1)->delivery_time = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_message_delivery_time_get(void * jarg1) { + void * jresult ; + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + time_t result; + + arg1 = (switch_core_session_message *)jarg1; + result = ((arg1)->delivery_time); + jresult = new time_t((const time_t &)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_core_session_message() { + void * jresult ; + switch_core_session_message *result = 0 ; + + result = (switch_core_session_message *)new switch_core_session_message(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_core_session_message(void * jarg1) { + switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; + + arg1 = (switch_core_session_message *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_thread_session_running_set(void * jarg1, int jarg2) { + switch_core_thread_session *arg1 = (switch_core_thread_session *) 0 ; + int arg2 ; + + arg1 = (switch_core_thread_session *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->running = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_thread_session_running_get(void * jarg1) { + int jresult ; + switch_core_thread_session *arg1 = (switch_core_thread_session *) 0 ; + int result; + + arg1 = (switch_core_thread_session *)jarg1; + result = (int) ((arg1)->running); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_thread_session_mutex_set(void * jarg1, void * jarg2) { + switch_core_thread_session *arg1 = (switch_core_thread_session *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_core_thread_session *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->mutex = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_thread_session_mutex_get(void * jarg1) { + void * jresult ; + switch_core_thread_session *arg1 = (switch_core_thread_session *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_core_thread_session *)jarg1; + result = (switch_mutex_t *) ((arg1)->mutex); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_thread_session_objs_set(void * jarg1, void * jarg2) { + switch_core_thread_session *arg1 = (switch_core_thread_session *) 0 ; + void **arg2 ; + + arg1 = (switch_core_thread_session *)jarg1; + arg2 = (void **)jarg2; + { + size_t ii; + void * *b = (void * *) arg1->objs; + for (ii = 0; ii < (size_t)128; ii++) b[ii] = *((void * *) arg2 + ii); + } +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_thread_session_objs_get(void * jarg1) { + void * jresult ; + switch_core_thread_session *arg1 = (switch_core_thread_session *) 0 ; + void **result = 0 ; + + arg1 = (switch_core_thread_session *)jarg1; + result = (void **)(void **) ((arg1)->objs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_thread_session_input_callback_set(void * jarg1, void * jarg2) { + switch_core_thread_session *arg1 = (switch_core_thread_session *) 0 ; + switch_input_callback_function_t arg2 = (switch_input_callback_function_t) 0 ; + + arg1 = (switch_core_thread_session *)jarg1; + arg2 = (switch_input_callback_function_t)jarg2; + if (arg1) (arg1)->input_callback = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_thread_session_input_callback_get(void * jarg1) { + void * jresult ; + switch_core_thread_session *arg1 = (switch_core_thread_session *) 0 ; + switch_input_callback_function_t result; + + arg1 = (switch_core_thread_session *)jarg1; + result = (switch_input_callback_function_t) ((arg1)->input_callback); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_thread_session_pool_set(void * jarg1, void * jarg2) { + switch_core_thread_session *arg1 = (switch_core_thread_session *) 0 ; + switch_memory_pool_t *arg2 = (switch_memory_pool_t *) 0 ; + + arg1 = (switch_core_thread_session *)jarg1; + arg2 = (switch_memory_pool_t *)jarg2; + if (arg1) (arg1)->pool = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_thread_session_pool_get(void * jarg1) { + void * jresult ; + switch_core_thread_session *arg1 = (switch_core_thread_session *) 0 ; + switch_memory_pool_t *result = 0 ; + + arg1 = (switch_core_thread_session *)jarg1; + result = (switch_memory_pool_t *) ((arg1)->pool); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_core_thread_session() { + void * jresult ; + switch_core_thread_session *result = 0 ; + + result = (switch_core_thread_session *)new switch_core_thread_session(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_core_thread_session(void * jarg1) { + switch_core_thread_session *arg1 = (switch_core_thread_session *) 0 ; + + arg1 = (switch_core_thread_session *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_sched_heartbeat(void * jarg1, unsigned long jarg2) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (uint32_t)jarg2; + switch_core_session_sched_heartbeat(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_unsched_heartbeat(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_unsched_heartbeat(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_enable_heartbeat(void * jarg1, unsigned long jarg2) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (uint32_t)jarg2; + switch_core_session_enable_heartbeat(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_disable_heartbeat(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_disable_heartbeat(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_media_bug_add(void * jarg1, char * jarg2, char * jarg3, void * jarg4, void * jarg5, void * jarg6, unsigned long jarg7, void * jarg8) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_media_bug_callback_t arg4 = (switch_media_bug_callback_t) 0 ; + void *arg5 = (void *) 0 ; + time_t arg6 ; + switch_media_bug_flag_t arg7 ; + switch_media_bug_t **arg8 = (switch_media_bug_t **) 0 ; + time_t *argp6 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_media_bug_callback_t)jarg4; + arg5 = (void *)jarg5; + argp6 = (time_t *)jarg6; + if (!argp6) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null time_t", 0); + return 0; + } + arg6 = *argp6; + arg7 = (switch_media_bug_flag_t)jarg7; + arg8 = (switch_media_bug_t **)jarg8; + result = (switch_status_t)switch_core_media_bug_add(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5,arg6,arg7,arg8); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_media_bug_pause(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_media_bug_pause(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_media_bug_resume(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_media_bug_resume(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_media_bug_inuse(void * jarg1, void * jarg2, void * jarg3) { + switch_media_bug_t *arg1 = (switch_media_bug_t *) 0 ; + switch_size_t *arg2 = (switch_size_t *) 0 ; + switch_size_t *arg3 = (switch_size_t *) 0 ; + + arg1 = (switch_media_bug_t *)jarg1; + arg2 = (switch_size_t *)jarg2; + arg3 = (switch_size_t *)jarg3; + switch_core_media_bug_inuse(arg1,arg2,arg3); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_media_bug_get_user_data(void * jarg1) { + void * jresult ; + switch_media_bug_t *arg1 = (switch_media_bug_t *) 0 ; + void *result = 0 ; + + arg1 = (switch_media_bug_t *)jarg1; + result = (void *)switch_core_media_bug_get_user_data(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_media_bug_get_write_replace_frame(void * jarg1) { + void * jresult ; + switch_media_bug_t *arg1 = (switch_media_bug_t *) 0 ; + switch_frame_t *result = 0 ; + + arg1 = (switch_media_bug_t *)jarg1; + result = (switch_frame_t *)switch_core_media_bug_get_write_replace_frame(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_media_bug_set_write_replace_frame(void * jarg1, void * jarg2) { + switch_media_bug_t *arg1 = (switch_media_bug_t *) 0 ; + switch_frame_t *arg2 = (switch_frame_t *) 0 ; + + arg1 = (switch_media_bug_t *)jarg1; + arg2 = (switch_frame_t *)jarg2; + switch_core_media_bug_set_write_replace_frame(arg1,arg2); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_media_bug_get_read_replace_frame(void * jarg1) { + void * jresult ; + switch_media_bug_t *arg1 = (switch_media_bug_t *) 0 ; + switch_frame_t *result = 0 ; + + arg1 = (switch_media_bug_t *)jarg1; + result = (switch_frame_t *)switch_core_media_bug_get_read_replace_frame(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_media_bug_get_session(void * jarg1) { + void * jresult ; + switch_media_bug_t *arg1 = (switch_media_bug_t *) 0 ; + switch_core_session_t *result = 0 ; + + arg1 = (switch_media_bug_t *)jarg1; + result = (switch_core_session_t *)switch_core_media_bug_get_session(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_media_bug_test_flag(void * jarg1, unsigned long jarg2) { + unsigned long jresult ; + switch_media_bug_t *arg1 = (switch_media_bug_t *) 0 ; + uint32_t arg2 ; + uint32_t result; + + arg1 = (switch_media_bug_t *)jarg1; + arg2 = (uint32_t)jarg2; + result = (uint32_t)switch_core_media_bug_test_flag(arg1,arg2); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_media_bug_set_flag(void * jarg1, unsigned long jarg2) { + unsigned long jresult ; + switch_media_bug_t *arg1 = (switch_media_bug_t *) 0 ; + uint32_t arg2 ; + uint32_t result; + + arg1 = (switch_media_bug_t *)jarg1; + arg2 = (uint32_t)jarg2; + result = (uint32_t)switch_core_media_bug_set_flag(arg1,arg2); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_media_bug_clear_flag(void * jarg1, unsigned long jarg2) { + unsigned long jresult ; + switch_media_bug_t *arg1 = (switch_media_bug_t *) 0 ; + uint32_t arg2 ; + uint32_t result; + + arg1 = (switch_media_bug_t *)jarg1; + arg2 = (uint32_t)jarg2; + result = (uint32_t)switch_core_media_bug_clear_flag(arg1,arg2); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_media_bug_set_read_replace_frame(void * jarg1, void * jarg2) { + switch_media_bug_t *arg1 = (switch_media_bug_t *) 0 ; + switch_frame_t *arg2 = (switch_frame_t *) 0 ; + + arg1 = (switch_media_bug_t *)jarg1; + arg2 = (switch_frame_t *)jarg2; + switch_core_media_bug_set_read_replace_frame(arg1,arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_media_bug_remove(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_media_bug_t **arg2 = (switch_media_bug_t **) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_media_bug_t **)jarg2; + result = (switch_status_t)switch_core_media_bug_remove(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_media_bug_prune(void * jarg1) { + unsigned long jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (uint32_t)switch_core_media_bug_prune(arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_media_bug_remove_callback(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_media_bug_callback_t arg2 = (switch_media_bug_callback_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_media_bug_callback_t)jarg2; + result = (switch_status_t)switch_core_media_bug_remove_callback(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_media_bug_close(void * jarg1) { + int jresult ; + switch_media_bug_t **arg1 = (switch_media_bug_t **) 0 ; + switch_status_t result; + + arg1 = (switch_media_bug_t **)jarg1; + result = (switch_status_t)switch_core_media_bug_close(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_media_bug_remove_all(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_core_media_bug_remove_all(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_media_bug_read(void * jarg1, void * jarg2, int jarg3) { + int jresult ; + switch_media_bug_t *arg1 = (switch_media_bug_t *) 0 ; + switch_frame_t *arg2 = (switch_frame_t *) 0 ; + switch_bool_t arg3 ; + switch_status_t result; + + arg1 = (switch_media_bug_t *)jarg1; + arg2 = (switch_frame_t *)jarg2; + arg3 = (switch_bool_t)jarg3; + result = (switch_status_t)switch_core_media_bug_read(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_media_bug_flush(void * jarg1) { + switch_media_bug_t *arg1 = (switch_media_bug_t *) 0 ; + + arg1 = (switch_media_bug_t *)jarg1; + switch_core_media_bug_flush(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_media_bug_flush_all(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_core_media_bug_flush_all(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_port_allocator_new(unsigned short jarg1, unsigned short jarg2, unsigned long jarg3, void * jarg4) { + int jresult ; + switch_port_t arg1 ; + switch_port_t arg2 ; + switch_port_flag_t arg3 ; + switch_core_port_allocator_t **arg4 = (switch_core_port_allocator_t **) 0 ; + switch_status_t result; + + arg1 = (switch_port_t)jarg1; + arg2 = (switch_port_t)jarg2; + arg3 = (switch_port_flag_t)jarg3; + arg4 = (switch_core_port_allocator_t **)jarg4; + result = (switch_status_t)switch_core_port_allocator_new(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_port_allocator_request_port(void * jarg1, void * jarg2) { + int jresult ; + switch_core_port_allocator_t *arg1 = (switch_core_port_allocator_t *) 0 ; + switch_port_t *arg2 = (switch_port_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_port_allocator_t *)jarg1; + arg2 = (switch_port_t *)jarg2; + result = (switch_status_t)switch_core_port_allocator_request_port(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_port_allocator_free_port(void * jarg1, unsigned short jarg2) { + int jresult ; + switch_core_port_allocator_t *arg1 = (switch_core_port_allocator_t *) 0 ; + switch_port_t arg2 ; + switch_status_t result; + + arg1 = (switch_core_port_allocator_t *)jarg1; + arg2 = (switch_port_t)jarg2; + result = (switch_status_t)switch_core_port_allocator_free_port(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_port_allocator_destroy(void * jarg1) { + switch_core_port_allocator_t **arg1 = (switch_core_port_allocator_t **) 0 ; + + arg1 = (switch_core_port_allocator_t **)jarg1; + switch_core_port_allocator_destroy(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_init(unsigned long jarg1, int jarg2, void * jarg3) { + int jresult ; + switch_core_flag_t arg1 ; + switch_bool_t arg2 ; + char **arg3 = (char **) 0 ; + switch_status_t result; + + arg1 = (switch_core_flag_t)jarg1; + arg2 = (switch_bool_t)jarg2; + arg3 = (char **)jarg3; + result = (switch_status_t)switch_core_init(arg1,arg2,(char const **)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_init_and_modload(unsigned long jarg1, int jarg2, void * jarg3) { + int jresult ; + switch_core_flag_t arg1 ; + switch_bool_t arg2 ; + char **arg3 = (char **) 0 ; + switch_status_t result; + + arg1 = (switch_core_flag_t)jarg1; + arg2 = (switch_bool_t)jarg2; + arg3 = (char **)jarg3; + result = (switch_status_t)switch_core_init_and_modload(arg1,arg2,(char const **)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_session_limit(unsigned long jarg1) { + unsigned long jresult ; + uint32_t arg1 ; + uint32_t result; + + arg1 = (uint32_t)jarg1; + result = (uint32_t)switch_core_session_limit(arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_sessions_per_second(unsigned long jarg1) { + unsigned long jresult ; + uint32_t arg1 ; + uint32_t result; + + arg1 = (uint32_t)jarg1; + result = (uint32_t)switch_core_sessions_per_second(arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_destroy() { + int jresult ; + switch_status_t result; + + result = (switch_status_t)switch_core_destroy(); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_read_lock(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_core_session_read_lock(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_read_lock_hangup(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_core_session_read_lock_hangup(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_write_lock(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_write_lock(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_rwunlock(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_rwunlock(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_add_state_handler(void * jarg1) { + int jresult ; + switch_state_handler_table_t *arg1 = (switch_state_handler_table_t *) 0 ; + int result; + + arg1 = (switch_state_handler_table_t *)jarg1; + result = (int)switch_core_add_state_handler((switch_state_handler_table const *)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 ; + + arg1 = (switch_state_handler_table_t *)jarg1; + switch_core_remove_state_handler((switch_state_handler_table const *)arg1); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_get_state_handler(int jarg1) { + void * jresult ; + int arg1 ; + switch_state_handler_table_t *result = 0 ; + + arg1 = (int)jarg1; + result = (switch_state_handler_table_t *)switch_core_get_state_handler(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_memory_pool_tag(void * jarg1, char * jarg2) { + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_memory_pool_t *)jarg1; + arg2 = (char *)jarg2; + switch_core_memory_pool_tag(arg1,(char const *)arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_perform_new_memory_pool(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + int jresult ; + switch_memory_pool_t **arg1 = (switch_memory_pool_t **) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + switch_status_t result; + + arg1 = (switch_memory_pool_t **)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + result = (switch_status_t)switch_core_perform_new_memory_pool(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_perform_destroy_memory_pool(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + int jresult ; + switch_memory_pool_t **arg1 = (switch_memory_pool_t **) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + switch_status_t result; + + arg1 = (switch_memory_pool_t **)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + result = (switch_status_t)switch_core_perform_destroy_memory_pool(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_memory_pool_set_data(void * jarg1, char * jarg2, void * jarg3) { + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + char *arg2 = (char *) 0 ; + void *arg3 = (void *) 0 ; + + arg1 = (switch_memory_pool_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (void *)jarg3; + switch_core_memory_pool_set_data(arg1,(char const *)arg2,arg3); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_memory_pool_get_data(void * jarg1, char * jarg2) { + void * jresult ; + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + char *arg2 = (char *) 0 ; + void *result = 0 ; + + arg1 = (switch_memory_pool_t *)jarg1; + arg2 = (char *)jarg2; + result = (void *)switch_core_memory_pool_get_data(arg1,(char const *)arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_run(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_run(arg1); +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_core_session_running(void * jarg1) { + unsigned int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + unsigned int result; + + arg1 = (switch_core_session_t *)jarg1; + result = (unsigned int)switch_core_session_running(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_core_session_started(void * jarg1) { + unsigned int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + unsigned int result; + + arg1 = (switch_core_session_t *)jarg1; + result = (unsigned int)switch_core_session_started(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_perform_permanent_alloc(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + void * jresult ; + switch_size_t arg1 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + switch_size_t *argp1 ; + void *result = 0 ; + + argp1 = (switch_size_t *)jarg1; + if (!argp1) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg1 = *argp1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + result = (void *)switch_core_perform_permanent_alloc(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_perform_alloc(void * jarg1, void * jarg2, char * jarg3, char * jarg4, int jarg5) { + void * jresult ; + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + switch_size_t arg2 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + int arg5 ; + switch_size_t *argp2 ; + void *result = 0 ; + + arg1 = (switch_memory_pool_t *)jarg1; + argp2 = (switch_size_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg2 = *argp2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (int)jarg5; + result = (void *)switch_core_perform_alloc(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_perform_session_alloc(void * jarg1, void * jarg2, char * jarg3, char * jarg4, int jarg5) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_size_t arg2 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + int arg5 ; + switch_size_t *argp2 ; + void *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + argp2 = (switch_size_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg2 = *argp2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (int)jarg5; + result = (void *)switch_core_perform_session_alloc(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_perform_permanent_strdup(char * jarg1, char * jarg2, char * jarg3, int jarg4) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + result = (char *)switch_core_perform_permanent_strdup((char const *)arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_perform_session_strdup(void * jarg1, char * jarg2, char * jarg3, char * jarg4, int jarg5) { + char * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + int arg5 ; + char *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (int)jarg5; + result = (char *)switch_core_perform_session_strdup(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,arg5); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_perform_strdup(void * jarg1, char * jarg2, char * jarg3, char * jarg4, int jarg5) { + char * jresult ; + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + int arg5 ; + char *result = 0 ; + + arg1 = (switch_memory_pool_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (int)jarg5; + result = (char *)switch_core_perform_strdup(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,arg5); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_session_sprintf(void * jarg1, char * jarg2) { + char * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + void *arg3 = 0 ; + char *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + result = (char *)switch_core_session_sprintf(arg1,(char const *)arg2,arg3); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_sprintf(void * jarg1, char * jarg2) { + char * jresult ; + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + char *arg2 = (char *) 0 ; + void *arg3 = 0 ; + char *result = 0 ; + + arg1 = (switch_memory_pool_t *)jarg1; + arg2 = (char *)jarg2; + result = (char *)switch_core_sprintf(arg1,(char const *)arg2,arg3); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_get_pool(void * jarg1) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_memory_pool_t *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_memory_pool_t *)switch_core_session_get_pool(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_request_xml(void * jarg1, void * jarg2, void * jarg3) { + void * jresult ; + switch_endpoint_interface_t *arg1 = (switch_endpoint_interface_t *) 0 ; + switch_memory_pool_t **arg2 = (switch_memory_pool_t **) 0 ; + switch_xml_t arg3 = (switch_xml_t) 0 ; + switch_core_session_t *result = 0 ; + + arg1 = (switch_endpoint_interface_t *)jarg1; + arg2 = (switch_memory_pool_t **)jarg2; + arg3 = (switch_xml_t)jarg3; + result = (switch_core_session_t *)switch_core_session_request_xml(arg1,arg2,arg3); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_request_uuid(void * jarg1, int jarg2, void * jarg3, char * jarg4) { + void * jresult ; + switch_endpoint_interface_t *arg1 = (switch_endpoint_interface_t *) 0 ; + switch_call_direction_t arg2 ; + switch_memory_pool_t **arg3 = (switch_memory_pool_t **) 0 ; + char *arg4 = (char *) 0 ; + switch_core_session_t *result = 0 ; + + arg1 = (switch_endpoint_interface_t *)jarg1; + arg2 = (switch_call_direction_t)jarg2; + arg3 = (switch_memory_pool_t **)jarg3; + arg4 = (char *)jarg4; + result = (switch_core_session_t *)switch_core_session_request_uuid(arg1,arg2,arg3,(char const *)arg4); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_uuid(void * jarg1, char * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_core_session_set_uuid(arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_perform_destroy(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + switch_core_session_t **arg1 = (switch_core_session_t **) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + + arg1 = (switch_core_session_t **)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + switch_core_session_perform_destroy(arg1,(char const *)arg2,(char const *)arg3,arg4); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_destroy_state(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_destroy_state(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_reporting_state(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_reporting_state(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_hangup_state(void * jarg1, int jarg2) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_bool_t arg2 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_bool_t)jarg2; + switch_core_session_hangup_state(arg1,arg2); +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_session_count() { + unsigned long jresult ; + uint32_t result; + + result = (uint32_t)switch_core_session_count(); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_get_id(void * jarg1) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_size_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = switch_core_session_get_id(arg1); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_id() { + void * jresult ; + switch_size_t result; + + result = switch_core_session_id(); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_request_by_name(char * jarg1, int jarg2, void * jarg3) { + void * jresult ; + char *arg1 = (char *) 0 ; + switch_call_direction_t arg2 ; + switch_memory_pool_t **arg3 = (switch_memory_pool_t **) 0 ; + switch_core_session_t *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (switch_call_direction_t)jarg2; + arg3 = (switch_memory_pool_t **)jarg3; + result = (switch_core_session_t *)switch_core_session_request_by_name((char const *)arg1,arg2,arg3); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_thread_launch(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_core_session_thread_launch(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_get_channel(void * jarg1) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_channel_t *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_channel_t *)switch_core_session_get_channel(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_wake_session_thread(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_wake_session_thread(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_signal_state_change(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_signal_state_change(arg1); +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_session_get_uuid(void * jarg1) { + char * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + result = (char *)switch_core_session_get_uuid(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_loglevel(void * jarg1, int jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_log_level_t arg2 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_log_level_t)jarg2; + result = (switch_status_t)switch_core_session_set_loglevel(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_get_loglevel(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_log_level_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_log_level_t)switch_core_session_get_loglevel(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_soft_lock(void * jarg1, unsigned long jarg2) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (uint32_t)jarg2; + switch_core_session_soft_lock(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_soft_unlock(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_soft_unlock(arg1); +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_get_uuid() { + char * jresult ; + char *result = 0 ; + + result = (char *)switch_core_get_uuid(); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_locate(char * jarg1) { + void * jresult ; + char *arg1 = (char *) 0 ; + switch_core_session_t *result = 0 ; + + arg1 = (char *)jarg1; + result = (switch_core_session_t *)switch_core_session_locate((char const *)arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_force_locate(char * jarg1) { + void * jresult ; + char *arg1 = (char *) 0 ; + switch_core_session_t *result = 0 ; + + arg1 = (char *)jarg1; + result = (switch_core_session_t *)switch_core_session_force_locate((char const *)arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_get_variable(char * jarg1) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + result = (char *)switch_core_get_variable((char const *)arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_set_variable(char * jarg1, char * jarg2) { + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + switch_core_set_variable((char const *)arg1,(char const *)arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_set_var_conditional(char * jarg1, char * jarg2, char * jarg3) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_bool_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (switch_bool_t)switch_core_set_var_conditional((char const *)arg1,(char const *)arg2,(char const *)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_dump_variables(void * jarg1) { + switch_stream_handle_t *arg1 = (switch_stream_handle_t *) 0 ; + + arg1 = (switch_stream_handle_t *)jarg1; + switch_core_dump_variables(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_hupall(int jarg1) { + switch_call_cause_t arg1 ; + + arg1 = (switch_call_cause_t)jarg1; + switch_core_session_hupall(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_hupall_matching_var(char * jarg1, char * jarg2, int jarg3) { + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_call_cause_t arg3 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_call_cause_t)jarg3; + switch_core_session_hupall_matching_var((char const *)arg1,(char const *)arg2,arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_hupall_endpoint(void * jarg1, int jarg2) { + switch_endpoint_interface_t *arg1 = (switch_endpoint_interface_t *) 0 ; + switch_call_cause_t arg2 ; + + arg1 = (switch_endpoint_interface_t *)jarg1; + arg2 = (switch_call_cause_t)jarg2; + switch_core_session_hupall_endpoint((switch_endpoint_interface const *)arg1,arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_get_partner(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_core_session_t **arg2 = (switch_core_session_t **) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_core_session_t **)jarg2; + result = (switch_status_t)switch_core_session_get_partner(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_message_send(char * jarg1, void * jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_core_session_message_t *arg2 = (switch_core_session_message_t *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_core_session_message_t *)jarg2; + result = (switch_status_t)switch_core_session_message_send((char const *)arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_queue_message(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_core_session_message_t *arg2 = (switch_core_session_message_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_core_session_message_t *)jarg2; + result = (switch_status_t)switch_core_session_queue_message(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_free_message(void * jarg1) { + switch_core_session_message_t **arg1 = (switch_core_session_message_t **) 0 ; + + arg1 = (switch_core_session_message_t **)jarg1; + switch_core_session_free_message(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_pass_indication(void * jarg1, int jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_core_session_message_types_t arg2 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_core_session_message_types_t)jarg2; + result = (switch_status_t)switch_core_session_pass_indication(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_queue_indication(void * jarg1, int jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_core_session_message_types_t arg2 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_core_session_message_types_t)jarg2; + result = (switch_status_t)switch_core_session_queue_indication(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_dequeue_message(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_core_session_message_t **arg2 = (switch_core_session_message_t **) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_core_session_message_t **)jarg2; + result = (switch_status_t)switch_core_session_dequeue_message(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_flush_message(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_core_session_flush_message(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_event_send(char * jarg1, void * jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_event_t **arg2 = (switch_event_t **) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_event_t **)jarg2; + result = (switch_status_t)switch_core_session_event_send((char const *)arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_get_app_log(void * jarg1) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_app_log_t *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_app_log_t *)switch_core_session_get_app_log(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_exec(void * jarg1, void * jarg2, char * jarg3) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_application_interface_t *arg2 = (switch_application_interface_t *) 0 ; + char *arg3 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_application_interface_t *)jarg2; + arg3 = (char *)jarg3; + result = (switch_status_t)switch_core_session_exec(arg1,(switch_application_interface const *)arg2,(char const *)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_execute_application_get_flags(void * jarg1, char * jarg2, char * jarg3, void * jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int32_t *arg4 = (int32_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int32_t *)jarg4; + result = (switch_status_t)switch_core_session_execute_application_get_flags(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_get_app_flags(char * jarg1, void * jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + int32_t *arg2 = (int32_t *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (int32_t *)jarg2; + result = (switch_status_t)switch_core_session_get_app_flags((char const *)arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_execute_exten(void * jarg1, char * jarg2, char * jarg3, char * jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + result = (switch_status_t)switch_core_session_execute_exten(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_receive_event(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_event_t **arg2 = (switch_event_t **) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_event_t **)jarg2; + result = (switch_status_t)switch_core_session_receive_event(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_get_private(void * jarg1) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + void *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + result = (void *)switch_core_session_get_private(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_private(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + void *arg2 = (void *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (void *)jarg2; + result = (switch_status_t)switch_core_session_set_private(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_add_stream(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + void *arg2 = (void *) 0 ; + int result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (void *)jarg2; + result = (int)switch_core_session_add_stream(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_get_stream(void * jarg1, int jarg2) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + int arg2 ; + void *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (int)jarg2; + result = (void *)switch_core_session_get_stream(arg1,arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_get_stream_count(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + int result; + + arg1 = (switch_core_session_t *)jarg1; + result = (int)switch_core_session_get_stream_count(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_launch_thread(void * jarg1, void * jarg2, void * jarg3) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + void *(*arg2)(switch_thread_t *,void *) = (void *(*)(switch_thread_t *,void *)) 0 ; + void *arg3 = (void *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (void *(*)(switch_thread_t *,void *))jarg2; + arg3 = (void *)jarg3; + switch_core_session_launch_thread(arg1,arg2,arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_thread_session_end(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_thread_session_end(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_service_session(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_service_session(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_outgoing_channel(void * jarg1, void * jarg2, char * jarg3, void * jarg4, void * jarg5, void * jarg6, unsigned long jarg7, void * jarg8) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_event_t *arg2 = (switch_event_t *) 0 ; + char *arg3 = (char *) 0 ; + switch_caller_profile_t *arg4 = (switch_caller_profile_t *) 0 ; + switch_core_session_t **arg5 = (switch_core_session_t **) 0 ; + switch_memory_pool_t **arg6 = (switch_memory_pool_t **) 0 ; + switch_originate_flag_t arg7 ; + switch_call_cause_t *arg8 = (switch_call_cause_t *) 0 ; + switch_call_cause_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_event_t *)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_caller_profile_t *)jarg4; + arg5 = (switch_core_session_t **)jarg5; + arg6 = (switch_memory_pool_t **)jarg6; + arg7 = (switch_originate_flag_t)jarg7; + arg8 = (switch_call_cause_t *)jarg8; + result = (switch_call_cause_t)switch_core_session_outgoing_channel(arg1,arg2,(char const *)arg3,arg4,arg5,arg6,arg7,arg8); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_resurrect_channel(char * jarg1, void * jarg2, void * jarg3, void * jarg4) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_core_session_t **arg2 = (switch_core_session_t **) 0 ; + switch_memory_pool_t **arg3 = (switch_memory_pool_t **) 0 ; + void *arg4 = (void *) 0 ; + switch_call_cause_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_core_session_t **)jarg2; + arg3 = (switch_memory_pool_t **)jarg3; + arg4 = (void *)jarg4; + result = (switch_call_cause_t)switch_core_session_resurrect_channel((char const *)arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_perform_receive_message(void * jarg1, void * jarg2, char * jarg3, char * jarg4, int jarg5) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_core_session_message_t *arg2 = (switch_core_session_message_t *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + int arg5 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_core_session_message_t *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (int)jarg5; + result = (switch_status_t)switch_core_session_perform_receive_message(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_queue_event(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_event_t **arg2 = (switch_event_t **) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_event_t **)jarg2; + result = (switch_status_t)switch_core_session_queue_event(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_session_event_count(void * jarg1) { + unsigned long jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (uint32_t)switch_core_session_event_count(arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_dequeue_event(void * jarg1, void * jarg2, int jarg3) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_event_t **arg2 = (switch_event_t **) 0 ; + switch_bool_t arg3 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_event_t **)jarg2; + arg3 = (switch_bool_t)jarg3; + result = (switch_status_t)switch_core_session_dequeue_event(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_queue_private_event(void * jarg1, void * jarg2, int jarg3) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_event_t **arg2 = (switch_event_t **) 0 ; + switch_bool_t arg3 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_event_t **)jarg2; + arg3 = (switch_bool_t)jarg3; + result = (switch_status_t)switch_core_session_queue_private_event(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_session_private_event_count(void * jarg1) { + unsigned long jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (uint32_t)switch_core_session_private_event_count(arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_dequeue_private_event(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_event_t **arg2 = (switch_event_t **) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_event_t **)jarg2; + result = (switch_status_t)switch_core_session_dequeue_private_event(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_session_flush_private_events(void * jarg1) { + unsigned long jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (uint32_t)switch_core_session_flush_private_events(arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_read_frame(void * jarg1, void * jarg2, unsigned long jarg3, int jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_frame_t **arg2 = (switch_frame_t **) 0 ; + switch_io_flag_t arg3 ; + int arg4 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_frame_t **)jarg2; + arg3 = (switch_io_flag_t)jarg3; + arg4 = (int)jarg4; + result = (switch_status_t)switch_core_session_read_frame(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_read_video_frame(void * jarg1, void * jarg2, unsigned long jarg3, int jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_frame_t **arg2 = (switch_frame_t **) 0 ; + switch_io_flag_t arg3 ; + int arg4 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_frame_t **)jarg2; + arg3 = (switch_io_flag_t)jarg3; + arg4 = (int)jarg4; + result = (switch_status_t)switch_core_session_read_video_frame(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_write_video_frame(void * jarg1, void * jarg2, unsigned long jarg3, int jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_frame_t *arg2 = (switch_frame_t *) 0 ; + switch_io_flag_t arg3 ; + int arg4 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_frame_t *)jarg2; + arg3 = (switch_io_flag_t)jarg3; + arg4 = (int)jarg4; + result = (switch_status_t)switch_core_session_write_video_frame(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_read_impl(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_implementation_t *arg2 = (switch_codec_implementation_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_codec_implementation_t *)jarg2; + result = (switch_status_t)switch_core_session_set_read_impl(arg1,(switch_codec_implementation const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_write_impl(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_implementation_t *arg2 = (switch_codec_implementation_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_codec_implementation_t *)jarg2; + result = (switch_status_t)switch_core_session_set_write_impl(arg1,(switch_codec_implementation const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_video_read_impl(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_implementation_t *arg2 = (switch_codec_implementation_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_codec_implementation_t *)jarg2; + result = (switch_status_t)switch_core_session_set_video_read_impl(arg1,(switch_codec_implementation const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_video_write_impl(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_implementation_t *arg2 = (switch_codec_implementation_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_codec_implementation_t *)jarg2; + result = (switch_status_t)switch_core_session_set_video_write_impl(arg1,(switch_codec_implementation const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_reset(void * jarg1, int jarg2, int jarg3) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_bool_t arg2 ; + switch_bool_t arg3 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_bool_t)jarg2; + arg3 = (switch_bool_t)jarg3; + switch_core_session_reset(arg1,arg2,arg3); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_write_frame(void * jarg1, void * jarg2, unsigned long jarg3, int jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_frame_t *arg2 = (switch_frame_t *) 0 ; + switch_io_flag_t arg3 ; + int arg4 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_frame_t *)jarg2; + arg3 = (switch_io_flag_t)jarg3; + arg4 = (int)jarg4; + result = (switch_status_t)switch_core_session_write_frame(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_perform_kill_channel(void * jarg1, char * jarg2, char * jarg3, int jarg4, int jarg5) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + switch_signal_t arg5 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + arg5 = (switch_signal_t)jarg5; + result = (switch_status_t)switch_core_session_perform_kill_channel(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_send_dtmf(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_dtmf_t *arg2 = (switch_dtmf_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_dtmf_t *)jarg2; + result = (switch_status_t)switch_core_session_send_dtmf(arg1,(switch_dtmf_t const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_send_dtmf_string(void * jarg1, char * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_core_session_send_dtmf_string(arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_recv_dtmf(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_dtmf_t *arg2 = (switch_dtmf_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_dtmf_t *)jarg2; + result = (switch_status_t)switch_core_session_recv_dtmf(arg1,(switch_dtmf_t const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_hash_init_case(void * jarg1, void * jarg2, int jarg3) { + int jresult ; + switch_hash_t **arg1 = (switch_hash_t **) 0 ; + switch_memory_pool_t *arg2 = (switch_memory_pool_t *) 0 ; + switch_bool_t arg3 ; + switch_status_t result; + + arg1 = (switch_hash_t **)jarg1; + arg2 = (switch_memory_pool_t *)jarg2; + arg3 = (switch_bool_t)jarg3; + result = (switch_status_t)switch_core_hash_init_case(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_hash_destroy(void * jarg1) { + int jresult ; + switch_hash_t **arg1 = (switch_hash_t **) 0 ; + switch_status_t result; + + arg1 = (switch_hash_t **)jarg1; + result = (switch_status_t)switch_core_hash_destroy(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_hash_insert(void * jarg1, char * jarg2, void * jarg3) { + int jresult ; + switch_hash_t *arg1 = (switch_hash_t *) 0 ; + char *arg2 = (char *) 0 ; + void *arg3 = (void *) 0 ; + switch_status_t result; + + arg1 = (switch_hash_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (void *)jarg3; + result = (switch_status_t)switch_core_hash_insert(arg1,(char const *)arg2,(void const *)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_hash_insert_locked(void * jarg1, char * jarg2, void * jarg3, void * jarg4) { + int jresult ; + switch_hash_t *arg1 = (switch_hash_t *) 0 ; + char *arg2 = (char *) 0 ; + void *arg3 = (void *) 0 ; + switch_mutex_t *arg4 = (switch_mutex_t *) 0 ; + switch_status_t result; + + arg1 = (switch_hash_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (void *)jarg3; + arg4 = (switch_mutex_t *)jarg4; + result = (switch_status_t)switch_core_hash_insert_locked(arg1,(char const *)arg2,(void const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_hash_delete(void * jarg1, char * jarg2) { + int jresult ; + switch_hash_t *arg1 = (switch_hash_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_hash_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_core_hash_delete(arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_hash_delete_locked(void * jarg1, char * jarg2, void * jarg3) { + int jresult ; + switch_hash_t *arg1 = (switch_hash_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_mutex_t *arg3 = (switch_mutex_t *) 0 ; + switch_status_t result; + + arg1 = (switch_hash_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_mutex_t *)jarg3; + result = (switch_status_t)switch_core_hash_delete_locked(arg1,(char const *)arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_hash_delete_multi(void * jarg1, void * jarg2, void * jarg3) { + int jresult ; + switch_hash_t *arg1 = (switch_hash_t *) 0 ; + switch_hash_delete_callback_t arg2 = (switch_hash_delete_callback_t) 0 ; + void *arg3 = (void *) 0 ; + switch_status_t result; + + arg1 = (switch_hash_t *)jarg1; + arg2 = (switch_hash_delete_callback_t)jarg2; + arg3 = (void *)jarg3; + result = (switch_status_t)switch_core_hash_delete_multi(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_hash_find(void * jarg1, char * jarg2) { + void * jresult ; + switch_hash_t *arg1 = (switch_hash_t *) 0 ; + char *arg2 = (char *) 0 ; + void *result = 0 ; + + arg1 = (switch_hash_t *)jarg1; + arg2 = (char *)jarg2; + result = (void *)switch_core_hash_find(arg1,(char const *)arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_hash_find_locked(void * jarg1, char * jarg2, void * jarg3) { + void * jresult ; + switch_hash_t *arg1 = (switch_hash_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_mutex_t *arg3 = (switch_mutex_t *) 0 ; + void *result = 0 ; + + arg1 = (switch_hash_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_mutex_t *)jarg3; + result = (void *)switch_core_hash_find_locked(arg1,(char const *)arg2,arg3); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_hash_first(char * jarg1, void * jarg2) { + void * jresult ; + char *arg1 = (char *) 0 ; + switch_hash_t *arg2 = (switch_hash_t *) 0 ; + switch_hash_index_t *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (switch_hash_t *)jarg2; + result = (switch_hash_index_t *)switch_hash_first(arg1,arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_hash_next(void * jarg1) { + void * jresult ; + switch_hash_index_t *arg1 = (switch_hash_index_t *) 0 ; + switch_hash_index_t *result = 0 ; + + arg1 = (switch_hash_index_t *)jarg1; + result = (switch_hash_index_t *)switch_hash_next(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_hash_this(void * jarg1, void * jarg2, void * jarg3, void * jarg4) { + switch_hash_index_t *arg1 = (switch_hash_index_t *) 0 ; + void **arg2 = (void **) 0 ; + switch_ssize_t *arg3 = (switch_ssize_t *) 0 ; + void **arg4 = (void **) 0 ; + + arg1 = (switch_hash_index_t *)jarg1; + arg2 = (void **)jarg2; + arg3 = (switch_ssize_t *)jarg3; + arg4 = (void **)jarg4; + switch_hash_this(arg1,(void const **)arg2,arg3,arg4); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_timer_init(void * jarg1, char * jarg2, int jarg3, int jarg4, void * jarg5) { + int jresult ; + switch_timer_t *arg1 = (switch_timer_t *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + int arg4 ; + switch_memory_pool_t *arg5 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (switch_timer_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int)jarg3; + arg4 = (int)jarg4; + arg5 = (switch_memory_pool_t *)jarg5; + result = (switch_status_t)switch_core_timer_init(arg1,(char const *)arg2,arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_time_calibrate_clock() { + switch_time_calibrate_clock(); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_timer_next(void * jarg1) { + int jresult ; + switch_timer_t *arg1 = (switch_timer_t *) 0 ; + switch_status_t result; + + arg1 = (switch_timer_t *)jarg1; + result = (switch_status_t)switch_core_timer_next(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_timer_step(void * jarg1) { + int jresult ; + switch_timer_t *arg1 = (switch_timer_t *) 0 ; + switch_status_t result; + + arg1 = (switch_timer_t *)jarg1; + result = (switch_status_t)switch_core_timer_step(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_timer_sync(void * jarg1) { + int jresult ; + switch_timer_t *arg1 = (switch_timer_t *) 0 ; + switch_status_t result; + + arg1 = (switch_timer_t *)jarg1; + result = (switch_status_t)switch_core_timer_sync(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_timer_check(void * jarg1, int jarg2) { + int jresult ; + switch_timer_t *arg1 = (switch_timer_t *) 0 ; + switch_bool_t arg2 ; + switch_status_t result; + + arg1 = (switch_timer_t *)jarg1; + arg2 = (switch_bool_t)jarg2; + result = (switch_status_t)switch_core_timer_check(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_timer_destroy(void * jarg1) { + int jresult ; + switch_timer_t *arg1 = (switch_timer_t *) 0 ; + switch_status_t result; + + arg1 = (switch_timer_t *)jarg1; + result = (switch_status_t)switch_core_timer_destroy(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_codec_init(void * jarg1, char * jarg2, char * jarg3, unsigned long jarg4, int jarg5, int jarg6, unsigned long jarg7, void * jarg8, void * jarg9) { + int jresult ; + switch_codec_t *arg1 = (switch_codec_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + uint32_t arg4 ; + int arg5 ; + int arg6 ; + uint32_t arg7 ; + switch_codec_settings_t *arg8 = (switch_codec_settings_t *) 0 ; + switch_memory_pool_t *arg9 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (switch_codec_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (uint32_t)jarg4; + arg5 = (int)jarg5; + arg6 = (int)jarg6; + arg7 = (uint32_t)jarg7; + arg8 = (switch_codec_settings_t *)jarg8; + arg9 = (switch_memory_pool_t *)jarg9; + result = (switch_status_t)switch_core_codec_init(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5,arg6,arg7,(switch_codec_settings const *)arg8,arg9); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_codec_copy(void * jarg1, void * jarg2, void * jarg3) { + int jresult ; + switch_codec_t *arg1 = (switch_codec_t *) 0 ; + switch_codec_t *arg2 = (switch_codec_t *) 0 ; + switch_memory_pool_t *arg3 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (switch_codec_t *)jarg1; + arg2 = (switch_codec_t *)jarg2; + arg3 = (switch_memory_pool_t *)jarg3; + result = (switch_status_t)switch_core_codec_copy(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_codec_reset(void * jarg1) { + int jresult ; + switch_codec_t *arg1 = (switch_codec_t *) 0 ; + switch_status_t result; + + arg1 = (switch_codec_t *)jarg1; + result = (switch_status_t)switch_core_codec_reset(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_codec_encode(void * jarg1, void * jarg2, void * jarg3, unsigned long jarg4, unsigned long jarg5, void * jarg6, void * jarg7, void * jarg8, void * jarg9) { + int jresult ; + switch_codec_t *arg1 = (switch_codec_t *) 0 ; + switch_codec_t *arg2 = (switch_codec_t *) 0 ; + void *arg3 = (void *) 0 ; + uint32_t arg4 ; + uint32_t arg5 ; + void *arg6 = (void *) 0 ; + uint32_t *arg7 = (uint32_t *) 0 ; + uint32_t *arg8 = (uint32_t *) 0 ; + unsigned int *arg9 = (unsigned int *) 0 ; + switch_status_t result; + + arg1 = (switch_codec_t *)jarg1; + arg2 = (switch_codec_t *)jarg2; + arg3 = (void *)jarg3; + arg4 = (uint32_t)jarg4; + arg5 = (uint32_t)jarg5; + arg6 = (void *)jarg6; + arg7 = (uint32_t *)jarg7; + arg8 = (uint32_t *)jarg8; + arg9 = (unsigned int *)jarg9; + result = (switch_status_t)switch_core_codec_encode(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_codec_decode(void * jarg1, void * jarg2, void * jarg3, unsigned long jarg4, unsigned long jarg5, void * jarg6, void * jarg7, void * jarg8, void * jarg9) { + int jresult ; + switch_codec_t *arg1 = (switch_codec_t *) 0 ; + switch_codec_t *arg2 = (switch_codec_t *) 0 ; + void *arg3 = (void *) 0 ; + uint32_t arg4 ; + uint32_t arg5 ; + void *arg6 = (void *) 0 ; + uint32_t *arg7 = (uint32_t *) 0 ; + uint32_t *arg8 = (uint32_t *) 0 ; + unsigned int *arg9 = (unsigned int *) 0 ; + switch_status_t result; + + arg1 = (switch_codec_t *)jarg1; + arg2 = (switch_codec_t *)jarg2; + arg3 = (void *)jarg3; + arg4 = (uint32_t)jarg4; + arg5 = (uint32_t)jarg5; + arg6 = (void *)jarg6; + arg7 = (uint32_t *)jarg7; + arg8 = (uint32_t *)jarg8; + arg9 = (unsigned int *)jarg9; + result = (switch_status_t)switch_core_codec_decode(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_codec_destroy(void * jarg1) { + int jresult ; + switch_codec_t *arg1 = (switch_codec_t *) 0 ; + switch_status_t result; + + arg1 = (switch_codec_t *)jarg1; + result = (switch_status_t)switch_core_codec_destroy(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_read_codec(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_t *arg2 = (switch_codec_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_codec_t *)jarg2; + result = (switch_status_t)switch_core_session_set_read_codec(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_unset_read_codec(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_unset_read_codec(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_unset_write_codec(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_unset_write_codec(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_lock_codec_write(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_lock_codec_write(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_unlock_codec_write(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_unlock_codec_write(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_lock_codec_read(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_lock_codec_read(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_unlock_codec_read(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_core_session_unlock_codec_read(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_get_read_impl(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_implementation_t *arg2 = (switch_codec_implementation_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_codec_implementation_t *)jarg2; + result = (switch_status_t)switch_core_session_get_read_impl(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_get_write_impl(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_implementation_t *arg2 = (switch_codec_implementation_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_codec_implementation_t *)jarg2; + result = (switch_status_t)switch_core_session_get_write_impl(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_get_video_read_impl(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_implementation_t *arg2 = (switch_codec_implementation_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_codec_implementation_t *)jarg2; + result = (switch_status_t)switch_core_session_get_video_read_impl(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_get_video_write_impl(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_implementation_t *arg2 = (switch_codec_implementation_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_codec_implementation_t *)jarg2; + result = (switch_status_t)switch_core_session_get_video_write_impl(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_get_read_codec(void * jarg1) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_t *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_codec_t *)switch_core_session_get_read_codec(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_get_effective_read_codec(void * jarg1) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_t *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_codec_t *)switch_core_session_get_effective_read_codec(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_write_codec(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_t *arg2 = (switch_codec_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_codec_t *)jarg2; + result = (switch_status_t)switch_core_session_set_write_codec(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_get_write_codec(void * jarg1) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_t *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_codec_t *)switch_core_session_get_write_codec(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_get_effective_write_codec(void * jarg1) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_t *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_codec_t *)switch_core_session_get_effective_write_codec(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_video_read_codec(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_t *arg2 = (switch_codec_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_codec_t *)jarg2; + result = (switch_status_t)switch_core_session_set_video_read_codec(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_get_video_read_codec(void * jarg1) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_t *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_codec_t *)switch_core_session_get_video_read_codec(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_video_write_codec(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_t *arg2 = (switch_codec_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_codec_t *)jarg2; + result = (switch_status_t)switch_core_session_set_video_write_codec(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_session_get_video_write_codec(void * jarg1) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_codec_t *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_codec_t *)switch_core_session_get_video_write_codec(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_db_open_file(char * jarg1) { + void * jresult ; + char *arg1 = (char *) 0 ; + switch_core_db_t *result = 0 ; + + arg1 = (char *)jarg1; + result = (switch_core_db_t *)switch_core_db_open_file((char const *)arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_persistant_execute(void * jarg1, char * jarg2, unsigned long jarg3) { + int jresult ; + switch_core_db_t *arg1 = (switch_core_db_t *) 0 ; + char *arg2 = (char *) 0 ; + uint32_t arg3 ; + switch_status_t result; + + arg1 = (switch_core_db_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (uint32_t)jarg3; + result = (switch_status_t)switch_core_db_persistant_execute(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_db_persistant_execute_trans(void * jarg1, char * jarg2, unsigned long jarg3) { + int jresult ; + switch_core_db_t *arg1 = (switch_core_db_t *) 0 ; + char *arg2 = (char *) 0 ; + uint32_t arg3 ; + switch_status_t result; + + arg1 = (switch_core_db_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (uint32_t)jarg3; + result = (switch_status_t)switch_core_db_persistant_execute_trans(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_db_test_reactive(void * jarg1, char * jarg2, char * jarg3, char * jarg4) { + switch_core_db_t *arg1 = (switch_core_db_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + + arg1 = (switch_core_db_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + switch_core_db_test_reactive(arg1,arg2,arg3,arg4); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_perform_file_open(char * jarg1, char * jarg2, int jarg3, void * jarg4, char * jarg5, unsigned char jarg6, unsigned long jarg7, unsigned int jarg8, void * jarg9) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + switch_file_handle_t *arg4 = (switch_file_handle_t *) 0 ; + char *arg5 = (char *) 0 ; + uint8_t arg6 ; + uint32_t arg7 ; + unsigned int arg8 ; + switch_memory_pool_t *arg9 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int)jarg3; + arg4 = (switch_file_handle_t *)jarg4; + arg5 = (char *)jarg5; + arg6 = (uint8_t)jarg6; + arg7 = (uint32_t)jarg7; + arg8 = (unsigned int)jarg8; + arg9 = (switch_memory_pool_t *)jarg9; + result = (switch_status_t)switch_core_perform_file_open((char const *)arg1,(char const *)arg2,arg3,arg4,(char const *)arg5,arg6,arg7,arg8,arg9); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_file_read(void * jarg1, void * jarg2, void * jarg3) { + int jresult ; + switch_file_handle_t *arg1 = (switch_file_handle_t *) 0 ; + void *arg2 = (void *) 0 ; + switch_size_t *arg3 = (switch_size_t *) 0 ; + switch_status_t result; + + arg1 = (switch_file_handle_t *)jarg1; + arg2 = (void *)jarg2; + arg3 = (switch_size_t *)jarg3; + result = (switch_status_t)switch_core_file_read(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_file_write(void * jarg1, void * jarg2, void * jarg3) { + int jresult ; + switch_file_handle_t *arg1 = (switch_file_handle_t *) 0 ; + void *arg2 = (void *) 0 ; + switch_size_t *arg3 = (switch_size_t *) 0 ; + switch_status_t result; + + arg1 = (switch_file_handle_t *)jarg1; + arg2 = (void *)jarg2; + arg3 = (switch_size_t *)jarg3; + result = (switch_status_t)switch_core_file_write(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_file_seek(void * jarg1, void * jarg2, long long jarg3, int jarg4) { + int jresult ; + switch_file_handle_t *arg1 = (switch_file_handle_t *) 0 ; + unsigned int *arg2 = (unsigned int *) 0 ; + int64_t arg3 ; + int arg4 ; + switch_status_t result; + + arg1 = (switch_file_handle_t *)jarg1; + arg2 = (unsigned int *)jarg2; + arg3 = (int64_t)jarg3; + arg4 = (int)jarg4; + result = (switch_status_t)switch_core_file_seek(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_file_set_string(void * jarg1, int jarg2, char * jarg3) { + int jresult ; + switch_file_handle_t *arg1 = (switch_file_handle_t *) 0 ; + switch_audio_col_t arg2 ; + char *arg3 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_file_handle_t *)jarg1; + arg2 = (switch_audio_col_t)jarg2; + arg3 = (char *)jarg3; + result = (switch_status_t)switch_core_file_set_string(arg1,arg2,(char const *)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_file_get_string(void * jarg1, int jarg2, void * jarg3) { + int jresult ; + switch_file_handle_t *arg1 = (switch_file_handle_t *) 0 ; + switch_audio_col_t arg2 ; + char **arg3 = (char **) 0 ; + switch_status_t result; + + arg1 = (switch_file_handle_t *)jarg1; + arg2 = (switch_audio_col_t)jarg2; + arg3 = (char **)jarg3; + result = (switch_status_t)switch_core_file_get_string(arg1,arg2,(char const **)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_file_close(void * jarg1) { + int jresult ; + switch_file_handle_t *arg1 = (switch_file_handle_t *) 0 ; + switch_status_t result; + + arg1 = (switch_file_handle_t *)jarg1; + result = (switch_status_t)switch_core_file_close(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_file_truncate(void * jarg1, long long jarg2) { + int jresult ; + switch_file_handle_t *arg1 = (switch_file_handle_t *) 0 ; + int64_t arg2 ; + switch_status_t result; + + arg1 = (switch_file_handle_t *)jarg1; + arg2 = (int64_t)jarg2; + result = (switch_status_t)switch_core_file_truncate(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_speech_open(void * jarg1, char * jarg2, char * jarg3, unsigned int jarg4, unsigned int jarg5, void * jarg6, void * jarg7) { + int jresult ; + switch_speech_handle_t *arg1 = (switch_speech_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + unsigned int arg4 ; + unsigned int arg5 ; + switch_speech_flag_t *arg6 = (switch_speech_flag_t *) 0 ; + switch_memory_pool_t *arg7 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (switch_speech_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (unsigned int)jarg4; + arg5 = (unsigned int)jarg5; + arg6 = (switch_speech_flag_t *)jarg6; + arg7 = (switch_memory_pool_t *)jarg7; + result = (switch_status_t)switch_core_speech_open(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5,arg6,arg7); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_speech_feed_tts(void * jarg1, char * jarg2, void * jarg3) { + int jresult ; + switch_speech_handle_t *arg1 = (switch_speech_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_speech_flag_t *arg3 = (switch_speech_flag_t *) 0 ; + switch_status_t result; + + arg1 = (switch_speech_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_speech_flag_t *)jarg3; + result = (switch_status_t)switch_core_speech_feed_tts(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_speech_flush_tts(void * jarg1) { + switch_speech_handle_t *arg1 = (switch_speech_handle_t *) 0 ; + + arg1 = (switch_speech_handle_t *)jarg1; + switch_core_speech_flush_tts(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_speech_text_param_tts(void * jarg1, char * jarg2, char * jarg3) { + switch_speech_handle_t *arg1 = (switch_speech_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + + arg1 = (switch_speech_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + switch_core_speech_text_param_tts(arg1,arg2,(char const *)arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_speech_numeric_param_tts(void * jarg1, char * jarg2, int jarg3) { + switch_speech_handle_t *arg1 = (switch_speech_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + + arg1 = (switch_speech_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int)jarg3; + switch_core_speech_numeric_param_tts(arg1,arg2,arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_speech_float_param_tts(void * jarg1, char * jarg2, double jarg3) { + switch_speech_handle_t *arg1 = (switch_speech_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + double arg3 ; + + arg1 = (switch_speech_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (double)jarg3; + switch_core_speech_float_param_tts(arg1,arg2,arg3); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_speech_read_tts(void * jarg1, void * jarg2, void * jarg3, void * jarg4) { + int jresult ; + switch_speech_handle_t *arg1 = (switch_speech_handle_t *) 0 ; + void *arg2 = (void *) 0 ; + switch_size_t *arg3 = (switch_size_t *) 0 ; + switch_speech_flag_t *arg4 = (switch_speech_flag_t *) 0 ; + switch_status_t result; + + arg1 = (switch_speech_handle_t *)jarg1; + arg2 = (void *)jarg2; + arg3 = (switch_size_t *)jarg3; + arg4 = (switch_speech_flag_t *)jarg4; + result = (switch_status_t)switch_core_speech_read_tts(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_speech_close(void * jarg1, void * jarg2) { + int jresult ; + switch_speech_handle_t *arg1 = (switch_speech_handle_t *) 0 ; + switch_speech_flag_t *arg2 = (switch_speech_flag_t *) 0 ; + switch_status_t result; + + arg1 = (switch_speech_handle_t *)jarg1; + arg2 = (switch_speech_flag_t *)jarg2; + result = (switch_status_t)switch_core_speech_close(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_open(void * jarg1, char * jarg2, char * jarg3, int jarg4, char * jarg5, void * jarg6, void * jarg7) { + int jresult ; + switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + char *arg5 = (char *) 0 ; + switch_asr_flag_t *arg6 = (switch_asr_flag_t *) 0 ; + switch_memory_pool_t *arg7 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (switch_asr_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + arg5 = (char *)jarg5; + arg6 = (switch_asr_flag_t *)jarg6; + arg7 = (switch_memory_pool_t *)jarg7; + result = (switch_status_t)switch_core_asr_open(arg1,(char const *)arg2,(char const *)arg3,arg4,(char const *)arg5,arg6,arg7); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_close(void * jarg1, void * jarg2) { + int jresult ; + switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ; + switch_asr_flag_t *arg2 = (switch_asr_flag_t *) 0 ; + switch_status_t result; + + arg1 = (switch_asr_handle_t *)jarg1; + arg2 = (switch_asr_flag_t *)jarg2; + result = (switch_status_t)switch_core_asr_close(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_feed(void * jarg1, void * jarg2, unsigned int jarg3, void * jarg4) { + int jresult ; + switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ; + void *arg2 = (void *) 0 ; + unsigned int arg3 ; + switch_asr_flag_t *arg4 = (switch_asr_flag_t *) 0 ; + switch_status_t result; + + arg1 = (switch_asr_handle_t *)jarg1; + arg2 = (void *)jarg2; + arg3 = (unsigned int)jarg3; + arg4 = (switch_asr_flag_t *)jarg4; + result = (switch_status_t)switch_core_asr_feed(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_check_results(void * jarg1, void * jarg2) { + int jresult ; + switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ; + switch_asr_flag_t *arg2 = (switch_asr_flag_t *) 0 ; + switch_status_t result; + + arg1 = (switch_asr_handle_t *)jarg1; + arg2 = (switch_asr_flag_t *)jarg2; + result = (switch_status_t)switch_core_asr_check_results(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_get_results(void * jarg1, void * jarg2, void * jarg3) { + int jresult ; + switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ; + char **arg2 = (char **) 0 ; + switch_asr_flag_t *arg3 = (switch_asr_flag_t *) 0 ; + switch_status_t result; + + arg1 = (switch_asr_handle_t *)jarg1; + arg2 = (char **)jarg2; + arg3 = (switch_asr_flag_t *)jarg3; + result = (switch_status_t)switch_core_asr_get_results(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_load_grammar(void * jarg1, char * jarg2, char * jarg3) { + int jresult ; + switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_asr_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (switch_status_t)switch_core_asr_load_grammar(arg1,(char const *)arg2,(char const *)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_unload_grammar(void * jarg1, char * jarg2) { + int jresult ; + switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_asr_handle_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_core_asr_unload_grammar(arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_pause(void * jarg1) { + int jresult ; + switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ; + switch_status_t result; + + arg1 = (switch_asr_handle_t *)jarg1; + result = (switch_status_t)switch_core_asr_pause(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_resume(void * jarg1) { + int jresult ; + switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ; + switch_status_t result; + + arg1 = (switch_asr_handle_t *)jarg1; + result = (switch_status_t)switch_core_asr_resume(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_asr_start_input_timers(void * jarg1) { + int jresult ; + switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ; + switch_status_t result; + + arg1 = (switch_asr_handle_t *)jarg1; + result = (switch_status_t)switch_core_asr_start_input_timers(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_asr_text_param(void * jarg1, char * jarg2, char * jarg3) { + switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + + arg1 = (switch_asr_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + switch_core_asr_text_param(arg1,arg2,(char const *)arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_asr_numeric_param(void * jarg1, char * jarg2, int jarg3) { + switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + + arg1 = (switch_asr_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int)jarg3; + switch_core_asr_numeric_param(arg1,arg2,arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_asr_float_param(void * jarg1, char * jarg2, double jarg3) { + switch_asr_handle_t *arg1 = (switch_asr_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + double arg3 ; + + arg1 = (switch_asr_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (double)jarg3; + switch_core_asr_float_param(arg1,arg2,arg3); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_directory_open(void * jarg1, char * jarg2, char * jarg3, char * jarg4, char * jarg5, void * jarg6) { + int jresult ; + switch_directory_handle_t *arg1 = (switch_directory_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + switch_memory_pool_t *arg6 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (switch_directory_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + arg6 = (switch_memory_pool_t *)jarg6; + result = (switch_status_t)switch_core_directory_open(arg1,arg2,arg3,arg4,arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_directory_query(void * jarg1, char * jarg2, char * jarg3) { + int jresult ; + switch_directory_handle_t *arg1 = (switch_directory_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_directory_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (switch_status_t)switch_core_directory_query(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_directory_next(void * jarg1) { + int jresult ; + switch_directory_handle_t *arg1 = (switch_directory_handle_t *) 0 ; + switch_status_t result; + + arg1 = (switch_directory_handle_t *)jarg1; + result = (switch_status_t)switch_core_directory_next(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_directory_next_pair(void * jarg1, void * jarg2, void * jarg3) { + int jresult ; + switch_directory_handle_t *arg1 = (switch_directory_handle_t *) 0 ; + char **arg2 = (char **) 0 ; + char **arg3 = (char **) 0 ; + switch_status_t result; + + arg1 = (switch_directory_handle_t *)jarg1; + arg2 = (char **)jarg2; + arg3 = (char **)jarg3; + result = (switch_status_t)switch_core_directory_next_pair(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_directory_close(void * jarg1) { + int jresult ; + switch_directory_handle_t *arg1 = (switch_directory_handle_t *) 0 ; + switch_status_t result; + + arg1 = (switch_directory_handle_t *)jarg1; + result = (switch_status_t)switch_core_directory_close(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_data_channel(int jarg1) { + void * jresult ; + switch_text_channel_t arg1 ; + FILE *result = 0 ; + + arg1 = (switch_text_channel_t)jarg1; + result = (FILE *)switch_core_data_channel(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_ready() { + int jresult ; + switch_bool_t result; + + result = (switch_bool_t)switch_core_ready(); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_flags() { + unsigned long jresult ; + switch_core_flag_t result; + + result = (switch_core_flag_t)switch_core_flags(); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_management_exec(char * jarg1, int jarg2, char * jarg3, void * jarg4) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_management_action_t arg2 ; + char *arg3 = (char *) 0 ; + switch_size_t arg4 ; + switch_size_t *argp4 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_management_action_t)jarg2; + arg3 = (char *)jarg3; + argp4 = (switch_size_t *)jarg4; + if (!argp4) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg4 = *argp4; + result = (switch_status_t)switch_core_management_exec(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_set_high_priority() { + int jresult ; + int32_t result; + + result = (int32_t)set_high_priority(); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_change_user_group(char * jarg1, char * jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + int32_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + result = (int32_t)change_user_group((char const *)arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_runtime_loop(int jarg1) { + int arg1 ; + + arg1 = (int)jarg1; + switch_core_runtime_loop(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_set_console(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + result = (switch_status_t)switch_core_set_console((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_measure_time(void * jarg1, void * jarg2) { + switch_time_t arg1 ; + switch_core_time_duration_t *arg2 = (switch_core_time_duration_t *) 0 ; + switch_time_t *argp1 ; + + argp1 = (switch_time_t *)jarg1; + if (!argp1) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_time_t", 0); + return ; + } + arg1 = *argp1; + arg2 = (switch_core_time_duration_t *)jarg2; + switch_core_measure_time(arg1,arg2); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_uptime() { + void * jresult ; + switch_time_t result; + + result = switch_core_uptime(); + jresult = new switch_time_t((const switch_time_t &)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_ctl(int jarg1, void * jarg2) { + int jresult ; + switch_session_ctl_t arg1 ; + void *arg2 = (void *) 0 ; + int32_t result; + + arg1 = (switch_session_ctl_t)jarg1; + arg2 = (void *)jarg2; + result = (int32_t)switch_core_session_ctl(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_get_console() { + void * jresult ; + FILE *result = 0 ; + + result = (FILE *)switch_core_get_console(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_set_globals() { + switch_core_set_globals(); +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_core_session_compare(void * jarg1, void * jarg2) { + unsigned char jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_core_session_t *arg2 = (switch_core_session_t *) 0 ; + uint8_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_core_session_t *)jarg2; + result = (uint8_t)switch_core_session_compare(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_core_session_check_interface(void * jarg1, void * jarg2) { + unsigned char jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_endpoint_interface_t *arg2 = (switch_endpoint_interface_t *) 0 ; + uint8_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_endpoint_interface_t *)jarg2; + result = (uint8_t)switch_core_session_check_interface(arg1,(switch_endpoint_interface const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_core_mime_index() { + void * jresult ; + switch_hash_index_t *result = 0 ; + + result = (switch_hash_index_t *)switch_core_mime_index(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_mime_ext2type(char * jarg1) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + result = (char *)switch_core_mime_ext2type((char const *)arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_mime_add_type(char * jarg1, char * jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_core_mime_add_type((char const *)arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_loadable_module_create_module_interface(void * jarg1, char * jarg2) { + void * jresult ; + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_memory_pool_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_loadable_module_interface_t *)switch_loadable_module_create_module_interface(arg1,(char const *)arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_loadable_module_create_interface(void * jarg1, int jarg2) { + void * jresult ; + switch_loadable_module_interface_t *arg1 = (switch_loadable_module_interface_t *) 0 ; + switch_module_interface_name_t arg2 ; + void *result = 0 ; + + arg1 = (switch_loadable_module_interface_t *)jarg1; + arg2 = (switch_module_interface_name_t)jarg2; + result = (void *)switch_loadable_module_create_interface(arg1,arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_micro_time_now() { + void * jresult ; + switch_time_t result; + + result = switch_micro_time_now(); + jresult = new switch_time_t((const switch_time_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_memory_reclaim() { + switch_core_memory_reclaim(); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_memory_reclaim_events() { + switch_core_memory_reclaim_events(); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_memory_reclaim_logger() { + switch_core_memory_reclaim_logger(); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_memory_reclaim_all() { + switch_core_memory_reclaim_all(); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_setrlimits() { + switch_core_setrlimits(); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_time_ref() { + void * jresult ; + switch_time_t result; + + result = switch_time_ref(); + jresult = new switch_time_t((const switch_time_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_time_sync() { + switch_time_sync(); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_epoch_time_now(void * jarg1) { + void * jresult ; + time_t *arg1 = (time_t *) 0 ; + time_t result; + + arg1 = (time_t *)jarg1; + result = switch_epoch_time_now(arg1); + jresult = new time_t((const time_t &)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_strftime_tz(char * jarg1, char * jarg2, char * jarg3, unsigned long jarg4, void * jarg5) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + size_t arg4 ; + switch_time_t arg5 ; + switch_time_t *argp5 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (size_t)jarg4; + argp5 = (switch_time_t *)jarg5; + if (!argp5) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_time_t", 0); + return 0; + } + arg5 = *argp5; + result = (switch_status_t)switch_strftime_tz((char const *)arg1,(char const *)arg2,arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_time_exp_tz_name(char * jarg1, void * jarg2, void * jarg3) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_time_exp_t *arg2 = (switch_time_exp_t *) 0 ; + switch_time_t arg3 ; + switch_time_t *argp3 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_time_exp_t *)jarg2; + argp3 = (switch_time_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_time_t", 0); + return 0; + } + arg3 = *argp3; + result = (switch_status_t)switch_time_exp_tz_name((char const *)arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_load_network_lists(int jarg1) { + switch_bool_t arg1 ; + + arg1 = (switch_bool_t)jarg1; + switch_load_network_lists(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_check_network_list_ip_token(char * jarg1, char * jarg2, void * jarg3) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char **arg3 = (char **) 0 ; + switch_bool_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char **)jarg3; + result = (switch_bool_t)switch_check_network_list_ip_token((char const *)arg1,(char const *)arg2,(char const **)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_time_set_monotonic(int jarg1) { + switch_bool_t arg1 ; + + arg1 = (switch_bool_t)jarg1; + switch_time_set_monotonic(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_time_set_nanosleep(int jarg1) { + switch_bool_t arg1 ; + + arg1 = (switch_bool_t)jarg1; + switch_time_set_nanosleep(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_time_set_matrix(int jarg1) { + switch_bool_t arg1 ; + + arg1 = (switch_bool_t)jarg1; + switch_time_set_matrix(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_time_set_cond_yield(int jarg1) { + switch_bool_t arg1 ; + + arg1 = (switch_bool_t)jarg1; + switch_time_set_cond_yield(arg1); +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_min_dtmf_duration(unsigned long jarg1) { + unsigned long jresult ; + uint32_t arg1 ; + uint32_t result; + + arg1 = (uint32_t)jarg1; + result = (uint32_t)switch_core_min_dtmf_duration(arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_max_dtmf_duration(unsigned long jarg1) { + unsigned long jresult ; + uint32_t arg1 ; + uint32_t result; + + arg1 = (uint32_t)jarg1; + result = (uint32_t)switch_core_max_dtmf_duration(arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT double SWIGSTDCALL CSharp_switch_core_min_idle_cpu(double jarg1) { + double jresult ; + double arg1 ; + double result; + + arg1 = (double)jarg1; + result = (double)switch_core_min_idle_cpu(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT double SWIGSTDCALL CSharp_switch_core_idle_cpu() { + double jresult ; + double result; + + result = (double)switch_core_idle_cpu(); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_default_dtmf_duration(unsigned long jarg1) { + unsigned long jresult ; + uint32_t arg1 ; + uint32_t result; + + arg1 = (uint32_t)jarg1; + result = (uint32_t)switch_core_default_dtmf_duration(arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_console_set_complete(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + result = (switch_status_t)switch_console_set_complete((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_console_set_alias(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + result = (switch_status_t)switch_console_set_alias((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_system(char * jarg1, int jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_bool_t arg2 ; + int result; + + arg1 = (char *)jarg1; + arg2 = (switch_bool_t)jarg2; + result = (int)switch_system((char const *)arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cond_yield(void * jarg1) { + switch_interval_time_t arg1 ; + switch_interval_time_t *argp1 ; + + argp1 = (switch_interval_time_t *)jarg1; + if (!argp1) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_interval_time_t", 0); + return ; + } + arg1 = *argp1; + switch_cond_yield(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cond_next() { + switch_cond_next(); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_chat_send(char * jarg1, char * jarg2, char * jarg3, char * jarg4, char * jarg5, char * jarg6, char * jarg7, char * jarg8) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + char *arg6 = (char *) 0 ; + char *arg7 = (char *) 0 ; + char *arg8 = (char *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + arg6 = (char *)jarg6; + arg7 = (char *)jarg7; + arg8 = (char *)jarg8; + result = (switch_status_t)switch_core_chat_send((char const *)arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_preprocess_session(void * jarg1, char * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_ivr_preprocess_session(arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CACHE_DB_LEN_get() { + int jresult ; + int result; + + result = (int)(256); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_native_handle_t_core_db_dbh_set(void * jarg1, void * jarg2) { + switch_cache_db_native_handle_t *arg1 = (switch_cache_db_native_handle_t *) 0 ; + switch_core_db_t *arg2 = (switch_core_db_t *) 0 ; + + arg1 = (switch_cache_db_native_handle_t *)jarg1; + arg2 = (switch_core_db_t *)jarg2; + if (arg1) (arg1)->core_db_dbh = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_cache_db_native_handle_t_core_db_dbh_get(void * jarg1) { + void * jresult ; + switch_cache_db_native_handle_t *arg1 = (switch_cache_db_native_handle_t *) 0 ; + switch_core_db_t *result = 0 ; + + arg1 = (switch_cache_db_native_handle_t *)jarg1; + result = (switch_core_db_t *) ((arg1)->core_db_dbh); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_native_handle_t_odbc_dbh_set(void * jarg1, void * jarg2) { + switch_cache_db_native_handle_t *arg1 = (switch_cache_db_native_handle_t *) 0 ; + switch_odbc_handle_t *arg2 = (switch_odbc_handle_t *) 0 ; + + arg1 = (switch_cache_db_native_handle_t *)jarg1; + arg2 = (switch_odbc_handle_t *)jarg2; + if (arg1) (arg1)->odbc_dbh = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_cache_db_native_handle_t_odbc_dbh_get(void * jarg1) { + void * jresult ; + switch_cache_db_native_handle_t *arg1 = (switch_cache_db_native_handle_t *) 0 ; + switch_odbc_handle_t *result = 0 ; + + arg1 = (switch_cache_db_native_handle_t *)jarg1; + result = (switch_odbc_handle_t *) ((arg1)->odbc_dbh); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_cache_db_native_handle_t() { + void * jresult ; + switch_cache_db_native_handle_t *result = 0 ; + + result = (switch_cache_db_native_handle_t *)new switch_cache_db_native_handle_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_cache_db_native_handle_t(void * jarg1) { + switch_cache_db_native_handle_t *arg1 = (switch_cache_db_native_handle_t *) 0 ; + + arg1 = (switch_cache_db_native_handle_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_core_db_options_t_db_path_set(void * jarg1, char * jarg2) { + switch_cache_db_core_db_options_t *arg1 = (switch_cache_db_core_db_options_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_cache_db_core_db_options_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->db_path) delete [] arg1->db_path; + if (arg2) { + arg1->db_path = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->db_path, (const char *)arg2); + } else { + arg1->db_path = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_cache_db_core_db_options_t_db_path_get(void * jarg1) { + char * jresult ; + switch_cache_db_core_db_options_t *arg1 = (switch_cache_db_core_db_options_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_cache_db_core_db_options_t *)jarg1; + result = (char *) ((arg1)->db_path); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_cache_db_core_db_options_t() { + void * jresult ; + switch_cache_db_core_db_options_t *result = 0 ; + + result = (switch_cache_db_core_db_options_t *)new switch_cache_db_core_db_options_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_cache_db_core_db_options_t(void * jarg1) { + switch_cache_db_core_db_options_t *arg1 = (switch_cache_db_core_db_options_t *) 0 ; + + arg1 = (switch_cache_db_core_db_options_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_odbc_options_t_dsn_set(void * jarg1, char * jarg2) { + switch_cache_db_odbc_options_t *arg1 = (switch_cache_db_odbc_options_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_cache_db_odbc_options_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->dsn) delete [] arg1->dsn; + if (arg2) { + arg1->dsn = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->dsn, (const char *)arg2); + } else { + arg1->dsn = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_cache_db_odbc_options_t_dsn_get(void * jarg1) { + char * jresult ; + switch_cache_db_odbc_options_t *arg1 = (switch_cache_db_odbc_options_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_cache_db_odbc_options_t *)jarg1; + result = (char *) ((arg1)->dsn); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_odbc_options_t_user_set(void * jarg1, char * jarg2) { + switch_cache_db_odbc_options_t *arg1 = (switch_cache_db_odbc_options_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_cache_db_odbc_options_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->user) delete [] arg1->user; + if (arg2) { + arg1->user = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->user, (const char *)arg2); + } else { + arg1->user = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_cache_db_odbc_options_t_user_get(void * jarg1) { + char * jresult ; + switch_cache_db_odbc_options_t *arg1 = (switch_cache_db_odbc_options_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_cache_db_odbc_options_t *)jarg1; + result = (char *) ((arg1)->user); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_odbc_options_t_pass_set(void * jarg1, char * jarg2) { + switch_cache_db_odbc_options_t *arg1 = (switch_cache_db_odbc_options_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_cache_db_odbc_options_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->pass) delete [] arg1->pass; + if (arg2) { + arg1->pass = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->pass, (const char *)arg2); + } else { + arg1->pass = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_cache_db_odbc_options_t_pass_get(void * jarg1) { + char * jresult ; + switch_cache_db_odbc_options_t *arg1 = (switch_cache_db_odbc_options_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_cache_db_odbc_options_t *)jarg1; + result = (char *) ((arg1)->pass); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_cache_db_odbc_options_t() { + void * jresult ; + switch_cache_db_odbc_options_t *result = 0 ; + + result = (switch_cache_db_odbc_options_t *)new switch_cache_db_odbc_options_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_cache_db_odbc_options_t(void * jarg1) { + switch_cache_db_odbc_options_t *arg1 = (switch_cache_db_odbc_options_t *) 0 ; + + arg1 = (switch_cache_db_odbc_options_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_connection_options_t_core_db_options_set(void * jarg1, void * jarg2) { + switch_cache_db_connection_options_t *arg1 = (switch_cache_db_connection_options_t *) 0 ; + switch_cache_db_core_db_options_t *arg2 = (switch_cache_db_core_db_options_t *) 0 ; + + arg1 = (switch_cache_db_connection_options_t *)jarg1; + arg2 = (switch_cache_db_core_db_options_t *)jarg2; + if (arg1) (arg1)->core_db_options = *arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_cache_db_connection_options_t_core_db_options_get(void * jarg1) { + void * jresult ; + switch_cache_db_connection_options_t *arg1 = (switch_cache_db_connection_options_t *) 0 ; + switch_cache_db_core_db_options_t *result = 0 ; + + arg1 = (switch_cache_db_connection_options_t *)jarg1; + result = (switch_cache_db_core_db_options_t *)& ((arg1)->core_db_options); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_connection_options_t_odbc_options_set(void * jarg1, void * jarg2) { + switch_cache_db_connection_options_t *arg1 = (switch_cache_db_connection_options_t *) 0 ; + switch_cache_db_odbc_options_t *arg2 = (switch_cache_db_odbc_options_t *) 0 ; + + arg1 = (switch_cache_db_connection_options_t *)jarg1; + arg2 = (switch_cache_db_odbc_options_t *)jarg2; + if (arg1) (arg1)->odbc_options = *arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_cache_db_connection_options_t_odbc_options_get(void * jarg1) { + void * jresult ; + switch_cache_db_connection_options_t *arg1 = (switch_cache_db_connection_options_t *) 0 ; + switch_cache_db_odbc_options_t *result = 0 ; + + arg1 = (switch_cache_db_connection_options_t *)jarg1; + result = (switch_cache_db_odbc_options_t *)& ((arg1)->odbc_options); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_cache_db_connection_options_t() { + void * jresult ; + switch_cache_db_connection_options_t *result = 0 ; + + result = (switch_cache_db_connection_options_t *)new switch_cache_db_connection_options_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_cache_db_connection_options_t(void * jarg1) { + switch_cache_db_connection_options_t *arg1 = (switch_cache_db_connection_options_t *) 0 ; + + arg1 = (switch_cache_db_connection_options_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_handle_t_name_set(void * jarg1, char * jarg2) { + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + char *arg2 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (char *)jarg2; + { + if(arg2) { + strncpy((char*)arg1->name, (const char *)arg2, 256-1); + arg1->name[256-1] = 0; + } else { + arg1->name[0] = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_cache_db_handle_t_name_get(void * jarg1) { + char * jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + result = (char *)(char *) ((arg1)->name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_handle_t_type_set(void * jarg1, int jarg2) { + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + switch_cache_db_handle_type_t arg2 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (switch_cache_db_handle_type_t)jarg2; + if (arg1) (arg1)->type = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_cache_db_handle_t_type_get(void * jarg1) { + int jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + switch_cache_db_handle_type_t result; + + arg1 = (switch_cache_db_handle_t *)jarg1; + result = (switch_cache_db_handle_type_t) ((arg1)->type); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_handle_t_native_handle_set(void * jarg1, void * jarg2) { + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + switch_cache_db_native_handle_t *arg2 = (switch_cache_db_native_handle_t *) 0 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (switch_cache_db_native_handle_t *)jarg2; + if (arg1) (arg1)->native_handle = *arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_cache_db_handle_t_native_handle_get(void * jarg1) { + void * jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + switch_cache_db_native_handle_t *result = 0 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + result = (switch_cache_db_native_handle_t *)& ((arg1)->native_handle); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_handle_t_last_used_set(void * jarg1, void * jarg2) { + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + time_t arg2 ; + time_t *argp2 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + argp2 = (time_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null time_t", 0); + return ; + } + arg2 = *argp2; + if (arg1) (arg1)->last_used = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_cache_db_handle_t_last_used_get(void * jarg1) { + void * jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + time_t result; + + arg1 = (switch_cache_db_handle_t *)jarg1; + result = ((arg1)->last_used); + jresult = new time_t((const time_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_handle_t_mutex_set(void * jarg1, void * jarg2) { + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->mutex = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_cache_db_handle_t_mutex_get(void * jarg1) { + void * jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + result = (switch_mutex_t *) ((arg1)->mutex); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_handle_t_io_mutex_set(void * jarg1, void * jarg2) { + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->io_mutex = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_cache_db_handle_t_io_mutex_get(void * jarg1) { + void * jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + result = (switch_mutex_t *) ((arg1)->io_mutex); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_handle_t_pool_set(void * jarg1, void * jarg2) { + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + switch_memory_pool_t *arg2 = (switch_memory_pool_t *) 0 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (switch_memory_pool_t *)jarg2; + if (arg1) (arg1)->pool = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_cache_db_handle_t_pool_get(void * jarg1) { + void * jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + switch_memory_pool_t *result = 0 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + result = (switch_memory_pool_t *) ((arg1)->pool); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_handle_t_flags_set(void * jarg1, int jarg2) { + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + int32_t arg2 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (int32_t)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_cache_db_handle_t_flags_get(void * jarg1) { + int jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + int32_t result; + + arg1 = (switch_cache_db_handle_t *)jarg1; + result = (int32_t) ((arg1)->flags); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_handle_t_hash_set(void * jarg1, unsigned long jarg2) { + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + unsigned long arg2 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (unsigned long)jarg2; + if (arg1) (arg1)->hash = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_cache_db_handle_t_hash_get(void * jarg1) { + unsigned long jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + unsigned long result; + + arg1 = (switch_cache_db_handle_t *)jarg1; + result = (unsigned long) ((arg1)->hash); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_handle_t_creator_set(void * jarg1, char * jarg2) { + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + char *arg2 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (char *)jarg2; + { + if(arg2) { + strncpy((char*)arg1->creator, (const char *)arg2, 256-1); + arg1->creator[256-1] = 0; + } else { + arg1->creator[0] = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_cache_db_handle_t_creator_get(void * jarg1) { + char * jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + result = (char *)(char *) ((arg1)->creator); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_handle_t_last_user_set(void * jarg1, char * jarg2) { + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + char *arg2 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (char *)jarg2; + { + if(arg2) { + strncpy((char*)arg1->last_user, (const char *)arg2, 256-1); + arg1->last_user[256-1] = 0; + } else { + arg1->last_user[0] = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_cache_db_handle_t_last_user_get(void * jarg1) { + char * jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + result = (char *)(char *) ((arg1)->last_user); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_cache_db_handle_t() { + void * jresult ; + switch_cache_db_handle_t *result = 0 ; + + result = (switch_cache_db_handle_t *)new switch_cache_db_handle_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_cache_db_handle_t(void * jarg1) { + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_cache_db_type_name(int jarg1) { + char * jresult ; + switch_cache_db_handle_type_t arg1 ; + char *result = 0 ; + + arg1 = (switch_cache_db_handle_type_t)jarg1; + result = (char *)switch_cache_db_type_name(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_dismiss_db_handle(void * jarg1) { + switch_cache_db_handle_t **arg1 = (switch_cache_db_handle_t **) 0 ; + + arg1 = (switch_cache_db_handle_t **)jarg1; + switch_cache_db_dismiss_db_handle(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_release_db_handle(void * jarg1) { + switch_cache_db_handle_t **arg1 = (switch_cache_db_handle_t **) 0 ; + + arg1 = (switch_cache_db_handle_t **)jarg1; + switch_cache_db_release_db_handle(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_destroy_db_handle(void * jarg1) { + switch_cache_db_handle_t **arg1 = (switch_cache_db_handle_t **) 0 ; + + arg1 = (switch_cache_db_handle_t **)jarg1; + switch_cache_db_destroy_db_handle(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp__switch_cache_db_get_db_handle(void * jarg1, int jarg2, void * jarg3, char * jarg4, char * jarg5, int jarg6) { + int jresult ; + switch_cache_db_handle_t **arg1 = (switch_cache_db_handle_t **) 0 ; + switch_cache_db_handle_type_t arg2 ; + switch_cache_db_connection_options_t *arg3 = (switch_cache_db_connection_options_t *) 0 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + int arg6 ; + switch_status_t result; + + arg1 = (switch_cache_db_handle_t **)jarg1; + arg2 = (switch_cache_db_handle_type_t)jarg2; + arg3 = (switch_cache_db_connection_options_t *)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + arg6 = (int)jarg6; + result = (switch_status_t)_switch_cache_db_get_db_handle(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_cache_db_execute_sql2str(void * jarg1, char * jarg2, char * jarg3, unsigned long jarg4, void * jarg5) { + char * jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + size_t arg4 ; + char **arg5 = (char **) 0 ; + char *result = 0 ; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (size_t)jarg4; + arg5 = (char **)jarg5; + result = (char *)switch_cache_db_execute_sql2str(arg1,arg2,arg3,arg4,arg5); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_cache_db_execute_sql(void * jarg1, char * jarg2, void * jarg3) { + int jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + char **arg3 = (char **) 0 ; + switch_status_t result; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char **)jarg3; + result = (switch_status_t)switch_cache_db_execute_sql(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_cache_db_execute_sql_callback(void * jarg1, char * jarg2, void * jarg3, void * jarg4, void * jarg5) { + int jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_core_db_callback_func_t arg3 = (switch_core_db_callback_func_t) 0 ; + void *arg4 = (void *) 0 ; + char **arg5 = (char **) 0 ; + switch_status_t result; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_core_db_callback_func_t)jarg3; + arg4 = (void *)jarg4; + arg5 = (char **)jarg5; + result = (switch_status_t)switch_cache_db_execute_sql_callback(arg1,(char const *)arg2,arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_status(void * jarg1) { + switch_stream_handle_t *arg1 = (switch_stream_handle_t *) 0 ; + + arg1 = (switch_stream_handle_t *)jarg1; + switch_cache_db_status(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp__switch_core_db_handle(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + int jresult ; + switch_cache_db_handle_t **arg1 = (switch_cache_db_handle_t **) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + switch_status_t result; + + arg1 = (switch_cache_db_handle_t **)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + result = (switch_status_t)_switch_core_db_handle(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_cache_db_test_reactive(void * jarg1, char * jarg2, char * jarg3, char * jarg4) { + int jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + switch_bool_t result; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + result = (switch_bool_t)switch_cache_db_test_reactive(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_cache_db_persistant_execute(void * jarg1, char * jarg2, unsigned long jarg3) { + int jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + uint32_t arg3 ; + switch_status_t result; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (uint32_t)jarg3; + result = (switch_status_t)switch_cache_db_persistant_execute(arg1,(char const *)arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_cache_db_persistant_execute_trans(void * jarg1, char * jarg2, unsigned long jarg3) { + int jresult ; + switch_cache_db_handle_t *arg1 = (switch_cache_db_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + uint32_t arg3 ; + switch_status_t result; + + arg1 = (switch_cache_db_handle_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (uint32_t)jarg3; + result = (switch_status_t)switch_cache_db_persistant_execute_trans(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_detach() { + switch_cache_db_detach(); +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_debug_level() { + unsigned long jresult ; + uint32_t result; + + result = (uint32_t)switch_core_debug_level(); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_cache_db_flush_handles() { + switch_cache_db_flush_handles(); +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_core_banner() { + char * jresult ; + char *result = 0 ; + + result = (char *)switch_core_banner(); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_in_thread(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_bool_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_bool_t)switch_core_session_in_thread(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_CMD_CHUNK_LEN_get() { + int jresult ; + int result; + + result = (int)(1024); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_console_loop() { + switch_console_loop(); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_console_stream_raw_write(void * jarg1, void * jarg2, void * jarg3) { + int jresult ; + switch_stream_handle_t *arg1 = (switch_stream_handle_t *) 0 ; + uint8_t *arg2 = (uint8_t *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_status_t result; + + arg1 = (switch_stream_handle_t *)jarg1; + arg2 = (uint8_t *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = (switch_status_t)switch_console_stream_raw_write(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_stream_write_file_contents(void * jarg1, char * jarg2) { + int jresult ; + switch_stream_handle_t *arg1 = (switch_stream_handle_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_stream_handle_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_stream_write_file_contents(arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_console_init(void * jarg1) { + int jresult ; + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (switch_memory_pool_t *)jarg1; + result = (switch_status_t)switch_console_init(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_console_shutdown() { + int jresult ; + switch_status_t result; + + result = (switch_status_t)switch_console_shutdown(); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_console_add_complete_func(char * jarg1, void * jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_console_complete_callback_t arg2 = (switch_console_complete_callback_t) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_console_complete_callback_t)jarg2; + result = (switch_status_t)switch_console_add_complete_func((char const *)arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_console_del_complete_func(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + result = (switch_status_t)switch_console_del_complete_func((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_console_run_complete_func(char * jarg1, char * jarg2, char * jarg3, void * jarg4) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_console_callback_match_t **arg4 = (switch_console_callback_match_t **) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_console_callback_match_t **)jarg4; + result = (switch_status_t)switch_console_run_complete_func((char const *)arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_console_push_match(void * jarg1, char * jarg2) { + switch_console_callback_match_t **arg1 = (switch_console_callback_match_t **) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_console_callback_match_t **)jarg1; + arg2 = (char *)jarg2; + switch_console_push_match(arg1,(char const *)arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_console_free_matches(void * jarg1) { + switch_console_callback_match_t **arg1 = (switch_console_callback_match_t **) 0 ; + + arg1 = (switch_console_callback_match_t **)jarg1; + switch_console_free_matches(arg1); +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_console_complete(char * jarg1, char * jarg2, void * jarg3, void * jarg4, void * jarg5) { + unsigned char jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + FILE *arg3 = (FILE *) 0 ; + switch_stream_handle_t *arg4 = (switch_stream_handle_t *) 0 ; + switch_xml_t arg5 = (switch_xml_t) 0 ; + unsigned char result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (FILE *)jarg3; + arg4 = (switch_stream_handle_t *)jarg4; + arg5 = (switch_xml_t)jarg5; + result = (unsigned char)switch_console_complete((char const *)arg1,(char const *)arg2,arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_console_sort_matches(void * jarg1) { + switch_console_callback_match_t *arg1 = (switch_console_callback_match_t *) 0 ; + + arg1 = (switch_console_callback_match_t *)jarg1; + switch_console_sort_matches(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_console_save_history() { + switch_console_save_history(); +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_console_expand_alias(char * jarg1, char * jarg2) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + result = (char *)switch_console_expand_alias(arg1,arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_console_execute(char * jarg1, int jarg2, void * jarg3) { + int jresult ; + char *arg1 = (char *) 0 ; + int arg2 ; + switch_stream_handle_t *arg3 = (switch_stream_handle_t *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (int)jarg2; + arg3 = (switch_stream_handle_t *)jarg3; + result = (switch_status_t)switch_console_execute(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_toupper(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_toupper(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_tolower(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_tolower(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isalnum(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isalnum(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isalpha(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isalpha(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_iscntrl(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_iscntrl(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isdigit(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isdigit(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isgraph(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isgraph(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_islower(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_islower(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isprint(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isprint(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ispunct(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_ispunct(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isspace(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isspace(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isupper(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isupper(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_isxdigit(int jarg1) { + int jresult ; + int arg1 ; + int result; + + arg1 = (int)jarg1; + result = (int)switch_isxdigit(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_SMAX_get() { + int jresult ; + int result; + + result = (int)(32767); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_SMIN_get() { + int jresult ; + int result; + + result = (int)(-32768); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp__zstr(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + int result; + + arg1 = (char *)jarg1; + result = (int)_zstr((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_is_moh(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_bool_t result; + + arg1 = (char *)jarg1; + result = (switch_bool_t)switch_is_moh((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_strchr_strict(char * jarg1, char jarg2, char * jarg3) { + char * jresult ; + char *arg1 = (char *) 0 ; + char arg2 ; + char *arg3 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (char)jarg2; + arg3 = (char *)jarg3; + result = (char *)switch_strchr_strict((char const *)arg1,arg2,(char const *)arg3); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_string_has_escaped_data(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + int result; + + arg1 = (char *)jarg1; + result = (int)switch_string_has_escaped_data((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_b64_encode(void * jarg1, void * jarg2, void * jarg3, void * jarg4) { + int jresult ; + unsigned char *arg1 = (unsigned char *) 0 ; + switch_size_t arg2 ; + unsigned char *arg3 = (unsigned char *) 0 ; + switch_size_t arg4 ; + switch_size_t *argp2 ; + switch_size_t *argp4 ; + switch_status_t result; + + arg1 = (unsigned char *)jarg1; + argp2 = (switch_size_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg2 = *argp2; + arg3 = (unsigned char *)jarg3; + argp4 = (switch_size_t *)jarg4; + if (!argp4) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg4 = *argp4; + result = (switch_status_t)switch_b64_encode(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_b64_decode(char * jarg1, char * jarg2, void * jarg3) { + void * jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_size_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = switch_b64_decode(arg1,arg2,arg3); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_amp_encode(char * jarg1, char * jarg2, void * jarg3) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = (char *)switch_amp_encode(arg1,arg2,arg3); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_is_digit_string(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_bool_t result; + + arg1 = (char *)jarg1; + result = (switch_bool_t)switch_is_digit_string((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_fd_read_line(int jarg1, char * jarg2, void * jarg3) { + void * jresult ; + int arg1 ; + char *arg2 = (char *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_size_t result; + + arg1 = (int)jarg1; + arg2 = (char *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = switch_fd_read_line(arg1,arg2,arg3); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_frame_alloc(void * jarg1, void * jarg2) { + int jresult ; + switch_frame_t **arg1 = (switch_frame_t **) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + switch_status_t result; + + arg1 = (switch_frame_t **)jarg1; + argp2 = (switch_size_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg2 = *argp2; + result = (switch_status_t)switch_frame_alloc(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_frame_dup(void * jarg1, void * jarg2) { + int jresult ; + switch_frame_t *arg1 = (switch_frame_t *) 0 ; + switch_frame_t **arg2 = (switch_frame_t **) 0 ; + switch_status_t result; + + arg1 = (switch_frame_t *)jarg1; + arg2 = (switch_frame_t **)jarg2; + result = (switch_status_t)switch_frame_dup(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_frame_free(void * jarg1) { + int jresult ; + switch_frame_t **arg1 = (switch_frame_t **) 0 ; + switch_status_t result; + + arg1 = (switch_frame_t **)jarg1; + result = (switch_status_t)switch_frame_free(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_resolve_host(char * jarg1, char * jarg2, unsigned long jarg3) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + size_t arg3 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (size_t)jarg3; + result = (switch_status_t)switch_resolve_host((char const *)arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_find_local_ip(char * jarg1, int jarg2, void * jarg3, int jarg4) { + int jresult ; + char *arg1 = (char *) 0 ; + int arg2 ; + int *arg3 = (int *) 0 ; + int arg4 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (int)jarg2; + arg3 = (int *)jarg3; + arg4 = (int)jarg4; + result = (switch_status_t)switch_find_local_ip(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_get_addr(char * jarg1, void * jarg2, void * jarg3, void * jarg4) { + char * jresult ; + char *arg1 = (char *) 0 ; + switch_size_t arg2 ; + sockaddr *arg3 = (sockaddr *) 0 ; + socklen_t arg4 ; + switch_size_t *argp2 ; + socklen_t *argp4 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + argp2 = (switch_size_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg2 = *argp2; + arg3 = (sockaddr *)jarg3; + argp4 = (socklen_t *)jarg4; + if (!argp4) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null socklen_t", 0); + return 0; + } + arg4 = *argp4; + result = (char *)get_addr(arg1,arg2,arg3,arg4); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_get_addr6(char * jarg1, void * jarg2, void * jarg3, void * jarg4) { + char * jresult ; + char *arg1 = (char *) 0 ; + switch_size_t arg2 ; + sockaddr_in6 *arg3 = (sockaddr_in6 *) 0 ; + socklen_t arg4 ; + switch_size_t *argp2 ; + socklen_t *argp4 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + argp2 = (switch_size_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg2 = *argp2; + arg3 = (sockaddr_in6 *)jarg3; + argp4 = (socklen_t *)jarg4; + if (!argp4) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null socklen_t", 0); + return 0; + } + arg4 = *argp4; + result = (char *)get_addr6(arg1,arg2,arg3,arg4); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_get_addr_int(void * jarg1) { + int jresult ; + switch_sockaddr_t *arg1 = (switch_sockaddr_t *) 0 ; + int result; + + arg1 = (switch_sockaddr_t *)jarg1; + result = (int)get_addr_int(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_cmp_addr(void * jarg1, void * jarg2) { + int jresult ; + switch_sockaddr_t *arg1 = (switch_sockaddr_t *) 0 ; + switch_sockaddr_t *arg2 = (switch_sockaddr_t *) 0 ; + int result; + + arg1 = (switch_sockaddr_t *)jarg1; + arg2 = (switch_sockaddr_t *)jarg2; + result = (int)switch_cmp_addr(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned short SWIGSTDCALL CSharp_get_port(void * jarg1) { + unsigned short jresult ; + sockaddr *arg1 = (sockaddr *) 0 ; + unsigned short result; + + arg1 = (sockaddr *)jarg1; + result = (unsigned short)get_port(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_build_uri(char * jarg1, void * jarg2, char * jarg3, char * jarg4, void * jarg5, int jarg6) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_size_t arg2 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + switch_sockaddr_t *arg5 = (switch_sockaddr_t *) 0 ; + int arg6 ; + switch_size_t *argp2 ; + int result; + + arg1 = (char *)jarg1; + argp2 = (switch_size_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg2 = *argp2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (switch_sockaddr_t *)jarg5; + arg6 = (int)jarg6; + result = (int)switch_build_uri(arg1,arg2,(char const *)arg3,(char const *)arg4,(switch_sockaddr_t const *)arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_priority_name(int jarg1) { + char * jresult ; + switch_priority_t arg1 ; + char *result = 0 ; + + arg1 = (switch_priority_t)jarg1; + result = (char *)switch_priority_name(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char SWIGSTDCALL CSharp_switch_rfc2833_to_char(int jarg1) { + char jresult ; + int arg1 ; + char result; + + arg1 = (int)jarg1; + result = (char)switch_rfc2833_to_char(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_char_to_rfc2833(char jarg1) { + unsigned char jresult ; + char arg1 ; + unsigned char result; + + arg1 = (char)jarg1; + result = (unsigned char)switch_char_to_rfc2833(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_sanitize_number(char * jarg1) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + result = (char *)switch_sanitize_number(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_string_var_check(char * jarg1, int jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_bool_t arg2 ; + switch_bool_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_bool_t)jarg2; + result = (switch_bool_t)switch_string_var_check(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_string_var_check_const(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_bool_t result; + + arg1 = (char *)jarg1; + result = (switch_bool_t)switch_string_var_check_const((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_var_clean_string(char * jarg1) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + result = (char *)switch_var_clean_string(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_clean_string(char * jarg1) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + result = (char *)switch_clean_string(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_safe_strdup(char * jarg1) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + result = (char *)switch_safe_strdup((char const *)arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_lc_strdup(char * jarg1) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + result = (char *)switch_lc_strdup((char const *)arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_uc_strdup(char * jarg1) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + result = (char *)switch_uc_strdup((char const *)arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_strstr(char * jarg1, char * jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_bool_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + result = (switch_bool_t)switch_strstr(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_str_time(char * jarg1) { + void * jresult ; + char *arg1 = (char *) 0 ; + switch_time_t result; + + arg1 = (char *)jarg1; + result = switch_str_time((char const *)arg1); + jresult = new switch_time_t((const switch_time_t &)result); + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_separate_string(char * jarg1, char jarg2, void * jarg3, unsigned int jarg4) { + unsigned int jresult ; + char *arg1 = (char *) 0 ; + char arg2 ; + char **arg3 = (char **) 0 ; + unsigned int arg4 ; + unsigned int result; + + arg1 = (char *)jarg1; + arg2 = (char)jarg2; + arg3 = (char **)jarg3; + arg4 = (unsigned int)jarg4; + result = (unsigned int)switch_separate_string(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_separate_string_string(char * jarg1, char * jarg2, void * jarg3, unsigned int jarg4) { + unsigned int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char **arg3 = (char **) 0 ; + unsigned int arg4 ; + unsigned int result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char **)jarg3; + arg4 = (unsigned int)jarg4; + result = (unsigned int)switch_separate_string_string(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_is_number(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_bool_t result; + + arg1 = (char *)jarg1; + result = (switch_bool_t)switch_is_number((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_strip_spaces(char * jarg1) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + result = (char *)switch_strip_spaces((char const *)arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_strip_commas(char * jarg1, char * jarg2, void * jarg3) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = (char *)switch_strip_commas(arg1,arg2,arg3); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_strip_nonnumerics(char * jarg1, char * jarg2, void * jarg3) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = (char *)switch_strip_nonnumerics(arg1,arg2,arg3); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_separate_paren_args(char * jarg1) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + result = (char *)switch_separate_paren_args(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_stristr(char * jarg1, char * jarg2) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + result = (char *)switch_stristr((char const *)arg1,(char const *)arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_is_lan_addr(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_bool_t result; + + arg1 = (char *)jarg1; + result = (switch_bool_t)switch_is_lan_addr((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_replace_char(char * jarg1, char jarg2, char jarg3, int jarg4) { + char * jresult ; + char *arg1 = (char *) 0 ; + char arg2 ; + char arg3 ; + switch_bool_t arg4 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (char)jarg2; + arg3 = (char)jarg3; + arg4 = (switch_bool_t)jarg4; + result = (char *)switch_replace_char(arg1,arg2,arg3,arg4); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ast2regex(char * jarg1, char * jarg2, unsigned long jarg3) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + size_t arg3 ; + switch_bool_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (size_t)jarg3; + result = (switch_bool_t)switch_ast2regex((char const *)arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_escape_char(void * jarg1, char * jarg2, char * jarg3, char jarg4) { + char * jresult ; + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char arg4 ; + char *result = 0 ; + + arg1 = (switch_memory_pool_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char)jarg4; + result = (char *)switch_escape_char(arg1,arg2,(char const *)arg3,arg4); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_escape_string(char * jarg1, char * jarg2, void * jarg3) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = (char *)switch_escape_string((char const *)arg1,arg2,arg3); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_escape_string_pool(char * jarg1, void * jarg2) { + char * jresult ; + char *arg1 = (char *) 0 ; + switch_memory_pool_t *arg2 = (switch_memory_pool_t *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (switch_memory_pool_t *)jarg2; + result = (char *)switch_escape_string_pool((char const *)arg1,arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_socket_waitfor(void * jarg1, int jarg2) { + int jresult ; + switch_pollfd_t *arg1 = (switch_pollfd_t *) 0 ; + int arg2 ; + int result; + + arg1 = (switch_pollfd_t *)jarg1; + arg2 = (int)jarg2; + result = (int)switch_socket_waitfor(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_cut_path(char * jarg1) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + result = (char *)switch_cut_path((char const *)arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_string_replace(char * jarg1, char * jarg2, char * jarg3) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (char *)switch_string_replace((char const *)arg1,(char const *)arg2,(char const *)arg3); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_string_match(char * jarg1, unsigned long jarg2, char * jarg3, unsigned long jarg4) { + int jresult ; + char *arg1 = (char *) 0 ; + size_t arg2 ; + char *arg3 = (char *) 0 ; + size_t arg4 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (size_t)jarg2; + arg3 = (char *)jarg3; + arg4 = (size_t)jarg4; + result = (switch_status_t)switch_string_match((char const *)arg1,arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_util_quote_shell_arg(char * jarg1) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + result = (char *)switch_util_quote_shell_arg((char const *)arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_url_encode(char * jarg1, char * jarg2, unsigned long jarg3) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + size_t arg3 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (size_t)jarg3; + result = (char *)switch_url_encode((char const *)arg1,arg2,arg3); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_url_decode(char * jarg1) { + char * jresult ; + char *arg1 = (char *) 0 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + result = (char *)switch_url_decode(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_simple_email(char * jarg1, char * jarg2, char * jarg3, char * jarg4, char * jarg5, char * jarg6, char * jarg7) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + char *arg6 = (char *) 0 ; + char *arg7 = (char *) 0 ; + switch_bool_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + arg6 = (char *)jarg6; + arg7 = (char *)jarg7; + result = (switch_bool_t)switch_simple_email((char const *)arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_find_end_paren(char * jarg1, char jarg2, char jarg3) { + char * jresult ; + char *arg1 = (char *) 0 ; + char arg2 ; + char arg3 ; + char *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (char)jarg2; + arg3 = (char)jarg3; + result = (char *)switch_find_end_paren((char const *)arg1,arg2,arg3); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_is_file_path(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_bool_t result; + + arg1 = (char *)jarg1; + result = (switch_bool_t)switch_is_file_path((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_parse_cidr(char * jarg1, void * jarg2, void * jarg3, void * jarg4) { + int jresult ; + char *arg1 = (char *) 0 ; + uint32_t *arg2 = (uint32_t *) 0 ; + uint32_t *arg3 = (uint32_t *) 0 ; + uint32_t *arg4 = (uint32_t *) 0 ; + int result; + + arg1 = (char *)jarg1; + arg2 = (uint32_t *)jarg2; + arg3 = (uint32_t *)jarg3; + arg4 = (uint32_t *)jarg4; + result = (int)switch_parse_cidr((char const *)arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_network_list_create(void * jarg1, char * jarg2, int jarg3, void * jarg4) { + int jresult ; + switch_network_list_t **arg1 = (switch_network_list_t **) 0 ; + char *arg2 = (char *) 0 ; + switch_bool_t arg3 ; + switch_memory_pool_t *arg4 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (switch_network_list_t **)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_bool_t)jarg3; + arg4 = (switch_memory_pool_t *)jarg4; + result = (switch_status_t)switch_network_list_create(arg1,(char const *)arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_network_list_add_cidr_token(void * jarg1, char * jarg2, int jarg3, char * jarg4) { + int jresult ; + switch_network_list_t *arg1 = (switch_network_list_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_bool_t arg3 ; + char *arg4 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_network_list_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_bool_t)jarg3; + arg4 = (char *)jarg4; + result = (switch_status_t)switch_network_list_add_cidr_token(arg1,(char const *)arg2,arg3,(char const *)arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_network_list_add_host_mask(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + int jresult ; + switch_network_list_t *arg1 = (switch_network_list_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_bool_t arg4 ; + switch_status_t result; + + arg1 = (switch_network_list_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_bool_t)jarg4; + result = (switch_status_t)switch_network_list_add_host_mask(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_network_list_validate_ip_token(void * jarg1, unsigned long jarg2, void * jarg3) { + int jresult ; + switch_network_list_t *arg1 = (switch_network_list_t *) 0 ; + uint32_t arg2 ; + char **arg3 = (char **) 0 ; + switch_bool_t result; + + arg1 = (switch_network_list_t *)jarg1; + arg2 = (uint32_t)jarg2; + arg3 = (char **)jarg3; + result = (switch_bool_t)switch_network_list_validate_ip_token(arg1,arg2,(char const **)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_number_cmp(char * jarg1, int jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + int arg2 ; + int result; + + arg1 = (char *)jarg1; + arg2 = (int)jarg2; + result = (int)switch_number_cmp((char const *)arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_split_user_domain(char * jarg1, void * jarg2, void * jarg3) { + int jresult ; + char *arg1 = (char *) 0 ; + char **arg2 = (char **) 0 ; + char **arg3 = (char **) 0 ; + int result; + + arg1 = (char *)jarg1; + arg2 = (char **)jarg2; + arg3 = (char **)jarg3; + result = (int)switch_split_user_domain(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +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 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->username = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->username, (const char *)arg2); + } else { + arg1->username = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_username_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->username); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_dialplan_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->dialplan = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->dialplan, (const char *)arg2); + } else { + arg1->dialplan = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_dialplan_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->dialplan); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_caller_id_name_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->caller_id_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->caller_id_name, (const char *)arg2); + } else { + arg1->caller_id_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_caller_id_name_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->caller_id_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_caller_id_number_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->caller_id_number = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->caller_id_number, (const char *)arg2); + } else { + arg1->caller_id_number = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_caller_id_number_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->caller_id_number); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_callee_id_name_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->callee_id_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->callee_id_name, (const char *)arg2); + } else { + arg1->callee_id_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_callee_id_name_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->callee_id_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_callee_id_number_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->callee_id_number = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->callee_id_number, (const char *)arg2); + } else { + arg1->callee_id_number = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_callee_id_number_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->callee_id_number); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_caller_ton_set(void * jarg1, unsigned char jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t arg2 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (uint8_t)jarg2; + if (arg1) (arg1)->caller_ton = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_caller_profile_caller_ton_get(void * jarg1) { + unsigned char jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t result; + + arg1 = (switch_caller_profile *)jarg1; + result = (uint8_t) ((arg1)->caller_ton); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_caller_numplan_set(void * jarg1, unsigned char jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t arg2 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (uint8_t)jarg2; + if (arg1) (arg1)->caller_numplan = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_caller_profile_caller_numplan_get(void * jarg1) { + unsigned char jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t result; + + arg1 = (switch_caller_profile *)jarg1; + result = (uint8_t) ((arg1)->caller_numplan); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_network_addr_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->network_addr = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->network_addr, (const char *)arg2); + } else { + arg1->network_addr = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_network_addr_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->network_addr); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_ani_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->ani = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->ani, (const char *)arg2); + } else { + arg1->ani = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_ani_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->ani); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_ani_ton_set(void * jarg1, unsigned char jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t arg2 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (uint8_t)jarg2; + if (arg1) (arg1)->ani_ton = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_caller_profile_ani_ton_get(void * jarg1) { + unsigned char jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t result; + + arg1 = (switch_caller_profile *)jarg1; + result = (uint8_t) ((arg1)->ani_ton); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_ani_numplan_set(void * jarg1, unsigned char jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t arg2 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (uint8_t)jarg2; + if (arg1) (arg1)->ani_numplan = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_caller_profile_ani_numplan_get(void * jarg1) { + unsigned char jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t result; + + arg1 = (switch_caller_profile *)jarg1; + result = (uint8_t) ((arg1)->ani_numplan); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_aniii_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->aniii = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->aniii, (const char *)arg2); + } else { + arg1->aniii = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_aniii_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->aniii); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_rdnis_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->rdnis = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->rdnis, (const char *)arg2); + } else { + arg1->rdnis = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_rdnis_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->rdnis); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_rdnis_ton_set(void * jarg1, unsigned char jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t arg2 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (uint8_t)jarg2; + if (arg1) (arg1)->rdnis_ton = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_caller_profile_rdnis_ton_get(void * jarg1) { + unsigned char jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t result; + + arg1 = (switch_caller_profile *)jarg1; + result = (uint8_t) ((arg1)->rdnis_ton); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_rdnis_numplan_set(void * jarg1, unsigned char jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t arg2 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (uint8_t)jarg2; + if (arg1) (arg1)->rdnis_numplan = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_caller_profile_rdnis_numplan_get(void * jarg1) { + unsigned char jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t result; + + arg1 = (switch_caller_profile *)jarg1; + result = (uint8_t) ((arg1)->rdnis_numplan); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_destination_number_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->destination_number) delete [] arg1->destination_number; + if (arg2) { + arg1->destination_number = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->destination_number, (const char *)arg2); + } else { + arg1->destination_number = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_destination_number_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->destination_number); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_destination_number_ton_set(void * jarg1, unsigned char jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t arg2 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (uint8_t)jarg2; + if (arg1) (arg1)->destination_number_ton = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_caller_profile_destination_number_ton_get(void * jarg1) { + unsigned char jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t result; + + arg1 = (switch_caller_profile *)jarg1; + result = (uint8_t) ((arg1)->destination_number_ton); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_destination_number_numplan_set(void * jarg1, unsigned char jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t arg2 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (uint8_t)jarg2; + if (arg1) (arg1)->destination_number_numplan = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_caller_profile_destination_number_numplan_get(void * jarg1) { + unsigned char jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + uint8_t result; + + arg1 = (switch_caller_profile *)jarg1; + result = (uint8_t) ((arg1)->destination_number_numplan); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_source_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->source = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->source, (const char *)arg2); + } else { + arg1->source = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_source_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->source); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_chan_name_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->chan_name) delete [] arg1->chan_name; + if (arg2) { + arg1->chan_name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->chan_name, (const char *)arg2); + } else { + arg1->chan_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_chan_name_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->chan_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_uuid_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->uuid) delete [] arg1->uuid; + if (arg2) { + arg1->uuid = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->uuid, (const char *)arg2); + } else { + arg1->uuid = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_uuid_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->uuid); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_context_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->context = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->context, (const char *)arg2); + } else { + arg1->context = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_context_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->context); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_profile_index_set(void * jarg1, char * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->profile_index = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->profile_index, (const char *)arg2); + } else { + arg1->profile_index = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_profile_profile_index_get(void * jarg1) { + char * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (char *) ((arg1)->profile_index); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_flags_set(void * jarg1, unsigned long jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_caller_profile_flag_t arg2 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (switch_caller_profile_flag_t)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_caller_profile_flags_get(void * jarg1) { + unsigned long jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_caller_profile_flag_t result; + + arg1 = (switch_caller_profile *)jarg1; + result = (switch_caller_profile_flag_t) ((arg1)->flags); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_originator_caller_profile_set(void * jarg1, void * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_caller_profile *arg2 = (switch_caller_profile *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (switch_caller_profile *)jarg2; + if (arg1) (arg1)->originator_caller_profile = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_profile_originator_caller_profile_get(void * jarg1) { + void * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_caller_profile *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (switch_caller_profile *) ((arg1)->originator_caller_profile); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_originatee_caller_profile_set(void * jarg1, void * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_caller_profile *arg2 = (switch_caller_profile *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (switch_caller_profile *)jarg2; + if (arg1) (arg1)->originatee_caller_profile = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_profile_originatee_caller_profile_get(void * jarg1) { + void * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_caller_profile *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (switch_caller_profile *) ((arg1)->originatee_caller_profile); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_hunt_caller_profile_set(void * jarg1, void * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_caller_profile *arg2 = (switch_caller_profile *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (switch_caller_profile *)jarg2; + if (arg1) (arg1)->hunt_caller_profile = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_profile_hunt_caller_profile_get(void * jarg1) { + void * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_caller_profile *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (switch_caller_profile *) ((arg1)->hunt_caller_profile); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_times_set(void * jarg1, void * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_channel_timetable *arg2 = (switch_channel_timetable *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (switch_channel_timetable *)jarg2; + if (arg1) (arg1)->times = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_profile_times_get(void * jarg1) { + void * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_channel_timetable *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (switch_channel_timetable *) ((arg1)->times); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_caller_extension_set(void * jarg1, void * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_caller_extension *arg2 = (switch_caller_extension *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (switch_caller_extension *)jarg2; + if (arg1) (arg1)->caller_extension = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_profile_caller_extension_get(void * jarg1) { + void * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_caller_extension *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (switch_caller_extension *) ((arg1)->caller_extension); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_pool_set(void * jarg1, void * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_memory_pool_t *arg2 = (switch_memory_pool_t *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (switch_memory_pool_t *)jarg2; + if (arg1) (arg1)->pool = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_profile_pool_get(void * jarg1) { + void * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_memory_pool_t *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (switch_memory_pool_t *) ((arg1)->pool); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_next_set(void * jarg1, void * jarg2) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_caller_profile *arg2 = (switch_caller_profile *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + arg2 = (switch_caller_profile *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_profile_next_get(void * jarg1) { + void * jresult ; + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + switch_caller_profile *result = 0 ; + + arg1 = (switch_caller_profile *)jarg1; + result = (switch_caller_profile *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_caller_profile() { + void * jresult ; + switch_caller_profile *result = 0 ; + + result = (switch_caller_profile *)new switch_caller_profile(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_caller_profile(void * jarg1) { + switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; + + arg1 = (switch_caller_profile *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_application_application_name_set(void * jarg1, char * jarg2) { + switch_caller_application *arg1 = (switch_caller_application *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_application *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->application_name) delete [] arg1->application_name; + if (arg2) { + arg1->application_name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->application_name, (const char *)arg2); + } else { + arg1->application_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_application_application_name_get(void * jarg1) { + char * jresult ; + switch_caller_application *arg1 = (switch_caller_application *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_application *)jarg1; + result = (char *) ((arg1)->application_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_application_application_data_set(void * jarg1, char * jarg2) { + switch_caller_application *arg1 = (switch_caller_application *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_application *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->application_data) delete [] arg1->application_data; + if (arg2) { + arg1->application_data = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->application_data, (const char *)arg2); + } else { + arg1->application_data = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_application_application_data_get(void * jarg1) { + char * jresult ; + switch_caller_application *arg1 = (switch_caller_application *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_application *)jarg1; + result = (char *) ((arg1)->application_data); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_application_application_function_set(void * jarg1, void * jarg2) { + switch_caller_application *arg1 = (switch_caller_application *) 0 ; + switch_application_function_t arg2 = (switch_application_function_t) 0 ; + + arg1 = (switch_caller_application *)jarg1; + arg2 = (switch_application_function_t)jarg2; + if (arg1) (arg1)->application_function = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_application_application_function_get(void * jarg1) { + void * jresult ; + switch_caller_application *arg1 = (switch_caller_application *) 0 ; + switch_application_function_t result; + + arg1 = (switch_caller_application *)jarg1; + result = (switch_application_function_t) ((arg1)->application_function); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_application_next_set(void * jarg1, void * jarg2) { + switch_caller_application *arg1 = (switch_caller_application *) 0 ; + switch_caller_application *arg2 = (switch_caller_application *) 0 ; + + arg1 = (switch_caller_application *)jarg1; + arg2 = (switch_caller_application *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_application_next_get(void * jarg1) { + void * jresult ; + switch_caller_application *arg1 = (switch_caller_application *) 0 ; + switch_caller_application *result = 0 ; + + arg1 = (switch_caller_application *)jarg1; + result = (switch_caller_application *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_caller_application() { + void * jresult ; + switch_caller_application *result = 0 ; + + result = (switch_caller_application *)new switch_caller_application(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_caller_application(void * jarg1) { + switch_caller_application *arg1 = (switch_caller_application *) 0 ; + + arg1 = (switch_caller_application *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_extension_extension_name_set(void * jarg1, char * jarg2) { + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_extension *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->extension_name) delete [] arg1->extension_name; + if (arg2) { + arg1->extension_name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->extension_name, (const char *)arg2); + } else { + arg1->extension_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_extension_extension_name_get(void * jarg1) { + char * jresult ; + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_extension *)jarg1; + result = (char *) ((arg1)->extension_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_extension_extension_number_set(void * jarg1, char * jarg2) { + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_caller_extension *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->extension_number) delete [] arg1->extension_number; + if (arg2) { + arg1->extension_number = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->extension_number, (const char *)arg2); + } else { + arg1->extension_number = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_extension_extension_number_get(void * jarg1) { + char * jresult ; + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_extension *)jarg1; + result = (char *) ((arg1)->extension_number); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_extension_current_application_set(void * jarg1, void * jarg2) { + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + switch_caller_application_t *arg2 = (switch_caller_application_t *) 0 ; + + arg1 = (switch_caller_extension *)jarg1; + arg2 = (switch_caller_application_t *)jarg2; + if (arg1) (arg1)->current_application = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_extension_current_application_get(void * jarg1) { + void * jresult ; + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + switch_caller_application_t *result = 0 ; + + arg1 = (switch_caller_extension *)jarg1; + result = (switch_caller_application_t *) ((arg1)->current_application); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_extension_last_application_set(void * jarg1, void * jarg2) { + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + switch_caller_application_t *arg2 = (switch_caller_application_t *) 0 ; + + arg1 = (switch_caller_extension *)jarg1; + arg2 = (switch_caller_application_t *)jarg2; + if (arg1) (arg1)->last_application = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_extension_last_application_get(void * jarg1) { + void * jresult ; + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + switch_caller_application_t *result = 0 ; + + arg1 = (switch_caller_extension *)jarg1; + result = (switch_caller_application_t *) ((arg1)->last_application); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_extension_applications_set(void * jarg1, void * jarg2) { + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + switch_caller_application_t *arg2 = (switch_caller_application_t *) 0 ; + + arg1 = (switch_caller_extension *)jarg1; + arg2 = (switch_caller_application_t *)jarg2; + if (arg1) (arg1)->applications = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_extension_applications_get(void * jarg1) { + void * jresult ; + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + switch_caller_application_t *result = 0 ; + + arg1 = (switch_caller_extension *)jarg1; + result = (switch_caller_application_t *) ((arg1)->applications); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_extension_children_set(void * jarg1, void * jarg2) { + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + switch_caller_profile *arg2 = (switch_caller_profile *) 0 ; + + arg1 = (switch_caller_extension *)jarg1; + arg2 = (switch_caller_profile *)jarg2; + if (arg1) (arg1)->children = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_extension_children_get(void * jarg1) { + void * jresult ; + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + switch_caller_profile *result = 0 ; + + arg1 = (switch_caller_extension *)jarg1; + result = (switch_caller_profile *) ((arg1)->children); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_extension_next_set(void * jarg1, void * jarg2) { + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + switch_caller_extension *arg2 = (switch_caller_extension *) 0 ; + + arg1 = (switch_caller_extension *)jarg1; + arg2 = (switch_caller_extension *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_extension_next_get(void * jarg1) { + void * jresult ; + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + switch_caller_extension *result = 0 ; + + arg1 = (switch_caller_extension *)jarg1; + result = (switch_caller_extension *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_caller_extension() { + void * jresult ; + switch_caller_extension *result = 0 ; + + result = (switch_caller_extension *)new switch_caller_extension(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_caller_extension(void * jarg1) { + switch_caller_extension *arg1 = (switch_caller_extension *) 0 ; + + arg1 = (switch_caller_extension *)jarg1; + delete arg1; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_extension_new(void * jarg1, char * jarg2, char * jarg3) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_caller_extension_t *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (switch_caller_extension_t *)switch_caller_extension_new(arg1,(char const *)arg2,(char const *)arg3); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_caller_extension_clone(void * jarg1, void * jarg2, void * jarg3) { + int jresult ; + switch_caller_extension_t **arg1 = (switch_caller_extension_t **) 0 ; + switch_caller_extension_t *arg2 = (switch_caller_extension_t *) 0 ; + switch_memory_pool_t *arg3 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (switch_caller_extension_t **)jarg1; + arg2 = (switch_caller_extension_t *)jarg2; + arg3 = (switch_memory_pool_t *)jarg3; + result = (switch_status_t)switch_caller_extension_clone(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_extension_add_application(void * jarg1, void * jarg2, char * jarg3, char * jarg4) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_caller_extension_t *arg2 = (switch_caller_extension_t *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_caller_extension_t *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + switch_caller_extension_add_application(arg1,arg2,(char const *)arg3,(char const *)arg4); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_extension_add_application_printf(void * jarg1, void * jarg2, char * jarg3, char * jarg4) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_caller_extension_t *arg2 = (switch_caller_extension_t *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + void *arg5 = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_caller_extension_t *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + switch_caller_extension_add_application_printf(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5); +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_caller_get_field_by_name(void * jarg1, char * jarg2) { + char * jresult ; + switch_caller_profile_t *arg1 = (switch_caller_profile_t *) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + arg1 = (switch_caller_profile_t *)jarg1; + arg2 = (char *)jarg2; + result = (char *)switch_caller_get_field_by_name(arg1,(char const *)arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_profile_new(void * jarg1, char * jarg2, char * jarg3, char * jarg4, char * jarg5, char * jarg6, char * jarg7, char * jarg8, char * jarg9, char * jarg10, char * jarg11, char * jarg12) { + void * jresult ; + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + char *arg6 = (char *) 0 ; + char *arg7 = (char *) 0 ; + char *arg8 = (char *) 0 ; + char *arg9 = (char *) 0 ; + char *arg10 = (char *) 0 ; + char *arg11 = (char *) 0 ; + char *arg12 = (char *) 0 ; + switch_caller_profile_t *result = 0 ; + + arg1 = (switch_memory_pool_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + arg6 = (char *)jarg6; + arg7 = (char *)jarg7; + arg8 = (char *)jarg8; + arg9 = (char *)jarg9; + arg10 = (char *)jarg10; + arg11 = (char *)jarg11; + arg12 = (char *)jarg12; + result = (switch_caller_profile_t *)switch_caller_profile_new(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,(char const *)arg9,(char const *)arg10,(char const *)arg11,(char const *)arg12); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_profile_clone(void * jarg1, void * jarg2) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_caller_profile_t *arg2 = (switch_caller_profile_t *) 0 ; + switch_caller_profile_t *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_caller_profile_t *)jarg2; + result = (switch_caller_profile_t *)switch_caller_profile_clone(arg1,arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_caller_profile_dup(void * jarg1, void * jarg2) { + void * jresult ; + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + switch_caller_profile_t *arg2 = (switch_caller_profile_t *) 0 ; + switch_caller_profile_t *result = 0 ; + + arg1 = (switch_memory_pool_t *)jarg1; + arg2 = (switch_caller_profile_t *)jarg2; + result = (switch_caller_profile_t *)switch_caller_profile_dup(arg1,arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_event_set_data(void * jarg1, char * jarg2, void * jarg3) { + switch_caller_profile_t *arg1 = (switch_caller_profile_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_event_t *arg3 = (switch_event_t *) 0 ; + + arg1 = (switch_caller_profile_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_event_t *)jarg3; + switch_caller_profile_event_set_data(arg1,(char const *)arg2,arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_codec_set(void * jarg1, void * jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + switch_codec_t *arg2 = (switch_codec_t *) 0 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (switch_codec_t *)jarg2; + if (arg1) (arg1)->codec = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_frame_codec_get(void * jarg1) { + void * jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + switch_codec_t *result = 0 ; + + arg1 = (switch_frame *)jarg1; + result = (switch_codec_t *) ((arg1)->codec); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_source_set(void * jarg1, char * jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->source = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->source, (const char *)arg2); + } else { + arg1->source = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_frame_source_get(void * jarg1) { + char * jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + char *result = 0 ; + + arg1 = (switch_frame *)jarg1; + result = (char *) ((arg1)->source); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_packet_set(void * jarg1, void * jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->packet = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_frame_packet_get(void * jarg1) { + void * jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + void *result = 0 ; + + arg1 = (switch_frame *)jarg1; + result = (void *) ((arg1)->packet); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_packetlen_set(void * jarg1, unsigned long jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->packetlen = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_frame_packetlen_get(void * jarg1) { + unsigned long jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + uint32_t result; + + arg1 = (switch_frame *)jarg1; + result = (uint32_t) ((arg1)->packetlen); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_extra_data_set(void * jarg1, void * jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->extra_data = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_frame_extra_data_get(void * jarg1) { + void * jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + void *result = 0 ; + + arg1 = (switch_frame *)jarg1; + result = (void *) ((arg1)->extra_data); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_data_set(void * jarg1, void * jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->data = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_frame_data_get(void * jarg1) { + void * jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + void *result = 0 ; + + arg1 = (switch_frame *)jarg1; + result = (void *) ((arg1)->data); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_datalen_set(void * jarg1, unsigned long jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->datalen = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_frame_datalen_get(void * jarg1) { + unsigned long jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + uint32_t result; + + arg1 = (switch_frame *)jarg1; + result = (uint32_t) ((arg1)->datalen); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_buflen_set(void * jarg1, unsigned long jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->buflen = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_frame_buflen_get(void * jarg1) { + unsigned long jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + uint32_t result; + + arg1 = (switch_frame *)jarg1; + result = (uint32_t) ((arg1)->buflen); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_samples_set(void * jarg1, unsigned long jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->samples = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_frame_samples_get(void * jarg1) { + unsigned long jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + uint32_t result; + + arg1 = (switch_frame *)jarg1; + result = (uint32_t) ((arg1)->samples); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_rate_set(void * jarg1, unsigned long jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->rate = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_frame_rate_get(void * jarg1) { + unsigned long jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + uint32_t result; + + arg1 = (switch_frame *)jarg1; + result = (uint32_t) ((arg1)->rate); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_payload_set(void * jarg1, unsigned char jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + switch_payload_t arg2 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (switch_payload_t)jarg2; + if (arg1) (arg1)->payload = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_frame_payload_get(void * jarg1) { + unsigned char jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + switch_payload_t result; + + arg1 = (switch_frame *)jarg1; + result = (switch_payload_t) ((arg1)->payload); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_timestamp_set(void * jarg1, void * jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_frame *)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)->timestamp = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_frame_timestamp_get(void * jarg1) { + void * jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + switch_size_t result; + + arg1 = (switch_frame *)jarg1; + result = ((arg1)->timestamp); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_seq_set(void * jarg1, unsigned short jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + uint16_t arg2 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (uint16_t)jarg2; + if (arg1) (arg1)->seq = arg2; +} + + +SWIGEXPORT unsigned short SWIGSTDCALL CSharp_switch_frame_seq_get(void * jarg1) { + unsigned short jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + uint16_t result; + + arg1 = (switch_frame *)jarg1; + result = (uint16_t) ((arg1)->seq); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_ssrc_set(void * jarg1, unsigned long jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->ssrc = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_frame_ssrc_get(void * jarg1) { + unsigned long jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + uint32_t result; + + arg1 = (switch_frame *)jarg1; + result = (uint32_t) ((arg1)->ssrc); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_m_set(void * jarg1, int jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + switch_bool_t arg2 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (switch_bool_t)jarg2; + if (arg1) (arg1)->m = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_frame_m_get(void * jarg1) { + int jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + switch_bool_t result; + + arg1 = (switch_frame *)jarg1; + result = (switch_bool_t) ((arg1)->m); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_flags_set(void * jarg1, unsigned long jarg2) { + switch_frame *arg1 = (switch_frame *) 0 ; + switch_frame_flag_t arg2 ; + + arg1 = (switch_frame *)jarg1; + arg2 = (switch_frame_flag_t)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_frame_flags_get(void * jarg1) { + unsigned long jresult ; + switch_frame *arg1 = (switch_frame *) 0 ; + switch_frame_flag_t result; + + arg1 = (switch_frame *)jarg1; + result = (switch_frame_flag_t) ((arg1)->flags); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_frame() { + void * jresult ; + switch_frame *result = 0 ; + + result = (switch_frame *)new switch_frame(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_frame(void * jarg1) { + switch_frame *arg1 = (switch_frame *) 0 ; + + arg1 = (switch_frame *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_state_handler_table_on_init_set(void * jarg1, void * jarg2) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t arg2 = (switch_state_handler_t) 0 ; + + arg1 = (switch_state_handler_table *)jarg1; + arg2 = (switch_state_handler_t)jarg2; + if (arg1) (arg1)->on_init = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_state_handler_table_on_init_get(void * jarg1) { + void * jresult ; + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t result; + + arg1 = (switch_state_handler_table *)jarg1; + result = (switch_state_handler_t) ((arg1)->on_init); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_state_handler_table_on_routing_set(void * jarg1, void * jarg2) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t arg2 = (switch_state_handler_t) 0 ; + + arg1 = (switch_state_handler_table *)jarg1; + arg2 = (switch_state_handler_t)jarg2; + if (arg1) (arg1)->on_routing = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_state_handler_table_on_routing_get(void * jarg1) { + void * jresult ; + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t result; + + arg1 = (switch_state_handler_table *)jarg1; + result = (switch_state_handler_t) ((arg1)->on_routing); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_state_handler_table_on_execute_set(void * jarg1, void * jarg2) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t arg2 = (switch_state_handler_t) 0 ; + + arg1 = (switch_state_handler_table *)jarg1; + arg2 = (switch_state_handler_t)jarg2; + if (arg1) (arg1)->on_execute = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_state_handler_table_on_execute_get(void * jarg1) { + void * jresult ; + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t result; + + arg1 = (switch_state_handler_table *)jarg1; + result = (switch_state_handler_t) ((arg1)->on_execute); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_state_handler_table_on_hangup_set(void * jarg1, void * jarg2) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t arg2 = (switch_state_handler_t) 0 ; + + arg1 = (switch_state_handler_table *)jarg1; + arg2 = (switch_state_handler_t)jarg2; + if (arg1) (arg1)->on_hangup = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_state_handler_table_on_hangup_get(void * jarg1) { + void * jresult ; + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t result; + + arg1 = (switch_state_handler_table *)jarg1; + result = (switch_state_handler_t) ((arg1)->on_hangup); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_state_handler_table_on_exchange_media_set(void * jarg1, void * jarg2) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t arg2 = (switch_state_handler_t) 0 ; + + arg1 = (switch_state_handler_table *)jarg1; + arg2 = (switch_state_handler_t)jarg2; + if (arg1) (arg1)->on_exchange_media = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_state_handler_table_on_exchange_media_get(void * jarg1) { + void * jresult ; + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t result; + + arg1 = (switch_state_handler_table *)jarg1; + result = (switch_state_handler_t) ((arg1)->on_exchange_media); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_state_handler_table_on_soft_execute_set(void * jarg1, void * jarg2) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t arg2 = (switch_state_handler_t) 0 ; + + arg1 = (switch_state_handler_table *)jarg1; + arg2 = (switch_state_handler_t)jarg2; + if (arg1) (arg1)->on_soft_execute = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_state_handler_table_on_soft_execute_get(void * jarg1) { + void * jresult ; + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t result; + + arg1 = (switch_state_handler_table *)jarg1; + result = (switch_state_handler_t) ((arg1)->on_soft_execute); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_state_handler_table_on_consume_media_set(void * jarg1, void * jarg2) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t arg2 = (switch_state_handler_t) 0 ; + + arg1 = (switch_state_handler_table *)jarg1; + arg2 = (switch_state_handler_t)jarg2; + if (arg1) (arg1)->on_consume_media = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_state_handler_table_on_consume_media_get(void * jarg1) { + void * jresult ; + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t result; + + arg1 = (switch_state_handler_table *)jarg1; + result = (switch_state_handler_t) ((arg1)->on_consume_media); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_state_handler_table_on_hibernate_set(void * jarg1, void * jarg2) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t arg2 = (switch_state_handler_t) 0 ; + + arg1 = (switch_state_handler_table *)jarg1; + arg2 = (switch_state_handler_t)jarg2; + if (arg1) (arg1)->on_hibernate = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_state_handler_table_on_hibernate_get(void * jarg1) { + void * jresult ; + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t result; + + arg1 = (switch_state_handler_table *)jarg1; + result = (switch_state_handler_t) ((arg1)->on_hibernate); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_state_handler_table_on_reset_set(void * jarg1, void * jarg2) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t arg2 = (switch_state_handler_t) 0 ; + + arg1 = (switch_state_handler_table *)jarg1; + arg2 = (switch_state_handler_t)jarg2; + if (arg1) (arg1)->on_reset = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_state_handler_table_on_reset_get(void * jarg1) { + void * jresult ; + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t result; + + arg1 = (switch_state_handler_table *)jarg1; + result = (switch_state_handler_t) ((arg1)->on_reset); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_state_handler_table_on_park_set(void * jarg1, void * jarg2) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t arg2 = (switch_state_handler_t) 0 ; + + arg1 = (switch_state_handler_table *)jarg1; + arg2 = (switch_state_handler_t)jarg2; + if (arg1) (arg1)->on_park = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_state_handler_table_on_park_get(void * jarg1) { + void * jresult ; + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t result; + + arg1 = (switch_state_handler_table *)jarg1; + result = (switch_state_handler_t) ((arg1)->on_park); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_state_handler_table_on_reporting_set(void * jarg1, void * jarg2) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t arg2 = (switch_state_handler_t) 0 ; + + arg1 = (switch_state_handler_table *)jarg1; + arg2 = (switch_state_handler_t)jarg2; + if (arg1) (arg1)->on_reporting = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_state_handler_table_on_reporting_get(void * jarg1) { + void * jresult ; + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t result; + + arg1 = (switch_state_handler_table *)jarg1; + result = (switch_state_handler_t) ((arg1)->on_reporting); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_state_handler_table_on_destroy_set(void * jarg1, void * jarg2) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t arg2 = (switch_state_handler_t) 0 ; + + arg1 = (switch_state_handler_table *)jarg1; + arg2 = (switch_state_handler_t)jarg2; + if (arg1) (arg1)->on_destroy = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_state_handler_table_on_destroy_get(void * jarg1) { + void * jresult ; + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + switch_state_handler_t result; + + arg1 = (switch_state_handler_table *)jarg1; + result = (switch_state_handler_t) ((arg1)->on_destroy); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_state_handler_table_flags_set(void * jarg1, int jarg2) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + int arg2 ; + + arg1 = (switch_state_handler_table *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_state_handler_table_flags_get(void * jarg1) { + int jresult ; + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + int result; + + arg1 = (switch_state_handler_table *)jarg1; + result = (int) ((arg1)->flags); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_state_handler_table_padding_set(void * jarg1, void * jarg2) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + void **arg2 ; + + arg1 = (switch_state_handler_table *)jarg1; + arg2 = (void **)jarg2; + { + size_t ii; + void * *b = (void * *) arg1->padding; + for (ii = 0; ii < (size_t)10; ii++) b[ii] = *((void * *) arg2 + ii); + } +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_state_handler_table_padding_get(void * jarg1) { + void * jresult ; + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + void **result = 0 ; + + arg1 = (switch_state_handler_table *)jarg1; + result = (void **)(void **) ((arg1)->padding); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_state_handler_table() { + void * jresult ; + switch_state_handler_table *result = 0 ; + + result = (switch_state_handler_table *)new switch_state_handler_table(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_state_handler_table(void * jarg1) { + switch_state_handler_table *arg1 = (switch_state_handler_table *) 0 ; + + arg1 = (switch_state_handler_table *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_stream_handle_write_function_set(void * jarg1, void * jarg2) { + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + switch_stream_handle_write_function_t arg2 = (switch_stream_handle_write_function_t) 0 ; + + arg1 = (switch_stream_handle *)jarg1; + arg2 = (switch_stream_handle_write_function_t)jarg2; + if (arg1) (arg1)->write_function = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_stream_handle_write_function_get(void * jarg1) { + void * jresult ; + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + switch_stream_handle_write_function_t result; + + arg1 = (switch_stream_handle *)jarg1; + result = (switch_stream_handle_write_function_t) ((arg1)->write_function); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_stream_handle_raw_write_function_set(void * jarg1, void * jarg2) { + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + switch_stream_handle_raw_write_function_t arg2 = (switch_stream_handle_raw_write_function_t) 0 ; + + arg1 = (switch_stream_handle *)jarg1; + arg2 = (switch_stream_handle_raw_write_function_t)jarg2; + if (arg1) (arg1)->raw_write_function = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_stream_handle_raw_write_function_get(void * jarg1) { + void * jresult ; + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + switch_stream_handle_raw_write_function_t result; + + arg1 = (switch_stream_handle *)jarg1; + result = (switch_stream_handle_raw_write_function_t) ((arg1)->raw_write_function); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_stream_handle_data_set(void * jarg1, void * jarg2) { + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_stream_handle *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->data = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_stream_handle_data_get(void * jarg1) { + void * jresult ; + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + void *result = 0 ; + + arg1 = (switch_stream_handle *)jarg1; + result = (void *) ((arg1)->data); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_stream_handle_end_set(void * jarg1, void * jarg2) { + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_stream_handle *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->end = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_stream_handle_end_get(void * jarg1) { + void * jresult ; + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + void *result = 0 ; + + arg1 = (switch_stream_handle *)jarg1; + result = (void *) ((arg1)->end); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_stream_handle_data_size_set(void * jarg1, void * jarg2) { + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_stream_handle *)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)->data_size = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_stream_handle_data_size_get(void * jarg1) { + void * jresult ; + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + switch_size_t result; + + arg1 = (switch_stream_handle *)jarg1; + result = ((arg1)->data_size); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_stream_handle_data_len_set(void * jarg1, void * jarg2) { + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_stream_handle *)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)->data_len = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_stream_handle_data_len_get(void * jarg1) { + void * jresult ; + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + switch_size_t result; + + arg1 = (switch_stream_handle *)jarg1; + result = ((arg1)->data_len); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_stream_handle_alloc_len_set(void * jarg1, void * jarg2) { + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_stream_handle *)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)->alloc_len = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_stream_handle_alloc_len_get(void * jarg1) { + void * jresult ; + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + switch_size_t result; + + arg1 = (switch_stream_handle *)jarg1; + result = ((arg1)->alloc_len); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_stream_handle_alloc_chunk_set(void * jarg1, void * jarg2) { + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_stream_handle *)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)->alloc_chunk = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_stream_handle_alloc_chunk_get(void * jarg1) { + void * jresult ; + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + switch_size_t result; + + arg1 = (switch_stream_handle *)jarg1; + result = ((arg1)->alloc_chunk); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_stream_handle_param_event_set(void * jarg1, void * jarg2) { + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + switch_event_t *arg2 = (switch_event_t *) 0 ; + + arg1 = (switch_stream_handle *)jarg1; + arg2 = (switch_event_t *)jarg2; + if (arg1) (arg1)->param_event = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_stream_handle_param_event_get(void * jarg1) { + void * jresult ; + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + switch_event_t *result = 0 ; + + arg1 = (switch_stream_handle *)jarg1; + result = (switch_event_t *) ((arg1)->param_event); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_stream_handle() { + void * jresult ; + switch_stream_handle *result = 0 ; + + result = (switch_stream_handle *)new switch_stream_handle(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_stream_handle(void * jarg1) { + switch_stream_handle *arg1 = (switch_stream_handle *) 0 ; + + arg1 = (switch_stream_handle *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_routines_outgoing_channel_set(void * jarg1, void * jarg2) { + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_outgoing_channel_t arg2 = (switch_io_outgoing_channel_t) 0 ; + + arg1 = (switch_io_routines *)jarg1; + arg2 = (switch_io_outgoing_channel_t)jarg2; + if (arg1) (arg1)->outgoing_channel = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_routines_outgoing_channel_get(void * jarg1) { + void * jresult ; + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_outgoing_channel_t result; + + arg1 = (switch_io_routines *)jarg1; + result = (switch_io_outgoing_channel_t) ((arg1)->outgoing_channel); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_routines_read_frame_set(void * jarg1, void * jarg2) { + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_read_frame_t arg2 = (switch_io_read_frame_t) 0 ; + + arg1 = (switch_io_routines *)jarg1; + arg2 = (switch_io_read_frame_t)jarg2; + if (arg1) (arg1)->read_frame = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_routines_read_frame_get(void * jarg1) { + void * jresult ; + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_read_frame_t result; + + arg1 = (switch_io_routines *)jarg1; + result = (switch_io_read_frame_t) ((arg1)->read_frame); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_routines_write_frame_set(void * jarg1, void * jarg2) { + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_write_frame_t arg2 = (switch_io_write_frame_t) 0 ; + + arg1 = (switch_io_routines *)jarg1; + arg2 = (switch_io_write_frame_t)jarg2; + if (arg1) (arg1)->write_frame = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_routines_write_frame_get(void * jarg1) { + void * jresult ; + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_write_frame_t result; + + arg1 = (switch_io_routines *)jarg1; + result = (switch_io_write_frame_t) ((arg1)->write_frame); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_routines_kill_channel_set(void * jarg1, void * jarg2) { + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_kill_channel_t arg2 = (switch_io_kill_channel_t) 0 ; + + arg1 = (switch_io_routines *)jarg1; + arg2 = (switch_io_kill_channel_t)jarg2; + if (arg1) (arg1)->kill_channel = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_routines_kill_channel_get(void * jarg1) { + void * jresult ; + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_kill_channel_t result; + + arg1 = (switch_io_routines *)jarg1; + result = (switch_io_kill_channel_t) ((arg1)->kill_channel); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_routines_send_dtmf_set(void * jarg1, void * jarg2) { + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_send_dtmf_t arg2 = (switch_io_send_dtmf_t) 0 ; + + arg1 = (switch_io_routines *)jarg1; + arg2 = (switch_io_send_dtmf_t)jarg2; + if (arg1) (arg1)->send_dtmf = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_routines_send_dtmf_get(void * jarg1) { + void * jresult ; + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_send_dtmf_t result; + + arg1 = (switch_io_routines *)jarg1; + result = (switch_io_send_dtmf_t) ((arg1)->send_dtmf); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_routines_receive_message_set(void * jarg1, void * jarg2) { + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_receive_message_t arg2 = (switch_io_receive_message_t) 0 ; + + arg1 = (switch_io_routines *)jarg1; + arg2 = (switch_io_receive_message_t)jarg2; + if (arg1) (arg1)->receive_message = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_routines_receive_message_get(void * jarg1) { + void * jresult ; + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_receive_message_t result; + + arg1 = (switch_io_routines *)jarg1; + result = (switch_io_receive_message_t) ((arg1)->receive_message); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_routines_receive_event_set(void * jarg1, void * jarg2) { + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_receive_event_t arg2 = (switch_io_receive_event_t) 0 ; + + arg1 = (switch_io_routines *)jarg1; + arg2 = (switch_io_receive_event_t)jarg2; + if (arg1) (arg1)->receive_event = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_routines_receive_event_get(void * jarg1) { + void * jresult ; + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_receive_event_t result; + + arg1 = (switch_io_routines *)jarg1; + result = (switch_io_receive_event_t) ((arg1)->receive_event); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_routines_state_change_set(void * jarg1, void * jarg2) { + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_state_change_t arg2 = (switch_io_state_change_t) 0 ; + + arg1 = (switch_io_routines *)jarg1; + arg2 = (switch_io_state_change_t)jarg2; + if (arg1) (arg1)->state_change = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_routines_state_change_get(void * jarg1) { + void * jresult ; + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_state_change_t result; + + arg1 = (switch_io_routines *)jarg1; + result = (switch_io_state_change_t) ((arg1)->state_change); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_routines_read_video_frame_set(void * jarg1, void * jarg2) { + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_read_video_frame_t arg2 = (switch_io_read_video_frame_t) 0 ; + + arg1 = (switch_io_routines *)jarg1; + arg2 = (switch_io_read_video_frame_t)jarg2; + if (arg1) (arg1)->read_video_frame = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_routines_read_video_frame_get(void * jarg1) { + void * jresult ; + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_read_video_frame_t result; + + arg1 = (switch_io_routines *)jarg1; + result = (switch_io_read_video_frame_t) ((arg1)->read_video_frame); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_routines_write_video_frame_set(void * jarg1, void * jarg2) { + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_write_video_frame_t arg2 = (switch_io_write_video_frame_t) 0 ; + + arg1 = (switch_io_routines *)jarg1; + arg2 = (switch_io_write_video_frame_t)jarg2; + if (arg1) (arg1)->write_video_frame = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_routines_write_video_frame_get(void * jarg1) { + void * jresult ; + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_write_video_frame_t result; + + arg1 = (switch_io_routines *)jarg1; + result = (switch_io_write_video_frame_t) ((arg1)->write_video_frame); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_routines_resurrect_session_set(void * jarg1, void * jarg2) { + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_resurrect_session_t arg2 = (switch_io_resurrect_session_t) 0 ; + + arg1 = (switch_io_routines *)jarg1; + arg2 = (switch_io_resurrect_session_t)jarg2; + if (arg1) (arg1)->resurrect_session = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_routines_resurrect_session_get(void * jarg1) { + void * jresult ; + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + switch_io_resurrect_session_t result; + + arg1 = (switch_io_routines *)jarg1; + result = (switch_io_resurrect_session_t) ((arg1)->resurrect_session); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_routines_padding_set(void * jarg1, void * jarg2) { + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + void **arg2 ; + + arg1 = (switch_io_routines *)jarg1; + arg2 = (void **)jarg2; + { + size_t ii; + void * *b = (void * *) arg1->padding; + for (ii = 0; ii < (size_t)10; ii++) b[ii] = *((void * *) arg2 + ii); + } +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_routines_padding_get(void * jarg1) { + void * jresult ; + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + void **result = 0 ; + + arg1 = (switch_io_routines *)jarg1; + result = (void **)(void **) ((arg1)->padding); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_io_routines() { + void * jresult ; + switch_io_routines *result = 0 ; + + result = (switch_io_routines *)new switch_io_routines(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_io_routines(void * jarg1) { + switch_io_routines *arg1 = (switch_io_routines *) 0 ; + + arg1 = (switch_io_routines *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_endpoint_interface_interface_name_set(void * jarg1, char * jarg2) { + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->interface_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->interface_name, (const char *)arg2); + } else { + arg1->interface_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_endpoint_interface_interface_name_get(void * jarg1) { + char * jresult ; + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + result = (char *) ((arg1)->interface_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_endpoint_interface_io_routines_set(void * jarg1, void * jarg2) { + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + switch_io_routines_t *arg2 = (switch_io_routines_t *) 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + arg2 = (switch_io_routines_t *)jarg2; + if (arg1) (arg1)->io_routines = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_endpoint_interface_io_routines_get(void * jarg1) { + void * jresult ; + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + switch_io_routines_t *result = 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + result = (switch_io_routines_t *) ((arg1)->io_routines); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_endpoint_interface_state_handler_set(void * jarg1, void * jarg2) { + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + switch_state_handler_table_t *arg2 = (switch_state_handler_table_t *) 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + arg2 = (switch_state_handler_table_t *)jarg2; + if (arg1) (arg1)->state_handler = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_endpoint_interface_state_handler_get(void * jarg1) { + void * jresult ; + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + switch_state_handler_table_t *result = 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + result = (switch_state_handler_table_t *) ((arg1)->state_handler); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_endpoint_interface_private_info_set(void * jarg1, void * jarg2) { + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->private_info = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_endpoint_interface_private_info_get(void * jarg1) { + void * jresult ; + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + void *result = 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + result = (void *) ((arg1)->private_info); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_endpoint_interface_rwlock_set(void * jarg1, void * jarg2) { + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + arg2 = (switch_thread_rwlock_t *)jarg2; + if (arg1) (arg1)->rwlock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_endpoint_interface_rwlock_get(void * jarg1) { + void * jresult ; + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + switch_thread_rwlock_t *result = 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + result = (switch_thread_rwlock_t *) ((arg1)->rwlock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_endpoint_interface_refs_set(void * jarg1, int jarg2) { + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + int arg2 ; + + arg1 = (switch_endpoint_interface *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->refs = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_endpoint_interface_refs_get(void * jarg1) { + int jresult ; + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + int result; + + arg1 = (switch_endpoint_interface *)jarg1; + result = (int) ((arg1)->refs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_endpoint_interface_reflock_set(void * jarg1, void * jarg2) { + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->reflock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_endpoint_interface_reflock_get(void * jarg1) { + void * jresult ; + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + result = (switch_mutex_t *) ((arg1)->reflock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_endpoint_interface_parent_set(void * jarg1, void * jarg2) { + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + switch_loadable_module_interface_t *arg2 = (switch_loadable_module_interface_t *) 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + arg2 = (switch_loadable_module_interface_t *)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_endpoint_interface_parent_get(void * jarg1) { + void * jresult ; + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + result = (switch_loadable_module_interface_t *) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_endpoint_interface_next_set(void * jarg1, void * jarg2) { + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + switch_endpoint_interface *arg2 = (switch_endpoint_interface *) 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + arg2 = (switch_endpoint_interface *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_endpoint_interface_next_get(void * jarg1) { + void * jresult ; + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + switch_endpoint_interface *result = 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + result = (switch_endpoint_interface *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_endpoint_interface() { + void * jresult ; + switch_endpoint_interface *result = 0 ; + + result = (switch_endpoint_interface *)new switch_endpoint_interface(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_endpoint_interface(void * jarg1) { + switch_endpoint_interface *arg1 = (switch_endpoint_interface *) 0 ; + + arg1 = (switch_endpoint_interface *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_interval_set(void * jarg1, int jarg2) { + switch_timer *arg1 = (switch_timer *) 0 ; + int arg2 ; + + arg1 = (switch_timer *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->interval = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_timer_interval_get(void * jarg1) { + int jresult ; + switch_timer *arg1 = (switch_timer *) 0 ; + int result; + + arg1 = (switch_timer *)jarg1; + result = (int) ((arg1)->interval); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_flags_set(void * jarg1, unsigned long jarg2) { + switch_timer *arg1 = (switch_timer *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_timer *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_timer_flags_get(void * jarg1) { + unsigned long jresult ; + switch_timer *arg1 = (switch_timer *) 0 ; + uint32_t result; + + arg1 = (switch_timer *)jarg1; + result = (uint32_t) ((arg1)->flags); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_samples_set(void * jarg1, unsigned int jarg2) { + switch_timer *arg1 = (switch_timer *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_timer *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->samples = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_timer_samples_get(void * jarg1) { + unsigned int jresult ; + switch_timer *arg1 = (switch_timer *) 0 ; + unsigned int result; + + arg1 = (switch_timer *)jarg1; + result = (unsigned int) ((arg1)->samples); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_samplecount_set(void * jarg1, unsigned long jarg2) { + switch_timer *arg1 = (switch_timer *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_timer *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->samplecount = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_timer_samplecount_get(void * jarg1) { + unsigned long jresult ; + switch_timer *arg1 = (switch_timer *) 0 ; + uint32_t result; + + arg1 = (switch_timer *)jarg1; + result = (uint32_t) ((arg1)->samplecount); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_timer_interface_set(void * jarg1, void * jarg2) { + switch_timer *arg1 = (switch_timer *) 0 ; + switch_timer_interface_t *arg2 = (switch_timer_interface_t *) 0 ; + + arg1 = (switch_timer *)jarg1; + arg2 = (switch_timer_interface_t *)jarg2; + if (arg1) (arg1)->timer_interface = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_timer_interface_get(void * jarg1) { + void * jresult ; + switch_timer *arg1 = (switch_timer *) 0 ; + switch_timer_interface_t *result = 0 ; + + arg1 = (switch_timer *)jarg1; + result = (switch_timer_interface_t *) ((arg1)->timer_interface); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_memory_pool_set(void * jarg1, void * jarg2) { + switch_timer *arg1 = (switch_timer *) 0 ; + switch_memory_pool_t *arg2 = (switch_memory_pool_t *) 0 ; + + arg1 = (switch_timer *)jarg1; + arg2 = (switch_memory_pool_t *)jarg2; + if (arg1) (arg1)->memory_pool = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_memory_pool_get(void * jarg1) { + void * jresult ; + switch_timer *arg1 = (switch_timer *) 0 ; + switch_memory_pool_t *result = 0 ; + + arg1 = (switch_timer *)jarg1; + result = (switch_memory_pool_t *) ((arg1)->memory_pool); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_private_info_set(void * jarg1, void * jarg2) { + switch_timer *arg1 = (switch_timer *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_timer *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->private_info = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_private_info_get(void * jarg1) { + void * jresult ; + switch_timer *arg1 = (switch_timer *) 0 ; + void *result = 0 ; + + arg1 = (switch_timer *)jarg1; + result = (void *) ((arg1)->private_info); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_diff_set(void * jarg1, void * jarg2) { + switch_timer *arg1 = (switch_timer *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_timer *)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)->diff = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_diff_get(void * jarg1) { + void * jresult ; + switch_timer *arg1 = (switch_timer *) 0 ; + switch_size_t result; + + arg1 = (switch_timer *)jarg1; + result = ((arg1)->diff); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_tick_set(void * jarg1, void * jarg2) { + switch_timer *arg1 = (switch_timer *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_timer *)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)->tick = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_tick_get(void * jarg1) { + void * jresult ; + switch_timer *arg1 = (switch_timer *) 0 ; + switch_size_t result; + + arg1 = (switch_timer *)jarg1; + result = ((arg1)->tick); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_timer() { + void * jresult ; + switch_timer *result = 0 ; + + result = (switch_timer *)new switch_timer(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_timer(void * jarg1) { + switch_timer *arg1 = (switch_timer *) 0 ; + + arg1 = (switch_timer *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_interface_interface_name_set(void * jarg1, char * jarg2) { + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_timer_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->interface_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->interface_name, (const char *)arg2); + } else { + arg1->interface_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_timer_interface_interface_name_get(void * jarg1) { + char * jresult ; + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_timer_interface *)jarg1; + result = (char *) ((arg1)->interface_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_interface_timer_init_set(void * jarg1, void * jarg2) { + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_status_t (*arg2)(switch_timer_t *) = (switch_status_t (*)(switch_timer_t *)) 0 ; + + arg1 = (switch_timer_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_timer_t *))jarg2; + if (arg1) (arg1)->timer_init = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_interface_timer_init_get(void * jarg1) { + void * jresult ; + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_status_t (*result)(switch_timer_t *) = 0 ; + + arg1 = (switch_timer_interface *)jarg1; + result = (switch_status_t (*)(switch_timer_t *)) ((arg1)->timer_init); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_interface_timer_next_set(void * jarg1, void * jarg2) { + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_status_t (*arg2)(switch_timer_t *) = (switch_status_t (*)(switch_timer_t *)) 0 ; + + arg1 = (switch_timer_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_timer_t *))jarg2; + if (arg1) (arg1)->timer_next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_interface_timer_next_get(void * jarg1) { + void * jresult ; + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_status_t (*result)(switch_timer_t *) = 0 ; + + arg1 = (switch_timer_interface *)jarg1; + result = (switch_status_t (*)(switch_timer_t *)) ((arg1)->timer_next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_interface_timer_step_set(void * jarg1, void * jarg2) { + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_status_t (*arg2)(switch_timer_t *) = (switch_status_t (*)(switch_timer_t *)) 0 ; + + arg1 = (switch_timer_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_timer_t *))jarg2; + if (arg1) (arg1)->timer_step = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_interface_timer_step_get(void * jarg1) { + void * jresult ; + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_status_t (*result)(switch_timer_t *) = 0 ; + + arg1 = (switch_timer_interface *)jarg1; + result = (switch_status_t (*)(switch_timer_t *)) ((arg1)->timer_step); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_interface_timer_sync_set(void * jarg1, void * jarg2) { + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_status_t (*arg2)(switch_timer_t *) = (switch_status_t (*)(switch_timer_t *)) 0 ; + + arg1 = (switch_timer_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_timer_t *))jarg2; + if (arg1) (arg1)->timer_sync = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_interface_timer_sync_get(void * jarg1) { + void * jresult ; + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_status_t (*result)(switch_timer_t *) = 0 ; + + arg1 = (switch_timer_interface *)jarg1; + result = (switch_status_t (*)(switch_timer_t *)) ((arg1)->timer_sync); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_interface_timer_check_set(void * jarg1, void * jarg2) { + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_status_t (*arg2)(switch_timer_t *,switch_bool_t) = (switch_status_t (*)(switch_timer_t *,switch_bool_t)) 0 ; + + arg1 = (switch_timer_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_timer_t *,switch_bool_t))jarg2; + if (arg1) (arg1)->timer_check = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_interface_timer_check_get(void * jarg1) { + void * jresult ; + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_status_t (*result)(switch_timer_t *,switch_bool_t) = 0 ; + + arg1 = (switch_timer_interface *)jarg1; + result = (switch_status_t (*)(switch_timer_t *,switch_bool_t)) ((arg1)->timer_check); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_interface_timer_destroy_set(void * jarg1, void * jarg2) { + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_status_t (*arg2)(switch_timer_t *) = (switch_status_t (*)(switch_timer_t *)) 0 ; + + arg1 = (switch_timer_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_timer_t *))jarg2; + if (arg1) (arg1)->timer_destroy = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_interface_timer_destroy_get(void * jarg1) { + void * jresult ; + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_status_t (*result)(switch_timer_t *) = 0 ; + + arg1 = (switch_timer_interface *)jarg1; + result = (switch_status_t (*)(switch_timer_t *)) ((arg1)->timer_destroy); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_interface_rwlock_set(void * jarg1, void * jarg2) { + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; + + arg1 = (switch_timer_interface *)jarg1; + arg2 = (switch_thread_rwlock_t *)jarg2; + if (arg1) (arg1)->rwlock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_interface_rwlock_get(void * jarg1) { + void * jresult ; + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_thread_rwlock_t *result = 0 ; + + arg1 = (switch_timer_interface *)jarg1; + result = (switch_thread_rwlock_t *) ((arg1)->rwlock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_interface_refs_set(void * jarg1, int jarg2) { + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + int arg2 ; + + arg1 = (switch_timer_interface *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->refs = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_timer_interface_refs_get(void * jarg1) { + int jresult ; + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + int result; + + arg1 = (switch_timer_interface *)jarg1; + result = (int) ((arg1)->refs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_interface_reflock_set(void * jarg1, void * jarg2) { + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_timer_interface *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->reflock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_interface_reflock_get(void * jarg1) { + void * jresult ; + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_timer_interface *)jarg1; + result = (switch_mutex_t *) ((arg1)->reflock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_interface_parent_set(void * jarg1, void * jarg2) { + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_loadable_module_interface_t *arg2 = (switch_loadable_module_interface_t *) 0 ; + + arg1 = (switch_timer_interface *)jarg1; + arg2 = (switch_loadable_module_interface_t *)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_interface_parent_get(void * jarg1) { + void * jresult ; + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_timer_interface *)jarg1; + result = (switch_loadable_module_interface_t *) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_timer_interface_next_set(void * jarg1, void * jarg2) { + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_timer_interface *arg2 = (switch_timer_interface *) 0 ; + + arg1 = (switch_timer_interface *)jarg1; + arg2 = (switch_timer_interface *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_timer_interface_next_get(void * jarg1) { + void * jresult ; + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + switch_timer_interface *result = 0 ; + + arg1 = (switch_timer_interface *)jarg1; + result = (switch_timer_interface *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_timer_interface() { + void * jresult ; + switch_timer_interface *result = 0 ; + + result = (switch_timer_interface *)new switch_timer_interface(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_timer_interface(void * jarg1) { + switch_timer_interface *arg1 = (switch_timer_interface *) 0 ; + + arg1 = (switch_timer_interface *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_dialplan_interface_interface_name_set(void * jarg1, char * jarg2) { + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_dialplan_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->interface_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->interface_name, (const char *)arg2); + } else { + arg1->interface_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_dialplan_interface_interface_name_get(void * jarg1) { + char * jresult ; + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_dialplan_interface *)jarg1; + result = (char *) ((arg1)->interface_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_dialplan_interface_hunt_function_set(void * jarg1, void * jarg2) { + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + switch_dialplan_hunt_function_t arg2 = (switch_dialplan_hunt_function_t) 0 ; + + arg1 = (switch_dialplan_interface *)jarg1; + arg2 = (switch_dialplan_hunt_function_t)jarg2; + if (arg1) (arg1)->hunt_function = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_dialplan_interface_hunt_function_get(void * jarg1) { + void * jresult ; + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + switch_dialplan_hunt_function_t result; + + arg1 = (switch_dialplan_interface *)jarg1; + result = (switch_dialplan_hunt_function_t) ((arg1)->hunt_function); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_dialplan_interface_rwlock_set(void * jarg1, void * jarg2) { + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; + + arg1 = (switch_dialplan_interface *)jarg1; + arg2 = (switch_thread_rwlock_t *)jarg2; + if (arg1) (arg1)->rwlock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_dialplan_interface_rwlock_get(void * jarg1) { + void * jresult ; + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + switch_thread_rwlock_t *result = 0 ; + + arg1 = (switch_dialplan_interface *)jarg1; + result = (switch_thread_rwlock_t *) ((arg1)->rwlock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_dialplan_interface_refs_set(void * jarg1, int jarg2) { + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + int arg2 ; + + arg1 = (switch_dialplan_interface *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->refs = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_dialplan_interface_refs_get(void * jarg1) { + int jresult ; + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + int result; + + arg1 = (switch_dialplan_interface *)jarg1; + result = (int) ((arg1)->refs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_dialplan_interface_reflock_set(void * jarg1, void * jarg2) { + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_dialplan_interface *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->reflock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_dialplan_interface_reflock_get(void * jarg1) { + void * jresult ; + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_dialplan_interface *)jarg1; + result = (switch_mutex_t *) ((arg1)->reflock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_dialplan_interface_parent_set(void * jarg1, void * jarg2) { + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + switch_loadable_module_interface_t *arg2 = (switch_loadable_module_interface_t *) 0 ; + + arg1 = (switch_dialplan_interface *)jarg1; + arg2 = (switch_loadable_module_interface_t *)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_dialplan_interface_parent_get(void * jarg1) { + void * jresult ; + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_dialplan_interface *)jarg1; + result = (switch_loadable_module_interface_t *) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_dialplan_interface_next_set(void * jarg1, void * jarg2) { + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + switch_dialplan_interface *arg2 = (switch_dialplan_interface *) 0 ; + + arg1 = (switch_dialplan_interface *)jarg1; + arg2 = (switch_dialplan_interface *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_dialplan_interface_next_get(void * jarg1) { + void * jresult ; + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + switch_dialplan_interface *result = 0 ; + + arg1 = (switch_dialplan_interface *)jarg1; + result = (switch_dialplan_interface *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_dialplan_interface() { + void * jresult ; + switch_dialplan_interface *result = 0 ; + + result = (switch_dialplan_interface *)new switch_dialplan_interface(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_dialplan_interface(void * jarg1) { + switch_dialplan_interface *arg1 = (switch_dialplan_interface *) 0 ; + + arg1 = (switch_dialplan_interface *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_interface_name_set(void * jarg1, char * jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->interface_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->interface_name, (const char *)arg2); + } else { + arg1->interface_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_file_interface_interface_name_get(void * jarg1) { + char * jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_file_interface *)jarg1; + result = (char *) ((arg1)->interface_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_file_open_set(void * jarg1, void * jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*arg2)(switch_file_handle_t *,char const *) = (switch_status_t (*)(switch_file_handle_t *,char const *)) 0 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_file_handle_t *,char const *))jarg2; + if (arg1) (arg1)->file_open = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_interface_file_open_get(void * jarg1) { + void * jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*result)(switch_file_handle_t *,char const *) = 0 ; + + arg1 = (switch_file_interface *)jarg1; + result = (switch_status_t (*)(switch_file_handle_t *,char const *)) ((arg1)->file_open); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_file_close_set(void * jarg1, void * jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*arg2)(switch_file_handle_t *) = (switch_status_t (*)(switch_file_handle_t *)) 0 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_file_handle_t *))jarg2; + if (arg1) (arg1)->file_close = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_interface_file_close_get(void * jarg1) { + void * jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*result)(switch_file_handle_t *) = 0 ; + + arg1 = (switch_file_interface *)jarg1; + result = (switch_status_t (*)(switch_file_handle_t *)) ((arg1)->file_close); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_file_truncate_set(void * jarg1, void * jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*arg2)(switch_file_handle_t *,int64_t) = (switch_status_t (*)(switch_file_handle_t *,int64_t)) 0 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_file_handle_t *,int64_t))jarg2; + if (arg1) (arg1)->file_truncate = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_interface_file_truncate_get(void * jarg1) { + void * jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*result)(switch_file_handle_t *,int64_t) = 0 ; + + arg1 = (switch_file_interface *)jarg1; + result = (switch_status_t (*)(switch_file_handle_t *,int64_t)) ((arg1)->file_truncate); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_file_read_set(void * jarg1, void * jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*arg2)(switch_file_handle_t *,void *,switch_size_t *) = (switch_status_t (*)(switch_file_handle_t *,void *,switch_size_t *)) 0 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_file_handle_t *,void *,switch_size_t *))jarg2; + if (arg1) (arg1)->file_read = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_interface_file_read_get(void * jarg1) { + void * jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*result)(switch_file_handle_t *,void *,switch_size_t *) = 0 ; + + arg1 = (switch_file_interface *)jarg1; + result = (switch_status_t (*)(switch_file_handle_t *,void *,switch_size_t *)) ((arg1)->file_read); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_file_write_set(void * jarg1, void * jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*arg2)(switch_file_handle_t *,void *,switch_size_t *) = (switch_status_t (*)(switch_file_handle_t *,void *,switch_size_t *)) 0 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_file_handle_t *,void *,switch_size_t *))jarg2; + if (arg1) (arg1)->file_write = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_interface_file_write_get(void * jarg1) { + void * jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*result)(switch_file_handle_t *,void *,switch_size_t *) = 0 ; + + arg1 = (switch_file_interface *)jarg1; + result = (switch_status_t (*)(switch_file_handle_t *,void *,switch_size_t *)) ((arg1)->file_write); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_file_seek_set(void * jarg1, void * jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*arg2)(switch_file_handle_t *,unsigned int *,int64_t,int) = (switch_status_t (*)(switch_file_handle_t *,unsigned int *,int64_t,int)) 0 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_file_handle_t *,unsigned int *,int64_t,int))jarg2; + if (arg1) (arg1)->file_seek = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_interface_file_seek_get(void * jarg1) { + void * jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*result)(switch_file_handle_t *,unsigned int *,int64_t,int) = 0 ; + + arg1 = (switch_file_interface *)jarg1; + result = (switch_status_t (*)(switch_file_handle_t *,unsigned int *,int64_t,int)) ((arg1)->file_seek); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_file_set_string_set(void * jarg1, void * jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*arg2)(switch_file_handle_t *,switch_audio_col_t,char const *) = (switch_status_t (*)(switch_file_handle_t *,switch_audio_col_t,char const *)) 0 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_file_handle_t *,switch_audio_col_t,char const *))jarg2; + if (arg1) (arg1)->file_set_string = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_interface_file_set_string_get(void * jarg1) { + void * jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*result)(switch_file_handle_t *,switch_audio_col_t,char const *) = 0 ; + + arg1 = (switch_file_interface *)jarg1; + result = (switch_status_t (*)(switch_file_handle_t *,switch_audio_col_t,char const *)) ((arg1)->file_set_string); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_file_get_string_set(void * jarg1, void * jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*arg2)(switch_file_handle_t *,switch_audio_col_t,char const **) = (switch_status_t (*)(switch_file_handle_t *,switch_audio_col_t,char const **)) 0 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_file_handle_t *,switch_audio_col_t,char const **))jarg2; + if (arg1) (arg1)->file_get_string = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_interface_file_get_string_get(void * jarg1) { + void * jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_status_t (*result)(switch_file_handle_t *,switch_audio_col_t,char const **) = 0 ; + + arg1 = (switch_file_interface *)jarg1; + result = (switch_status_t (*)(switch_file_handle_t *,switch_audio_col_t,char const **)) ((arg1)->file_get_string); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_extens_set(void * jarg1, void * jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + char **arg2 = (char **) 0 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (char **)jarg2; + if (arg1) (arg1)->extens = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_interface_extens_get(void * jarg1) { + void * jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + char **result = 0 ; + + arg1 = (switch_file_interface *)jarg1; + result = (char **) ((arg1)->extens); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_rwlock_set(void * jarg1, void * jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (switch_thread_rwlock_t *)jarg2; + if (arg1) (arg1)->rwlock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_interface_rwlock_get(void * jarg1) { + void * jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_thread_rwlock_t *result = 0 ; + + arg1 = (switch_file_interface *)jarg1; + result = (switch_thread_rwlock_t *) ((arg1)->rwlock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_refs_set(void * jarg1, int jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + int arg2 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->refs = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_file_interface_refs_get(void * jarg1) { + int jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + int result; + + arg1 = (switch_file_interface *)jarg1; + result = (int) ((arg1)->refs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_reflock_set(void * jarg1, void * jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->reflock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_interface_reflock_get(void * jarg1) { + void * jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_file_interface *)jarg1; + result = (switch_mutex_t *) ((arg1)->reflock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_parent_set(void * jarg1, void * jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_loadable_module_interface_t *arg2 = (switch_loadable_module_interface_t *) 0 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (switch_loadable_module_interface_t *)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_interface_parent_get(void * jarg1) { + void * jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_file_interface *)jarg1; + result = (switch_loadable_module_interface_t *) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_interface_next_set(void * jarg1, void * jarg2) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_file_interface *arg2 = (switch_file_interface *) 0 ; + + arg1 = (switch_file_interface *)jarg1; + arg2 = (switch_file_interface *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_interface_next_get(void * jarg1) { + void * jresult ; + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + switch_file_interface *result = 0 ; + + arg1 = (switch_file_interface *)jarg1; + result = (switch_file_interface *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_file_interface() { + void * jresult ; + switch_file_interface *result = 0 ; + + result = (switch_file_interface *)new switch_file_interface(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_file_interface(void * jarg1) { + switch_file_interface *arg1 = (switch_file_interface *) 0 ; + + arg1 = (switch_file_interface *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_file_interface_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_file_interface_t *arg2 = (switch_file_interface_t *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (switch_file_interface_t *)jarg2; + if (arg1) (arg1)->file_interface = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_file_interface_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_file_interface_t *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (switch_file_interface_t *) ((arg1)->file_interface); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_flags_set(void * jarg1, unsigned long jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_file_handle_flags_get(void * jarg1) { + unsigned long jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t result; + + arg1 = (switch_file_handle *)jarg1; + result = (uint32_t) ((arg1)->flags); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_fd_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_file_t *arg2 = (switch_file_t *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (switch_file_t *)jarg2; + if (arg1) (arg1)->fd = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_fd_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_file_t *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (switch_file_t *) ((arg1)->fd); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_samples_set(void * jarg1, unsigned int jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->samples = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_file_handle_samples_get(void * jarg1) { + unsigned int jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + unsigned int result; + + arg1 = (switch_file_handle *)jarg1; + result = (unsigned int) ((arg1)->samples); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_samplerate_set(void * jarg1, unsigned long jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->samplerate = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_file_handle_samplerate_get(void * jarg1) { + unsigned long jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t result; + + arg1 = (switch_file_handle *)jarg1; + result = (uint32_t) ((arg1)->samplerate); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_native_rate_set(void * jarg1, unsigned long jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->native_rate = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_file_handle_native_rate_get(void * jarg1) { + unsigned long jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t result; + + arg1 = (switch_file_handle *)jarg1; + result = (uint32_t) ((arg1)->native_rate); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_channels_set(void * jarg1, unsigned char jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint8_t arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (uint8_t)jarg2; + if (arg1) (arg1)->channels = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_file_handle_channels_get(void * jarg1) { + unsigned char jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint8_t result; + + arg1 = (switch_file_handle *)jarg1; + result = (uint8_t) ((arg1)->channels); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_format_set(void * jarg1, unsigned int jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->format = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_file_handle_format_get(void * jarg1) { + unsigned int jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + unsigned int result; + + arg1 = (switch_file_handle *)jarg1; + result = (unsigned int) ((arg1)->format); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_sections_set(void * jarg1, unsigned int jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + unsigned int arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->sections = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_switch_file_handle_sections_get(void * jarg1) { + unsigned int jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + unsigned int result; + + arg1 = (switch_file_handle *)jarg1; + result = (unsigned int) ((arg1)->sections); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_seekable_set(void * jarg1, int jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + int arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->seekable = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_file_handle_seekable_get(void * jarg1) { + int jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + int result; + + arg1 = (switch_file_handle *)jarg1; + result = (int) ((arg1)->seekable); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_sample_count_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_file_handle *)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)->sample_count = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_sample_count_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_size_t result; + + arg1 = (switch_file_handle *)jarg1; + result = ((arg1)->sample_count); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_speed_set(void * jarg1, int jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + int arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->speed = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_file_handle_speed_get(void * jarg1) { + int jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + int result; + + arg1 = (switch_file_handle *)jarg1; + result = (int) ((arg1)->speed); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_memory_pool_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_memory_pool_t *arg2 = (switch_memory_pool_t *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (switch_memory_pool_t *)jarg2; + if (arg1) (arg1)->memory_pool = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_memory_pool_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_memory_pool_t *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (switch_memory_pool_t *) ((arg1)->memory_pool); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_prebuf_set(void * jarg1, unsigned long jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->prebuf = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_file_handle_prebuf_get(void * jarg1) { + unsigned long jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t result; + + arg1 = (switch_file_handle *)jarg1; + result = (uint32_t) ((arg1)->prebuf); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_interval_set(void * jarg1, unsigned long jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->interval = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_file_handle_interval_get(void * jarg1) { + unsigned long jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t result; + + arg1 = (switch_file_handle *)jarg1; + result = (uint32_t) ((arg1)->interval); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_private_info_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->private_info = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_private_info_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + void *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (void *) ((arg1)->private_info); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_handler_set(void * jarg1, char * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->handler) delete [] arg1->handler; + if (arg2) { + arg1->handler = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->handler, (const char *)arg2); + } else { + arg1->handler = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_file_handle_handler_get(void * jarg1) { + char * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + char *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (char *) ((arg1)->handler); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_pos_set(void * jarg1, long long jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + int64_t arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (int64_t)jarg2; + if (arg1) (arg1)->pos = arg2; +} + + +SWIGEXPORT long long SWIGSTDCALL CSharp_switch_file_handle_pos_get(void * jarg1) { + long long jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + int64_t result; + + arg1 = (switch_file_handle *)jarg1; + result = (int64_t) ((arg1)->pos); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_audio_buffer_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_buffer_t *arg2 = (switch_buffer_t *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (switch_buffer_t *)jarg2; + if (arg1) (arg1)->audio_buffer = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_audio_buffer_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_buffer_t *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (switch_buffer_t *) ((arg1)->audio_buffer); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_sp_audio_buffer_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_buffer_t *arg2 = (switch_buffer_t *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (switch_buffer_t *)jarg2; + if (arg1) (arg1)->sp_audio_buffer = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_sp_audio_buffer_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_buffer_t *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (switch_buffer_t *) ((arg1)->sp_audio_buffer); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_thresh_set(void * jarg1, unsigned long jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->thresh = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_file_handle_thresh_get(void * jarg1) { + unsigned long jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t result; + + arg1 = (switch_file_handle *)jarg1; + result = (uint32_t) ((arg1)->thresh); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_silence_hits_set(void * jarg1, unsigned long jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->silence_hits = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_file_handle_silence_hits_get(void * jarg1) { + unsigned long jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t result; + + arg1 = (switch_file_handle *)jarg1; + result = (uint32_t) ((arg1)->silence_hits); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_offset_pos_set(void * jarg1, unsigned long jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->offset_pos = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_file_handle_offset_pos_get(void * jarg1) { + unsigned long jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + uint32_t result; + + arg1 = (switch_file_handle *)jarg1; + result = (uint32_t) ((arg1)->offset_pos); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_samples_in_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_file_handle *)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)->samples_in = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_samples_in_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_size_t result; + + arg1 = (switch_file_handle *)jarg1; + result = ((arg1)->samples_in); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_samples_out_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_file_handle *)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)->samples_out = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_samples_out_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_size_t result; + + arg1 = (switch_file_handle *)jarg1; + result = ((arg1)->samples_out); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_vol_set(void * jarg1, int jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + int32_t arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (int32_t)jarg2; + if (arg1) (arg1)->vol = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_file_handle_vol_get(void * jarg1) { + int jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + int32_t result; + + arg1 = (switch_file_handle *)jarg1; + result = (int32_t) ((arg1)->vol); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_resampler_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_audio_resampler_t *arg2 = (switch_audio_resampler_t *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (switch_audio_resampler_t *)jarg2; + if (arg1) (arg1)->resampler = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_resampler_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_audio_resampler_t *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (switch_audio_resampler_t *) ((arg1)->resampler); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_buffer_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_buffer_t *arg2 = (switch_buffer_t *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (switch_buffer_t *)jarg2; + if (arg1) (arg1)->buffer = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_buffer_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_buffer_t *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (switch_buffer_t *) ((arg1)->buffer); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_dbuf_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_byte_t *arg2 = (switch_byte_t *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (switch_byte_t *)jarg2; + if (arg1) (arg1)->dbuf = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_dbuf_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_byte_t *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (switch_byte_t *) ((arg1)->dbuf); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_dbuflen_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_file_handle *)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)->dbuflen = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_dbuflen_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_size_t result; + + arg1 = (switch_file_handle *)jarg1; + result = ((arg1)->dbuflen); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_pre_buffer_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_buffer_t *arg2 = (switch_buffer_t *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (switch_buffer_t *)jarg2; + if (arg1) (arg1)->pre_buffer = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_pre_buffer_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_buffer_t *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (switch_buffer_t *) ((arg1)->pre_buffer); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_pre_buffer_data_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + unsigned char *arg2 = (unsigned char *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (unsigned char *)jarg2; + if (arg1) (arg1)->pre_buffer_data = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_pre_buffer_data_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + unsigned char *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (unsigned char *) ((arg1)->pre_buffer_data); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_pre_buffer_datalen_set(void * jarg1, void * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_file_handle *)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)->pre_buffer_datalen = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_file_handle_pre_buffer_datalen_get(void * jarg1) { + void * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + switch_size_t result; + + arg1 = (switch_file_handle *)jarg1; + result = ((arg1)->pre_buffer_datalen); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_file_set(void * jarg1, char * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->file = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->file, (const char *)arg2); + } else { + arg1->file = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_file_handle_file_get(void * jarg1) { + char * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + char *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (char *) ((arg1)->file); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_func_set(void * jarg1, char * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->func = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->func, (const char *)arg2); + } else { + arg1->func = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_file_handle_func_get(void * jarg1) { + char * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + char *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (char *) ((arg1)->func); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_line_set(void * jarg1, int jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + int arg2 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->line = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_file_handle_line_get(void * jarg1) { + int jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + int result; + + arg1 = (switch_file_handle *)jarg1; + result = (int) ((arg1)->line); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_file_path_set(void * jarg1, char * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->file_path) delete [] arg1->file_path; + if (arg2) { + arg1->file_path = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->file_path, (const char *)arg2); + } else { + arg1->file_path = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_file_handle_file_path_get(void * jarg1) { + char * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + char *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (char *) ((arg1)->file_path); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_spool_path_set(void * jarg1, char * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->spool_path) delete [] arg1->spool_path; + if (arg2) { + arg1->spool_path = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->spool_path, (const char *)arg2); + } else { + arg1->spool_path = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_file_handle_spool_path_get(void * jarg1) { + char * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + char *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (char *) ((arg1)->spool_path); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_file_handle_prefix_set(void * jarg1, char * jarg2) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->prefix = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->prefix, (const char *)arg2); + } else { + arg1->prefix = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_file_handle_prefix_get(void * jarg1) { + char * jresult ; + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + char *result = 0 ; + + arg1 = (switch_file_handle *)jarg1; + result = (char *) ((arg1)->prefix); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_file_handle() { + void * jresult ; + switch_file_handle *result = 0 ; + + result = (switch_file_handle *)new switch_file_handle(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_file_handle(void * jarg1) { + switch_file_handle *arg1 = (switch_file_handle *) 0 ; + + arg1 = (switch_file_handle *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_interface_name_set(void * jarg1, char * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->interface_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->interface_name, (const char *)arg2); + } else { + arg1->interface_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_asr_interface_interface_name_get(void * jarg1) { + char * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (char *) ((arg1)->interface_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_open_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*arg2)(switch_asr_handle_t *,char const *,int,char const *,switch_asr_flag_t *) = (switch_status_t (*)(switch_asr_handle_t *,char const *,int,char const *,switch_asr_flag_t *)) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_asr_handle_t *,char const *,int,char const *,switch_asr_flag_t *))jarg2; + if (arg1) (arg1)->asr_open = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_open_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*result)(switch_asr_handle_t *,char const *,int,char const *,switch_asr_flag_t *) = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (switch_status_t (*)(switch_asr_handle_t *,char const *,int,char const *,switch_asr_flag_t *)) ((arg1)->asr_open); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_load_grammar_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*arg2)(switch_asr_handle_t *,char const *,char const *) = (switch_status_t (*)(switch_asr_handle_t *,char const *,char const *)) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_asr_handle_t *,char const *,char const *))jarg2; + if (arg1) (arg1)->asr_load_grammar = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_load_grammar_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*result)(switch_asr_handle_t *,char const *,char const *) = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (switch_status_t (*)(switch_asr_handle_t *,char const *,char const *)) ((arg1)->asr_load_grammar); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_unload_grammar_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*arg2)(switch_asr_handle_t *,char const *) = (switch_status_t (*)(switch_asr_handle_t *,char const *)) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_asr_handle_t *,char const *))jarg2; + if (arg1) (arg1)->asr_unload_grammar = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_unload_grammar_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*result)(switch_asr_handle_t *,char const *) = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (switch_status_t (*)(switch_asr_handle_t *,char const *)) ((arg1)->asr_unload_grammar); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_close_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*arg2)(switch_asr_handle_t *,switch_asr_flag_t *) = (switch_status_t (*)(switch_asr_handle_t *,switch_asr_flag_t *)) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_asr_handle_t *,switch_asr_flag_t *))jarg2; + if (arg1) (arg1)->asr_close = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_close_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*result)(switch_asr_handle_t *,switch_asr_flag_t *) = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (switch_status_t (*)(switch_asr_handle_t *,switch_asr_flag_t *)) ((arg1)->asr_close); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_feed_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*arg2)(switch_asr_handle_t *,void *,unsigned int,switch_asr_flag_t *) = (switch_status_t (*)(switch_asr_handle_t *,void *,unsigned int,switch_asr_flag_t *)) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_asr_handle_t *,void *,unsigned int,switch_asr_flag_t *))jarg2; + if (arg1) (arg1)->asr_feed = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_feed_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*result)(switch_asr_handle_t *,void *,unsigned int,switch_asr_flag_t *) = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (switch_status_t (*)(switch_asr_handle_t *,void *,unsigned int,switch_asr_flag_t *)) ((arg1)->asr_feed); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_resume_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*arg2)(switch_asr_handle_t *) = (switch_status_t (*)(switch_asr_handle_t *)) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_asr_handle_t *))jarg2; + if (arg1) (arg1)->asr_resume = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_resume_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*result)(switch_asr_handle_t *) = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (switch_status_t (*)(switch_asr_handle_t *)) ((arg1)->asr_resume); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_pause_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*arg2)(switch_asr_handle_t *) = (switch_status_t (*)(switch_asr_handle_t *)) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_asr_handle_t *))jarg2; + if (arg1) (arg1)->asr_pause = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_pause_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*result)(switch_asr_handle_t *) = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (switch_status_t (*)(switch_asr_handle_t *)) ((arg1)->asr_pause); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_check_results_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*arg2)(switch_asr_handle_t *,switch_asr_flag_t *) = (switch_status_t (*)(switch_asr_handle_t *,switch_asr_flag_t *)) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_asr_handle_t *,switch_asr_flag_t *))jarg2; + if (arg1) (arg1)->asr_check_results = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_check_results_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*result)(switch_asr_handle_t *,switch_asr_flag_t *) = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (switch_status_t (*)(switch_asr_handle_t *,switch_asr_flag_t *)) ((arg1)->asr_check_results); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_get_results_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*arg2)(switch_asr_handle_t *,char **,switch_asr_flag_t *) = (switch_status_t (*)(switch_asr_handle_t *,char **,switch_asr_flag_t *)) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_asr_handle_t *,char **,switch_asr_flag_t *))jarg2; + if (arg1) (arg1)->asr_get_results = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_get_results_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*result)(switch_asr_handle_t *,char **,switch_asr_flag_t *) = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (switch_status_t (*)(switch_asr_handle_t *,char **,switch_asr_flag_t *)) ((arg1)->asr_get_results); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_start_input_timers_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*arg2)(switch_asr_handle_t *) = (switch_status_t (*)(switch_asr_handle_t *)) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_asr_handle_t *))jarg2; + if (arg1) (arg1)->asr_start_input_timers = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_start_input_timers_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_status_t (*result)(switch_asr_handle_t *) = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (switch_status_t (*)(switch_asr_handle_t *)) ((arg1)->asr_start_input_timers); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_text_param_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + void (*arg2)(switch_asr_handle_t *,char *,char const *) = (void (*)(switch_asr_handle_t *,char *,char const *)) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (void (*)(switch_asr_handle_t *,char *,char const *))jarg2; + if (arg1) (arg1)->asr_text_param = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_text_param_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + void (*result)(switch_asr_handle_t *,char *,char const *) = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (void (*)(switch_asr_handle_t *,char *,char const *)) ((arg1)->asr_text_param); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_numeric_param_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + void (*arg2)(switch_asr_handle_t *,char *,int) = (void (*)(switch_asr_handle_t *,char *,int)) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (void (*)(switch_asr_handle_t *,char *,int))jarg2; + if (arg1) (arg1)->asr_numeric_param = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_numeric_param_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + void (*result)(switch_asr_handle_t *,char *,int) = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (void (*)(switch_asr_handle_t *,char *,int)) ((arg1)->asr_numeric_param); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_asr_float_param_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + void (*arg2)(switch_asr_handle_t *,char *,double) = (void (*)(switch_asr_handle_t *,char *,double)) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (void (*)(switch_asr_handle_t *,char *,double))jarg2; + if (arg1) (arg1)->asr_float_param = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_asr_float_param_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + void (*result)(switch_asr_handle_t *,char *,double) = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (void (*)(switch_asr_handle_t *,char *,double)) ((arg1)->asr_float_param); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_rwlock_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (switch_thread_rwlock_t *)jarg2; + if (arg1) (arg1)->rwlock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_rwlock_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_thread_rwlock_t *result = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (switch_thread_rwlock_t *) ((arg1)->rwlock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_refs_set(void * jarg1, int jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + int arg2 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->refs = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_asr_interface_refs_get(void * jarg1) { + int jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + int result; + + arg1 = (switch_asr_interface *)jarg1; + result = (int) ((arg1)->refs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_reflock_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->reflock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_reflock_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (switch_mutex_t *) ((arg1)->reflock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_parent_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_loadable_module_interface_t *arg2 = (switch_loadable_module_interface_t *) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (switch_loadable_module_interface_t *)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_parent_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (switch_loadable_module_interface_t *) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_interface_next_set(void * jarg1, void * jarg2) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_asr_interface *arg2 = (switch_asr_interface *) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + arg2 = (switch_asr_interface *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_interface_next_get(void * jarg1) { + void * jresult ; + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + switch_asr_interface *result = 0 ; + + arg1 = (switch_asr_interface *)jarg1; + result = (switch_asr_interface *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_asr_interface() { + void * jresult ; + switch_asr_interface *result = 0 ; + + result = (switch_asr_interface *)new switch_asr_interface(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_asr_interface(void * jarg1) { + switch_asr_interface *arg1 = (switch_asr_interface *) 0 ; + + arg1 = (switch_asr_interface *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_handle_asr_interface_set(void * jarg1, void * jarg2) { + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + switch_asr_interface_t *arg2 = (switch_asr_interface_t *) 0 ; + + arg1 = (switch_asr_handle *)jarg1; + arg2 = (switch_asr_interface_t *)jarg2; + if (arg1) (arg1)->asr_interface = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_handle_asr_interface_get(void * jarg1) { + void * jresult ; + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + switch_asr_interface_t *result = 0 ; + + arg1 = (switch_asr_handle *)jarg1; + result = (switch_asr_interface_t *) ((arg1)->asr_interface); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_handle_flags_set(void * jarg1, unsigned long jarg2) { + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_asr_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_asr_handle_flags_get(void * jarg1) { + unsigned long jresult ; + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + uint32_t result; + + arg1 = (switch_asr_handle *)jarg1; + result = (uint32_t) ((arg1)->flags); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_handle_name_set(void * jarg1, char * jarg2) { + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_asr_handle *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->name) delete [] arg1->name; + if (arg2) { + arg1->name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->name, (const char *)arg2); + } else { + arg1->name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_asr_handle_name_get(void * jarg1) { + char * jresult ; + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + char *result = 0 ; + + arg1 = (switch_asr_handle *)jarg1; + result = (char *) ((arg1)->name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_handle_codec_set(void * jarg1, char * jarg2) { + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_asr_handle *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->codec) delete [] arg1->codec; + if (arg2) { + arg1->codec = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->codec, (const char *)arg2); + } else { + arg1->codec = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_asr_handle_codec_get(void * jarg1) { + char * jresult ; + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + char *result = 0 ; + + arg1 = (switch_asr_handle *)jarg1; + result = (char *) ((arg1)->codec); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_handle_rate_set(void * jarg1, unsigned long jarg2) { + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_asr_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->rate = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_asr_handle_rate_get(void * jarg1) { + unsigned long jresult ; + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + uint32_t result; + + arg1 = (switch_asr_handle *)jarg1; + result = (uint32_t) ((arg1)->rate); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_handle_grammar_set(void * jarg1, char * jarg2) { + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_asr_handle *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->grammar) delete [] arg1->grammar; + if (arg2) { + arg1->grammar = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->grammar, (const char *)arg2); + } else { + arg1->grammar = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_asr_handle_grammar_get(void * jarg1) { + char * jresult ; + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + char *result = 0 ; + + arg1 = (switch_asr_handle *)jarg1; + result = (char *) ((arg1)->grammar); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_handle_param_set(void * jarg1, char * jarg2) { + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_asr_handle *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->param) delete [] arg1->param; + if (arg2) { + arg1->param = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->param, (const char *)arg2); + } else { + arg1->param = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_asr_handle_param_get(void * jarg1) { + char * jresult ; + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + char *result = 0 ; + + arg1 = (switch_asr_handle *)jarg1; + result = (char *) ((arg1)->param); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_handle_memory_pool_set(void * jarg1, void * jarg2) { + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + switch_memory_pool_t *arg2 = (switch_memory_pool_t *) 0 ; + + arg1 = (switch_asr_handle *)jarg1; + arg2 = (switch_memory_pool_t *)jarg2; + if (arg1) (arg1)->memory_pool = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_handle_memory_pool_get(void * jarg1) { + void * jresult ; + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + switch_memory_pool_t *result = 0 ; + + arg1 = (switch_asr_handle *)jarg1; + result = (switch_memory_pool_t *) ((arg1)->memory_pool); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_asr_handle_private_info_set(void * jarg1, void * jarg2) { + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_asr_handle *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->private_info = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_asr_handle_private_info_get(void * jarg1) { + void * jresult ; + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + void *result = 0 ; + + arg1 = (switch_asr_handle *)jarg1; + result = (void *) ((arg1)->private_info); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_asr_handle() { + void * jresult ; + switch_asr_handle *result = 0 ; + + result = (switch_asr_handle *)new switch_asr_handle(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_asr_handle(void * jarg1) { + switch_asr_handle *arg1 = (switch_asr_handle *) 0 ; + + arg1 = (switch_asr_handle *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_interface_interface_name_set(void * jarg1, char * jarg2) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_speech_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->interface_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->interface_name, (const char *)arg2); + } else { + arg1->interface_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_speech_interface_interface_name_get(void * jarg1) { + char * jresult ; + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_speech_interface *)jarg1; + result = (char *) ((arg1)->interface_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_interface_speech_open_set(void * jarg1, void * jarg2) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_status_t (*arg2)(switch_speech_handle_t *,char const *,int,switch_speech_flag_t *) = (switch_status_t (*)(switch_speech_handle_t *,char const *,int,switch_speech_flag_t *)) 0 ; + + arg1 = (switch_speech_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_speech_handle_t *,char const *,int,switch_speech_flag_t *))jarg2; + if (arg1) (arg1)->speech_open = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_interface_speech_open_get(void * jarg1) { + void * jresult ; + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_status_t (*result)(switch_speech_handle_t *,char const *,int,switch_speech_flag_t *) = 0 ; + + arg1 = (switch_speech_interface *)jarg1; + result = (switch_status_t (*)(switch_speech_handle_t *,char const *,int,switch_speech_flag_t *)) ((arg1)->speech_open); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_interface_speech_close_set(void * jarg1, void * jarg2) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_status_t (*arg2)(switch_speech_handle_t *,switch_speech_flag_t *) = (switch_status_t (*)(switch_speech_handle_t *,switch_speech_flag_t *)) 0 ; + + arg1 = (switch_speech_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_speech_handle_t *,switch_speech_flag_t *))jarg2; + if (arg1) (arg1)->speech_close = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_interface_speech_close_get(void * jarg1) { + void * jresult ; + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_status_t (*result)(switch_speech_handle_t *,switch_speech_flag_t *) = 0 ; + + arg1 = (switch_speech_interface *)jarg1; + result = (switch_status_t (*)(switch_speech_handle_t *,switch_speech_flag_t *)) ((arg1)->speech_close); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_interface_speech_feed_tts_set(void * jarg1, void * jarg2) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_status_t (*arg2)(switch_speech_handle_t *,char *,switch_speech_flag_t *) = (switch_status_t (*)(switch_speech_handle_t *,char *,switch_speech_flag_t *)) 0 ; + + arg1 = (switch_speech_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_speech_handle_t *,char *,switch_speech_flag_t *))jarg2; + if (arg1) (arg1)->speech_feed_tts = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_interface_speech_feed_tts_get(void * jarg1) { + void * jresult ; + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_status_t (*result)(switch_speech_handle_t *,char *,switch_speech_flag_t *) = 0 ; + + arg1 = (switch_speech_interface *)jarg1; + result = (switch_status_t (*)(switch_speech_handle_t *,char *,switch_speech_flag_t *)) ((arg1)->speech_feed_tts); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_interface_speech_read_tts_set(void * jarg1, void * jarg2) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_status_t (*arg2)(switch_speech_handle_t *,void *,switch_size_t *,switch_speech_flag_t *) = (switch_status_t (*)(switch_speech_handle_t *,void *,switch_size_t *,switch_speech_flag_t *)) 0 ; + + arg1 = (switch_speech_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_speech_handle_t *,void *,switch_size_t *,switch_speech_flag_t *))jarg2; + if (arg1) (arg1)->speech_read_tts = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_interface_speech_read_tts_get(void * jarg1) { + void * jresult ; + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_status_t (*result)(switch_speech_handle_t *,void *,switch_size_t *,switch_speech_flag_t *) = 0 ; + + arg1 = (switch_speech_interface *)jarg1; + result = (switch_status_t (*)(switch_speech_handle_t *,void *,switch_size_t *,switch_speech_flag_t *)) ((arg1)->speech_read_tts); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_interface_speech_flush_tts_set(void * jarg1, void * jarg2) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + void (*arg2)(switch_speech_handle_t *) = (void (*)(switch_speech_handle_t *)) 0 ; + + arg1 = (switch_speech_interface *)jarg1; + arg2 = (void (*)(switch_speech_handle_t *))jarg2; + if (arg1) (arg1)->speech_flush_tts = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_interface_speech_flush_tts_get(void * jarg1) { + void * jresult ; + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + void (*result)(switch_speech_handle_t *) = 0 ; + + arg1 = (switch_speech_interface *)jarg1; + result = (void (*)(switch_speech_handle_t *)) ((arg1)->speech_flush_tts); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_interface_speech_text_param_tts_set(void * jarg1, void * jarg2) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + void (*arg2)(switch_speech_handle_t *,char *,char const *) = (void (*)(switch_speech_handle_t *,char *,char const *)) 0 ; + + arg1 = (switch_speech_interface *)jarg1; + arg2 = (void (*)(switch_speech_handle_t *,char *,char const *))jarg2; + if (arg1) (arg1)->speech_text_param_tts = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_interface_speech_text_param_tts_get(void * jarg1) { + void * jresult ; + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + void (*result)(switch_speech_handle_t *,char *,char const *) = 0 ; + + arg1 = (switch_speech_interface *)jarg1; + result = (void (*)(switch_speech_handle_t *,char *,char const *)) ((arg1)->speech_text_param_tts); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_interface_speech_numeric_param_tts_set(void * jarg1, void * jarg2) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + void (*arg2)(switch_speech_handle_t *,char *,int) = (void (*)(switch_speech_handle_t *,char *,int)) 0 ; + + arg1 = (switch_speech_interface *)jarg1; + arg2 = (void (*)(switch_speech_handle_t *,char *,int))jarg2; + if (arg1) (arg1)->speech_numeric_param_tts = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_interface_speech_numeric_param_tts_get(void * jarg1) { + void * jresult ; + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + void (*result)(switch_speech_handle_t *,char *,int) = 0 ; + + arg1 = (switch_speech_interface *)jarg1; + result = (void (*)(switch_speech_handle_t *,char *,int)) ((arg1)->speech_numeric_param_tts); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_interface_speech_float_param_tts_set(void * jarg1, void * jarg2) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + void (*arg2)(switch_speech_handle_t *,char *,double) = (void (*)(switch_speech_handle_t *,char *,double)) 0 ; + + arg1 = (switch_speech_interface *)jarg1; + arg2 = (void (*)(switch_speech_handle_t *,char *,double))jarg2; + if (arg1) (arg1)->speech_float_param_tts = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_interface_speech_float_param_tts_get(void * jarg1) { + void * jresult ; + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + void (*result)(switch_speech_handle_t *,char *,double) = 0 ; + + arg1 = (switch_speech_interface *)jarg1; + result = (void (*)(switch_speech_handle_t *,char *,double)) ((arg1)->speech_float_param_tts); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_interface_rwlock_set(void * jarg1, void * jarg2) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; + + arg1 = (switch_speech_interface *)jarg1; + arg2 = (switch_thread_rwlock_t *)jarg2; + if (arg1) (arg1)->rwlock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_interface_rwlock_get(void * jarg1) { + void * jresult ; + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_thread_rwlock_t *result = 0 ; + + arg1 = (switch_speech_interface *)jarg1; + result = (switch_thread_rwlock_t *) ((arg1)->rwlock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_interface_refs_set(void * jarg1, int jarg2) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + int arg2 ; + + arg1 = (switch_speech_interface *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->refs = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_speech_interface_refs_get(void * jarg1) { + int jresult ; + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + int result; + + arg1 = (switch_speech_interface *)jarg1; + result = (int) ((arg1)->refs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_interface_reflock_set(void * jarg1, void * jarg2) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_speech_interface *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->reflock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_interface_reflock_get(void * jarg1) { + void * jresult ; + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_speech_interface *)jarg1; + result = (switch_mutex_t *) ((arg1)->reflock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_interface_parent_set(void * jarg1, void * jarg2) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_loadable_module_interface_t *arg2 = (switch_loadable_module_interface_t *) 0 ; + + arg1 = (switch_speech_interface *)jarg1; + arg2 = (switch_loadable_module_interface_t *)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_interface_parent_get(void * jarg1) { + void * jresult ; + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_speech_interface *)jarg1; + result = (switch_loadable_module_interface_t *) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_interface_next_set(void * jarg1, void * jarg2) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_speech_interface *arg2 = (switch_speech_interface *) 0 ; + + arg1 = (switch_speech_interface *)jarg1; + arg2 = (switch_speech_interface *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_interface_next_get(void * jarg1) { + void * jresult ; + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + switch_speech_interface *result = 0 ; + + arg1 = (switch_speech_interface *)jarg1; + result = (switch_speech_interface *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_speech_interface() { + void * jresult ; + switch_speech_interface *result = 0 ; + + result = (switch_speech_interface *)new switch_speech_interface(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_speech_interface(void * jarg1) { + switch_speech_interface *arg1 = (switch_speech_interface *) 0 ; + + arg1 = (switch_speech_interface *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_speech_interface_set(void * jarg1, void * jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + switch_speech_interface_t *arg2 = (switch_speech_interface_t *) 0 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (switch_speech_interface_t *)jarg2; + if (arg1) (arg1)->speech_interface = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_handle_speech_interface_get(void * jarg1) { + void * jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + switch_speech_interface_t *result = 0 ; + + arg1 = (switch_speech_handle *)jarg1; + result = (switch_speech_interface_t *) ((arg1)->speech_interface); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_flags_set(void * jarg1, unsigned long jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_speech_handle_flags_get(void * jarg1) { + unsigned long jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + uint32_t result; + + arg1 = (switch_speech_handle *)jarg1; + result = (uint32_t) ((arg1)->flags); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_name_set(void * jarg1, char * jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->name) delete [] arg1->name; + if (arg2) { + arg1->name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->name, (const char *)arg2); + } else { + arg1->name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_speech_handle_name_get(void * jarg1) { + char * jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + char *result = 0 ; + + arg1 = (switch_speech_handle *)jarg1; + result = (char *) ((arg1)->name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_rate_set(void * jarg1, unsigned long jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->rate = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_speech_handle_rate_get(void * jarg1) { + unsigned long jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + uint32_t result; + + arg1 = (switch_speech_handle *)jarg1; + result = (uint32_t) ((arg1)->rate); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_speed_set(void * jarg1, unsigned long jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->speed = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_speech_handle_speed_get(void * jarg1) { + unsigned long jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + uint32_t result; + + arg1 = (switch_speech_handle *)jarg1; + result = (uint32_t) ((arg1)->speed); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_samples_set(void * jarg1, unsigned long jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->samples = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_speech_handle_samples_get(void * jarg1) { + unsigned long jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + uint32_t result; + + arg1 = (switch_speech_handle *)jarg1; + result = (uint32_t) ((arg1)->samples); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_voice_set(void * jarg1, char * jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + char *arg2 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (char *)jarg2; + { + if(arg2) { + strncpy((char*)arg1->voice, (const char *)arg2, 80-1); + arg1->voice[80-1] = 0; + } else { + arg1->voice[0] = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_speech_handle_voice_get(void * jarg1) { + char * jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + char *result = 0 ; + + arg1 = (switch_speech_handle *)jarg1; + result = (char *)(char *) ((arg1)->voice); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_engine_set(void * jarg1, char * jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->engine) delete [] arg1->engine; + if (arg2) { + arg1->engine = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->engine, (const char *)arg2); + } else { + arg1->engine = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_speech_handle_engine_get(void * jarg1) { + char * jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + char *result = 0 ; + + arg1 = (switch_speech_handle *)jarg1; + result = (char *) ((arg1)->engine); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_param_set(void * jarg1, char * jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->param) delete [] arg1->param; + if (arg2) { + arg1->param = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->param, (const char *)arg2); + } else { + arg1->param = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_speech_handle_param_get(void * jarg1) { + char * jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + char *result = 0 ; + + arg1 = (switch_speech_handle *)jarg1; + result = (char *) ((arg1)->param); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_memory_pool_set(void * jarg1, void * jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + switch_memory_pool_t *arg2 = (switch_memory_pool_t *) 0 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (switch_memory_pool_t *)jarg2; + if (arg1) (arg1)->memory_pool = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_handle_memory_pool_get(void * jarg1) { + void * jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + switch_memory_pool_t *result = 0 ; + + arg1 = (switch_speech_handle *)jarg1; + result = (switch_memory_pool_t *) ((arg1)->memory_pool); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_resampler_set(void * jarg1, void * jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + switch_audio_resampler_t *arg2 = (switch_audio_resampler_t *) 0 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (switch_audio_resampler_t *)jarg2; + if (arg1) (arg1)->resampler = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_handle_resampler_get(void * jarg1) { + void * jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + switch_audio_resampler_t *result = 0 ; + + arg1 = (switch_speech_handle *)jarg1; + result = (switch_audio_resampler_t *) ((arg1)->resampler); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_buffer_set(void * jarg1, void * jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + switch_buffer_t *arg2 = (switch_buffer_t *) 0 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (switch_buffer_t *)jarg2; + if (arg1) (arg1)->buffer = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_handle_buffer_get(void * jarg1) { + void * jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + switch_buffer_t *result = 0 ; + + arg1 = (switch_speech_handle *)jarg1; + result = (switch_buffer_t *) ((arg1)->buffer); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_dbuf_set(void * jarg1, void * jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + switch_byte_t *arg2 = (switch_byte_t *) 0 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (switch_byte_t *)jarg2; + if (arg1) (arg1)->dbuf = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_handle_dbuf_get(void * jarg1) { + void * jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + switch_byte_t *result = 0 ; + + arg1 = (switch_speech_handle *)jarg1; + result = (switch_byte_t *) ((arg1)->dbuf); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_dbuflen_set(void * jarg1, void * jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_speech_handle *)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)->dbuflen = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_handle_dbuflen_get(void * jarg1) { + void * jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + switch_size_t result; + + arg1 = (switch_speech_handle *)jarg1; + result = ((arg1)->dbuflen); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_samplerate_set(void * jarg1, unsigned long jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->samplerate = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_speech_handle_samplerate_get(void * jarg1) { + unsigned long jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + uint32_t result; + + arg1 = (switch_speech_handle *)jarg1; + result = (uint32_t) ((arg1)->samplerate); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_native_rate_set(void * jarg1, unsigned long jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->native_rate = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_speech_handle_native_rate_get(void * jarg1) { + unsigned long jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + uint32_t result; + + arg1 = (switch_speech_handle *)jarg1; + result = (uint32_t) ((arg1)->native_rate); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_speech_handle_private_info_set(void * jarg1, void * jarg2) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_speech_handle *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->private_info = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_speech_handle_private_info_get(void * jarg1) { + void * jresult ; + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + void *result = 0 ; + + arg1 = (switch_speech_handle *)jarg1; + result = (void *) ((arg1)->private_info); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_speech_handle() { + void * jresult ; + switch_speech_handle *result = 0 ; + + result = (switch_speech_handle *)new switch_speech_handle(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_speech_handle(void * jarg1) { + switch_speech_handle *arg1 = (switch_speech_handle *) 0 ; + + arg1 = (switch_speech_handle *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_say_interface_interface_name_set(void * jarg1, char * jarg2) { + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_say_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->interface_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->interface_name, (const char *)arg2); + } else { + arg1->interface_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_say_interface_interface_name_get(void * jarg1) { + char * jresult ; + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_say_interface *)jarg1; + result = (char *) ((arg1)->interface_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_say_interface_say_function_set(void * jarg1, void * jarg2) { + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + switch_say_callback_t arg2 = (switch_say_callback_t) 0 ; + + arg1 = (switch_say_interface *)jarg1; + arg2 = (switch_say_callback_t)jarg2; + if (arg1) (arg1)->say_function = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_say_interface_say_function_get(void * jarg1) { + void * jresult ; + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + switch_say_callback_t result; + + arg1 = (switch_say_interface *)jarg1; + result = (switch_say_callback_t) ((arg1)->say_function); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_say_interface_rwlock_set(void * jarg1, void * jarg2) { + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; + + arg1 = (switch_say_interface *)jarg1; + arg2 = (switch_thread_rwlock_t *)jarg2; + if (arg1) (arg1)->rwlock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_say_interface_rwlock_get(void * jarg1) { + void * jresult ; + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + switch_thread_rwlock_t *result = 0 ; + + arg1 = (switch_say_interface *)jarg1; + result = (switch_thread_rwlock_t *) ((arg1)->rwlock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_say_interface_refs_set(void * jarg1, int jarg2) { + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + int arg2 ; + + arg1 = (switch_say_interface *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->refs = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_say_interface_refs_get(void * jarg1) { + int jresult ; + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + int result; + + arg1 = (switch_say_interface *)jarg1; + result = (int) ((arg1)->refs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_say_interface_reflock_set(void * jarg1, void * jarg2) { + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_say_interface *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->reflock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_say_interface_reflock_get(void * jarg1) { + void * jresult ; + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_say_interface *)jarg1; + result = (switch_mutex_t *) ((arg1)->reflock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_say_interface_parent_set(void * jarg1, void * jarg2) { + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + switch_loadable_module_interface_t *arg2 = (switch_loadable_module_interface_t *) 0 ; + + arg1 = (switch_say_interface *)jarg1; + arg2 = (switch_loadable_module_interface_t *)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_say_interface_parent_get(void * jarg1) { + void * jresult ; + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_say_interface *)jarg1; + result = (switch_loadable_module_interface_t *) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_say_interface_next_set(void * jarg1, void * jarg2) { + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + switch_say_interface *arg2 = (switch_say_interface *) 0 ; + + arg1 = (switch_say_interface *)jarg1; + arg2 = (switch_say_interface *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_say_interface_next_get(void * jarg1) { + void * jresult ; + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + switch_say_interface *result = 0 ; + + arg1 = (switch_say_interface *)jarg1; + result = (switch_say_interface *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_say_interface() { + void * jresult ; + switch_say_interface *result = 0 ; + + result = (switch_say_interface *)new switch_say_interface(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_say_interface(void * jarg1) { + switch_say_interface *arg1 = (switch_say_interface *) 0 ; + + arg1 = (switch_say_interface *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_chat_interface_interface_name_set(void * jarg1, char * jarg2) { + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_chat_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->interface_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->interface_name, (const char *)arg2); + } else { + arg1->interface_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_chat_interface_interface_name_get(void * jarg1) { + char * jresult ; + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_chat_interface *)jarg1; + result = (char *) ((arg1)->interface_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_chat_interface_chat_send_set(void * jarg1, void * jarg2) { + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + switch_status_t (*arg2)(char const *,char const *,char const *,char const *,char const *,char const *,char const *) = (switch_status_t (*)(char const *,char const *,char const *,char const *,char const *,char const *,char const *)) 0 ; + + arg1 = (switch_chat_interface *)jarg1; + arg2 = (switch_status_t (*)(char const *,char const *,char const *,char const *,char const *,char const *,char const *))jarg2; + if (arg1) (arg1)->chat_send = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_chat_interface_chat_send_get(void * jarg1) { + void * jresult ; + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + switch_status_t (*result)(char const *,char const *,char const *,char const *,char const *,char const *,char const *) = 0 ; + + arg1 = (switch_chat_interface *)jarg1; + result = (switch_status_t (*)(char const *,char const *,char const *,char const *,char const *,char const *,char const *)) ((arg1)->chat_send); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_chat_interface_rwlock_set(void * jarg1, void * jarg2) { + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; + + arg1 = (switch_chat_interface *)jarg1; + arg2 = (switch_thread_rwlock_t *)jarg2; + if (arg1) (arg1)->rwlock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_chat_interface_rwlock_get(void * jarg1) { + void * jresult ; + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + switch_thread_rwlock_t *result = 0 ; + + arg1 = (switch_chat_interface *)jarg1; + result = (switch_thread_rwlock_t *) ((arg1)->rwlock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_chat_interface_refs_set(void * jarg1, int jarg2) { + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + int arg2 ; + + arg1 = (switch_chat_interface *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->refs = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_chat_interface_refs_get(void * jarg1) { + int jresult ; + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + int result; + + arg1 = (switch_chat_interface *)jarg1; + result = (int) ((arg1)->refs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_chat_interface_reflock_set(void * jarg1, void * jarg2) { + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_chat_interface *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->reflock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_chat_interface_reflock_get(void * jarg1) { + void * jresult ; + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_chat_interface *)jarg1; + result = (switch_mutex_t *) ((arg1)->reflock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_chat_interface_parent_set(void * jarg1, void * jarg2) { + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + switch_loadable_module_interface_t *arg2 = (switch_loadable_module_interface_t *) 0 ; + + arg1 = (switch_chat_interface *)jarg1; + arg2 = (switch_loadable_module_interface_t *)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_chat_interface_parent_get(void * jarg1) { + void * jresult ; + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_chat_interface *)jarg1; + result = (switch_loadable_module_interface_t *) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_chat_interface_next_set(void * jarg1, void * jarg2) { + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + switch_chat_interface *arg2 = (switch_chat_interface *) 0 ; + + arg1 = (switch_chat_interface *)jarg1; + arg2 = (switch_chat_interface *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_chat_interface_next_get(void * jarg1) { + void * jresult ; + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + switch_chat_interface *result = 0 ; + + arg1 = (switch_chat_interface *)jarg1; + result = (switch_chat_interface *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_chat_interface() { + void * jresult ; + switch_chat_interface *result = 0 ; + + result = (switch_chat_interface *)new switch_chat_interface(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_chat_interface(void * jarg1) { + switch_chat_interface *arg1 = (switch_chat_interface *) 0 ; + + arg1 = (switch_chat_interface *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_management_interface_relative_oid_set(void * jarg1, char * jarg2) { + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_management_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->relative_oid = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->relative_oid, (const char *)arg2); + } else { + arg1->relative_oid = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_management_interface_relative_oid_get(void * jarg1) { + char * jresult ; + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_management_interface *)jarg1; + result = (char *) ((arg1)->relative_oid); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_management_interface_management_function_set(void * jarg1, void * jarg2) { + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + switch_status_t (*arg2)(char *,switch_management_action_t,char *,switch_size_t) = (switch_status_t (*)(char *,switch_management_action_t,char *,switch_size_t)) 0 ; + + arg1 = (switch_management_interface *)jarg1; + arg2 = (switch_status_t (*)(char *,switch_management_action_t,char *,switch_size_t))jarg2; + if (arg1) (arg1)->management_function = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_management_interface_management_function_get(void * jarg1) { + void * jresult ; + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + switch_status_t (*result)(char *,switch_management_action_t,char *,switch_size_t) = 0 ; + + arg1 = (switch_management_interface *)jarg1; + result = (switch_status_t (*)(char *,switch_management_action_t,char *,switch_size_t)) ((arg1)->management_function); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_management_interface_rwlock_set(void * jarg1, void * jarg2) { + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; + + arg1 = (switch_management_interface *)jarg1; + arg2 = (switch_thread_rwlock_t *)jarg2; + if (arg1) (arg1)->rwlock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_management_interface_rwlock_get(void * jarg1) { + void * jresult ; + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + switch_thread_rwlock_t *result = 0 ; + + arg1 = (switch_management_interface *)jarg1; + result = (switch_thread_rwlock_t *) ((arg1)->rwlock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_management_interface_refs_set(void * jarg1, int jarg2) { + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + int arg2 ; + + arg1 = (switch_management_interface *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->refs = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_management_interface_refs_get(void * jarg1) { + int jresult ; + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + int result; + + arg1 = (switch_management_interface *)jarg1; + result = (int) ((arg1)->refs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_management_interface_reflock_set(void * jarg1, void * jarg2) { + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_management_interface *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->reflock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_management_interface_reflock_get(void * jarg1) { + void * jresult ; + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_management_interface *)jarg1; + result = (switch_mutex_t *) ((arg1)->reflock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_management_interface_parent_set(void * jarg1, void * jarg2) { + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + switch_loadable_module_interface_t *arg2 = (switch_loadable_module_interface_t *) 0 ; + + arg1 = (switch_management_interface *)jarg1; + arg2 = (switch_loadable_module_interface_t *)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_management_interface_parent_get(void * jarg1) { + void * jresult ; + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_management_interface *)jarg1; + result = (switch_loadable_module_interface_t *) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_management_interface_next_set(void * jarg1, void * jarg2) { + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + switch_management_interface *arg2 = (switch_management_interface *) 0 ; + + arg1 = (switch_management_interface *)jarg1; + arg2 = (switch_management_interface *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_management_interface_next_get(void * jarg1) { + void * jresult ; + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + switch_management_interface *result = 0 ; + + arg1 = (switch_management_interface *)jarg1; + result = (switch_management_interface *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_management_interface() { + void * jresult ; + switch_management_interface *result = 0 ; + + result = (switch_management_interface *)new switch_management_interface(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_management_interface(void * jarg1) { + switch_management_interface *arg1 = (switch_management_interface *) 0 ; + + arg1 = (switch_management_interface *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_limit_interface_interface_name_set(void * jarg1, char * jarg2) { + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_limit_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->interface_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->interface_name, (const char *)arg2); + } else { + arg1->interface_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_limit_interface_interface_name_get(void * jarg1) { + char * jresult ; + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_limit_interface *)jarg1; + result = (char *) ((arg1)->interface_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_limit_interface_incr_set(void * jarg1, void * jarg2) { + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_status_t (*arg2)(switch_core_session_t *,char const *,char const *,int const,int const) = (switch_status_t (*)(switch_core_session_t *,char const *,char const *,int const,int const)) 0 ; + + arg1 = (switch_limit_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_core_session_t *,char const *,char const *,int const,int const))jarg2; + if (arg1) (arg1)->incr = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_limit_interface_incr_get(void * jarg1) { + void * jresult ; + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_status_t (*result)(switch_core_session_t *,char const *,char const *,int const,int const) = 0 ; + + arg1 = (switch_limit_interface *)jarg1; + result = (switch_status_t (*)(switch_core_session_t *,char const *,char const *,int const,int const)) ((arg1)->incr); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_limit_interface_release_set(void * jarg1, void * jarg2) { + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_status_t (*arg2)(switch_core_session_t *,char const *,char const *) = (switch_status_t (*)(switch_core_session_t *,char const *,char const *)) 0 ; + + arg1 = (switch_limit_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_core_session_t *,char const *,char const *))jarg2; + if (arg1) (arg1)->release = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_limit_interface_release_get(void * jarg1) { + void * jresult ; + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_status_t (*result)(switch_core_session_t *,char const *,char const *) = 0 ; + + arg1 = (switch_limit_interface *)jarg1; + result = (switch_status_t (*)(switch_core_session_t *,char const *,char const *)) ((arg1)->release); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_limit_interface_usage_set(void * jarg1, void * jarg2) { + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + int (*arg2)(char const *,char const *,uint32_t *) = (int (*)(char const *,char const *,uint32_t *)) 0 ; + + arg1 = (switch_limit_interface *)jarg1; + arg2 = (int (*)(char const *,char const *,uint32_t *))jarg2; + if (arg1) (arg1)->usage = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_limit_interface_usage_get(void * jarg1) { + void * jresult ; + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + int (*result)(char const *,char const *,uint32_t *) = 0 ; + + arg1 = (switch_limit_interface *)jarg1; + result = (int (*)(char const *,char const *,uint32_t *)) ((arg1)->usage); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_limit_interface_reset_set(void * jarg1, void * jarg2) { + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_status_t (*arg2)(void) = (switch_status_t (*)(void)) 0 ; + + arg1 = (switch_limit_interface *)jarg1; + arg2 = (switch_status_t (*)(void))jarg2; + if (arg1) (arg1)->reset = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_limit_interface_reset_get(void * jarg1) { + void * jresult ; + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_status_t (*result)(void) = 0 ; + + arg1 = (switch_limit_interface *)jarg1; + result = (switch_status_t (*)(void)) ((arg1)->reset); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_limit_interface_status_set(void * jarg1, void * jarg2) { + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + char *(*arg2)(void) = (char *(*)(void)) 0 ; + + arg1 = (switch_limit_interface *)jarg1; + arg2 = (char *(*)(void))jarg2; + if (arg1) (arg1)->status = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_limit_interface_status_get(void * jarg1) { + void * jresult ; + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + char *(*result)(void) = 0 ; + + arg1 = (switch_limit_interface *)jarg1; + result = (char *(*)(void)) ((arg1)->status); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_limit_interface_interval_reset_set(void * jarg1, void * jarg2) { + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_status_t (*arg2)(char const *,char const *) = (switch_status_t (*)(char const *,char const *)) 0 ; + + arg1 = (switch_limit_interface *)jarg1; + arg2 = (switch_status_t (*)(char const *,char const *))jarg2; + if (arg1) (arg1)->interval_reset = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_limit_interface_interval_reset_get(void * jarg1) { + void * jresult ; + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_status_t (*result)(char const *,char const *) = 0 ; + + arg1 = (switch_limit_interface *)jarg1; + result = (switch_status_t (*)(char const *,char const *)) ((arg1)->interval_reset); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_limit_interface_rwlock_set(void * jarg1, void * jarg2) { + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; + + arg1 = (switch_limit_interface *)jarg1; + arg2 = (switch_thread_rwlock_t *)jarg2; + if (arg1) (arg1)->rwlock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_limit_interface_rwlock_get(void * jarg1) { + void * jresult ; + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_thread_rwlock_t *result = 0 ; + + arg1 = (switch_limit_interface *)jarg1; + result = (switch_thread_rwlock_t *) ((arg1)->rwlock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_limit_interface_refs_set(void * jarg1, int jarg2) { + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + int arg2 ; + + arg1 = (switch_limit_interface *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->refs = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_limit_interface_refs_get(void * jarg1) { + int jresult ; + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + int result; + + arg1 = (switch_limit_interface *)jarg1; + result = (int) ((arg1)->refs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_limit_interface_reflock_set(void * jarg1, void * jarg2) { + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_limit_interface *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->reflock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_limit_interface_reflock_get(void * jarg1) { + void * jresult ; + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_limit_interface *)jarg1; + result = (switch_mutex_t *) ((arg1)->reflock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_limit_interface_parent_set(void * jarg1, void * jarg2) { + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_loadable_module_interface_t *arg2 = (switch_loadable_module_interface_t *) 0 ; + + arg1 = (switch_limit_interface *)jarg1; + arg2 = (switch_loadable_module_interface_t *)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_limit_interface_parent_get(void * jarg1) { + void * jresult ; + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_limit_interface *)jarg1; + result = (switch_loadable_module_interface_t *) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_limit_interface_next_set(void * jarg1, void * jarg2) { + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_limit_interface *arg2 = (switch_limit_interface *) 0 ; + + arg1 = (switch_limit_interface *)jarg1; + arg2 = (switch_limit_interface *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_limit_interface_next_get(void * jarg1) { + void * jresult ; + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + switch_limit_interface *result = 0 ; + + arg1 = (switch_limit_interface *)jarg1; + result = (switch_limit_interface *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_limit_interface() { + void * jresult ; + switch_limit_interface *result = 0 ; + + result = (switch_limit_interface *)new switch_limit_interface(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_limit_interface(void * jarg1) { + switch_limit_interface *arg1 = (switch_limit_interface *) 0 ; + + arg1 = (switch_limit_interface *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_interface_interface_name_set(void * jarg1, char * jarg2) { + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_directory_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->interface_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->interface_name, (const char *)arg2); + } else { + arg1->interface_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_directory_interface_interface_name_get(void * jarg1) { + char * jresult ; + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_directory_interface *)jarg1; + result = (char *) ((arg1)->interface_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_interface_directory_open_set(void * jarg1, void * jarg2) { + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_status_t (*arg2)(switch_directory_handle_t *,char *,char *,char *) = (switch_status_t (*)(switch_directory_handle_t *,char *,char *,char *)) 0 ; + + arg1 = (switch_directory_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_directory_handle_t *,char *,char *,char *))jarg2; + if (arg1) (arg1)->directory_open = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_directory_interface_directory_open_get(void * jarg1) { + void * jresult ; + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_status_t (*result)(switch_directory_handle_t *,char *,char *,char *) = 0 ; + + arg1 = (switch_directory_interface *)jarg1; + result = (switch_status_t (*)(switch_directory_handle_t *,char *,char *,char *)) ((arg1)->directory_open); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_interface_directory_close_set(void * jarg1, void * jarg2) { + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_status_t (*arg2)(switch_directory_handle_t *) = (switch_status_t (*)(switch_directory_handle_t *)) 0 ; + + arg1 = (switch_directory_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_directory_handle_t *))jarg2; + if (arg1) (arg1)->directory_close = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_directory_interface_directory_close_get(void * jarg1) { + void * jresult ; + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_status_t (*result)(switch_directory_handle_t *) = 0 ; + + arg1 = (switch_directory_interface *)jarg1; + result = (switch_status_t (*)(switch_directory_handle_t *)) ((arg1)->directory_close); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_interface_directory_query_set(void * jarg1, void * jarg2) { + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_status_t (*arg2)(switch_directory_handle_t *,char *,char *) = (switch_status_t (*)(switch_directory_handle_t *,char *,char *)) 0 ; + + arg1 = (switch_directory_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_directory_handle_t *,char *,char *))jarg2; + if (arg1) (arg1)->directory_query = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_directory_interface_directory_query_get(void * jarg1) { + void * jresult ; + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_status_t (*result)(switch_directory_handle_t *,char *,char *) = 0 ; + + arg1 = (switch_directory_interface *)jarg1; + result = (switch_status_t (*)(switch_directory_handle_t *,char *,char *)) ((arg1)->directory_query); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_interface_directory_next_set(void * jarg1, void * jarg2) { + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_status_t (*arg2)(switch_directory_handle_t *) = (switch_status_t (*)(switch_directory_handle_t *)) 0 ; + + arg1 = (switch_directory_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_directory_handle_t *))jarg2; + if (arg1) (arg1)->directory_next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_directory_interface_directory_next_get(void * jarg1) { + void * jresult ; + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_status_t (*result)(switch_directory_handle_t *) = 0 ; + + arg1 = (switch_directory_interface *)jarg1; + result = (switch_status_t (*)(switch_directory_handle_t *)) ((arg1)->directory_next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_interface_directory_next_pair_set(void * jarg1, void * jarg2) { + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_status_t (*arg2)(switch_directory_handle_t *,char **,char **) = (switch_status_t (*)(switch_directory_handle_t *,char **,char **)) 0 ; + + arg1 = (switch_directory_interface *)jarg1; + arg2 = (switch_status_t (*)(switch_directory_handle_t *,char **,char **))jarg2; + if (arg1) (arg1)->directory_next_pair = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_directory_interface_directory_next_pair_get(void * jarg1) { + void * jresult ; + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_status_t (*result)(switch_directory_handle_t *,char **,char **) = 0 ; + + arg1 = (switch_directory_interface *)jarg1; + result = (switch_status_t (*)(switch_directory_handle_t *,char **,char **)) ((arg1)->directory_next_pair); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_interface_rwlock_set(void * jarg1, void * jarg2) { + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; + + arg1 = (switch_directory_interface *)jarg1; + arg2 = (switch_thread_rwlock_t *)jarg2; + if (arg1) (arg1)->rwlock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_directory_interface_rwlock_get(void * jarg1) { + void * jresult ; + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_thread_rwlock_t *result = 0 ; + + arg1 = (switch_directory_interface *)jarg1; + result = (switch_thread_rwlock_t *) ((arg1)->rwlock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_interface_refs_set(void * jarg1, int jarg2) { + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + int arg2 ; + + arg1 = (switch_directory_interface *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->refs = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_directory_interface_refs_get(void * jarg1) { + int jresult ; + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + int result; + + arg1 = (switch_directory_interface *)jarg1; + result = (int) ((arg1)->refs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_interface_reflock_set(void * jarg1, void * jarg2) { + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_directory_interface *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->reflock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_directory_interface_reflock_get(void * jarg1) { + void * jresult ; + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_directory_interface *)jarg1; + result = (switch_mutex_t *) ((arg1)->reflock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_interface_parent_set(void * jarg1, void * jarg2) { + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_loadable_module_interface_t *arg2 = (switch_loadable_module_interface_t *) 0 ; + + arg1 = (switch_directory_interface *)jarg1; + arg2 = (switch_loadable_module_interface_t *)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_directory_interface_parent_get(void * jarg1) { + void * jresult ; + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_directory_interface *)jarg1; + result = (switch_loadable_module_interface_t *) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_interface_next_set(void * jarg1, void * jarg2) { + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_directory_interface *arg2 = (switch_directory_interface *) 0 ; + + arg1 = (switch_directory_interface *)jarg1; + arg2 = (switch_directory_interface *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_directory_interface_next_get(void * jarg1) { + void * jresult ; + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + switch_directory_interface *result = 0 ; + + arg1 = (switch_directory_interface *)jarg1; + result = (switch_directory_interface *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_directory_interface() { + void * jresult ; + switch_directory_interface *result = 0 ; + + result = (switch_directory_interface *)new switch_directory_interface(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_directory_interface(void * jarg1) { + switch_directory_interface *arg1 = (switch_directory_interface *) 0 ; + + arg1 = (switch_directory_interface *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_handle_directory_interface_set(void * jarg1, void * jarg2) { + switch_directory_handle *arg1 = (switch_directory_handle *) 0 ; + switch_directory_interface_t *arg2 = (switch_directory_interface_t *) 0 ; + + arg1 = (switch_directory_handle *)jarg1; + arg2 = (switch_directory_interface_t *)jarg2; + if (arg1) (arg1)->directory_interface = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_directory_handle_directory_interface_get(void * jarg1) { + void * jresult ; + switch_directory_handle *arg1 = (switch_directory_handle *) 0 ; + switch_directory_interface_t *result = 0 ; + + arg1 = (switch_directory_handle *)jarg1; + result = (switch_directory_interface_t *) ((arg1)->directory_interface); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_handle_flags_set(void * jarg1, unsigned long jarg2) { + switch_directory_handle *arg1 = (switch_directory_handle *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_directory_handle *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_directory_handle_flags_get(void * jarg1) { + unsigned long jresult ; + switch_directory_handle *arg1 = (switch_directory_handle *) 0 ; + uint32_t result; + + arg1 = (switch_directory_handle *)jarg1; + result = (uint32_t) ((arg1)->flags); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_handle_memory_pool_set(void * jarg1, void * jarg2) { + switch_directory_handle *arg1 = (switch_directory_handle *) 0 ; + switch_memory_pool_t *arg2 = (switch_memory_pool_t *) 0 ; + + arg1 = (switch_directory_handle *)jarg1; + arg2 = (switch_memory_pool_t *)jarg2; + if (arg1) (arg1)->memory_pool = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_directory_handle_memory_pool_get(void * jarg1) { + void * jresult ; + switch_directory_handle *arg1 = (switch_directory_handle *) 0 ; + switch_memory_pool_t *result = 0 ; + + arg1 = (switch_directory_handle *)jarg1; + result = (switch_memory_pool_t *) ((arg1)->memory_pool); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_directory_handle_private_info_set(void * jarg1, void * jarg2) { + switch_directory_handle *arg1 = (switch_directory_handle *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_directory_handle *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->private_info = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_directory_handle_private_info_get(void * jarg1) { + void * jresult ; + switch_directory_handle *arg1 = (switch_directory_handle *) 0 ; + void *result = 0 ; + + arg1 = (switch_directory_handle *)jarg1; + result = (void *) ((arg1)->private_info); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_directory_handle() { + void * jresult ; + switch_directory_handle *result = 0 ; + + result = (switch_directory_handle *)new switch_directory_handle(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_directory_handle(void * jarg1) { + switch_directory_handle *arg1 = (switch_directory_handle *) 0 ; + + arg1 = (switch_directory_handle *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_quality_set(void * jarg1, int jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->quality = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_settings_quality_get(void * jarg1) { + int jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int result; + + arg1 = (switch_codec_settings *)jarg1; + result = (int) ((arg1)->quality); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_complexity_set(void * jarg1, int jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->complexity = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_settings_complexity_get(void * jarg1) { + int jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int result; + + arg1 = (switch_codec_settings *)jarg1; + result = (int) ((arg1)->complexity); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_enhancement_set(void * jarg1, int jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->enhancement = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_settings_enhancement_get(void * jarg1) { + int jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int result; + + arg1 = (switch_codec_settings *)jarg1; + result = (int) ((arg1)->enhancement); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_vad_set(void * jarg1, int jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->vad = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_settings_vad_get(void * jarg1) { + int jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int result; + + arg1 = (switch_codec_settings *)jarg1; + result = (int) ((arg1)->vad); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_vbr_set(void * jarg1, int jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->vbr = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_settings_vbr_get(void * jarg1) { + int jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int result; + + arg1 = (switch_codec_settings *)jarg1; + result = (int) ((arg1)->vbr); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_vbr_quality_set(void * jarg1, float jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + float arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (float)jarg2; + if (arg1) (arg1)->vbr_quality = arg2; +} + + +SWIGEXPORT float SWIGSTDCALL CSharp_switch_codec_settings_vbr_quality_get(void * jarg1) { + float jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + float result; + + arg1 = (switch_codec_settings *)jarg1; + result = (float) ((arg1)->vbr_quality); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_abr_set(void * jarg1, int jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->abr = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_settings_abr_get(void * jarg1) { + int jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int result; + + arg1 = (switch_codec_settings *)jarg1; + result = (int) ((arg1)->abr); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_dtx_set(void * jarg1, int jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->dtx = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_settings_dtx_get(void * jarg1) { + int jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int result; + + arg1 = (switch_codec_settings *)jarg1; + result = (int) ((arg1)->dtx); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_preproc_set(void * jarg1, int jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->preproc = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_settings_preproc_get(void * jarg1) { + int jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int result; + + arg1 = (switch_codec_settings *)jarg1; + result = (int) ((arg1)->preproc); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_pp_vad_set(void * jarg1, int jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->pp_vad = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_settings_pp_vad_get(void * jarg1) { + int jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int result; + + arg1 = (switch_codec_settings *)jarg1; + result = (int) ((arg1)->pp_vad); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_pp_agc_set(void * jarg1, int jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->pp_agc = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_settings_pp_agc_get(void * jarg1) { + int jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int result; + + arg1 = (switch_codec_settings *)jarg1; + result = (int) ((arg1)->pp_agc); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_pp_agc_level_set(void * jarg1, float jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + float arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (float)jarg2; + if (arg1) (arg1)->pp_agc_level = arg2; +} + + +SWIGEXPORT float SWIGSTDCALL CSharp_switch_codec_settings_pp_agc_level_get(void * jarg1) { + float jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + float result; + + arg1 = (switch_codec_settings *)jarg1; + result = (float) ((arg1)->pp_agc_level); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_pp_denoise_set(void * jarg1, int jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->pp_denoise = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_settings_pp_denoise_get(void * jarg1) { + int jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int result; + + arg1 = (switch_codec_settings *)jarg1; + result = (int) ((arg1)->pp_denoise); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_pp_dereverb_set(void * jarg1, int jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->pp_dereverb = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_settings_pp_dereverb_get(void * jarg1) { + int jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + int result; + + arg1 = (switch_codec_settings *)jarg1; + result = (int) ((arg1)->pp_dereverb); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_pp_dereverb_decay_set(void * jarg1, float jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + float arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (float)jarg2; + if (arg1) (arg1)->pp_dereverb_decay = arg2; +} + + +SWIGEXPORT float SWIGSTDCALL CSharp_switch_codec_settings_pp_dereverb_decay_get(void * jarg1) { + float jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + float result; + + arg1 = (switch_codec_settings *)jarg1; + result = (float) ((arg1)->pp_dereverb_decay); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_settings_pp_dereverb_level_set(void * jarg1, float jarg2) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + float arg2 ; + + arg1 = (switch_codec_settings *)jarg1; + arg2 = (float)jarg2; + if (arg1) (arg1)->pp_dereverb_level = arg2; +} + + +SWIGEXPORT float SWIGSTDCALL CSharp_switch_codec_settings_pp_dereverb_level_get(void * jarg1) { + float jresult ; + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + float result; + + arg1 = (switch_codec_settings *)jarg1; + result = (float) ((arg1)->pp_dereverb_level); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_codec_settings() { + void * jresult ; + switch_codec_settings *result = 0 ; + + result = (switch_codec_settings *)new switch_codec_settings(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_codec_settings(void * jarg1) { + switch_codec_settings *arg1 = (switch_codec_settings *) 0 ; + + arg1 = (switch_codec_settings *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_codec_interface_set(void * jarg1, void * jarg2) { + switch_codec *arg1 = (switch_codec *) 0 ; + switch_codec_interface_t *arg2 = (switch_codec_interface_t *) 0 ; + + arg1 = (switch_codec *)jarg1; + arg2 = (switch_codec_interface_t *)jarg2; + if (arg1) (arg1)->codec_interface = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_codec_interface_get(void * jarg1) { + void * jresult ; + switch_codec *arg1 = (switch_codec *) 0 ; + switch_codec_interface_t *result = 0 ; + + arg1 = (switch_codec *)jarg1; + result = (switch_codec_interface_t *) ((arg1)->codec_interface); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_set(void * jarg1, void * jarg2) { + switch_codec *arg1 = (switch_codec *) 0 ; + switch_codec_implementation_t *arg2 = (switch_codec_implementation_t *) 0 ; + + arg1 = (switch_codec *)jarg1; + arg2 = (switch_codec_implementation_t *)jarg2; + if (arg1) (arg1)->implementation = (switch_codec_implementation_t const *)arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_implementation_get(void * jarg1) { + void * jresult ; + switch_codec *arg1 = (switch_codec *) 0 ; + switch_codec_implementation_t *result = 0 ; + + arg1 = (switch_codec *)jarg1; + result = (switch_codec_implementation_t *) ((arg1)->implementation); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_fmtp_in_set(void * jarg1, char * jarg2) { + switch_codec *arg1 = (switch_codec *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_codec *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->fmtp_in) delete [] arg1->fmtp_in; + if (arg2) { + arg1->fmtp_in = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->fmtp_in, (const char *)arg2); + } else { + arg1->fmtp_in = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_codec_fmtp_in_get(void * jarg1) { + char * jresult ; + switch_codec *arg1 = (switch_codec *) 0 ; + char *result = 0 ; + + arg1 = (switch_codec *)jarg1; + result = (char *) ((arg1)->fmtp_in); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_fmtp_out_set(void * jarg1, char * jarg2) { + switch_codec *arg1 = (switch_codec *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_codec *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->fmtp_out) delete [] arg1->fmtp_out; + if (arg2) { + arg1->fmtp_out = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->fmtp_out, (const char *)arg2); + } else { + arg1->fmtp_out = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_codec_fmtp_out_get(void * jarg1) { + char * jresult ; + switch_codec *arg1 = (switch_codec *) 0 ; + char *result = 0 ; + + arg1 = (switch_codec *)jarg1; + result = (char *) ((arg1)->fmtp_out); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_codec_settings_set(void * jarg1, void * jarg2) { + switch_codec *arg1 = (switch_codec *) 0 ; + switch_codec_settings_t *arg2 = (switch_codec_settings_t *) 0 ; + + arg1 = (switch_codec *)jarg1; + arg2 = (switch_codec_settings_t *)jarg2; + if (arg1) (arg1)->codec_settings = *arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_codec_settings_get(void * jarg1) { + void * jresult ; + switch_codec *arg1 = (switch_codec *) 0 ; + switch_codec_settings_t *result = 0 ; + + arg1 = (switch_codec *)jarg1; + result = (switch_codec_settings_t *)& ((arg1)->codec_settings); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_flags_set(void * jarg1, unsigned long jarg2) { + switch_codec *arg1 = (switch_codec *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_codec *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_codec_flags_get(void * jarg1) { + unsigned long jresult ; + switch_codec *arg1 = (switch_codec *) 0 ; + uint32_t result; + + arg1 = (switch_codec *)jarg1; + result = (uint32_t) ((arg1)->flags); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_memory_pool_set(void * jarg1, void * jarg2) { + switch_codec *arg1 = (switch_codec *) 0 ; + switch_memory_pool_t *arg2 = (switch_memory_pool_t *) 0 ; + + arg1 = (switch_codec *)jarg1; + arg2 = (switch_memory_pool_t *)jarg2; + if (arg1) (arg1)->memory_pool = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_memory_pool_get(void * jarg1) { + void * jresult ; + switch_codec *arg1 = (switch_codec *) 0 ; + switch_memory_pool_t *result = 0 ; + + arg1 = (switch_codec *)jarg1; + result = (switch_memory_pool_t *) ((arg1)->memory_pool); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_private_info_set(void * jarg1, void * jarg2) { + switch_codec *arg1 = (switch_codec *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_codec *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->private_info = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_private_info_get(void * jarg1) { + void * jresult ; + switch_codec *arg1 = (switch_codec *) 0 ; + void *result = 0 ; + + arg1 = (switch_codec *)jarg1; + result = (void *) ((arg1)->private_info); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_agreed_pt_set(void * jarg1, unsigned char jarg2) { + switch_codec *arg1 = (switch_codec *) 0 ; + switch_payload_t arg2 ; + + arg1 = (switch_codec *)jarg1; + arg2 = (switch_payload_t)jarg2; + if (arg1) (arg1)->agreed_pt = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_codec_agreed_pt_get(void * jarg1) { + unsigned char jresult ; + switch_codec *arg1 = (switch_codec *) 0 ; + switch_payload_t result; + + arg1 = (switch_codec *)jarg1; + result = (switch_payload_t) ((arg1)->agreed_pt); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_mutex_set(void * jarg1, void * jarg2) { + switch_codec *arg1 = (switch_codec *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_codec *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->mutex = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_mutex_get(void * jarg1) { + void * jresult ; + switch_codec *arg1 = (switch_codec *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_codec *)jarg1; + result = (switch_mutex_t *) ((arg1)->mutex); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_next_set(void * jarg1, void * jarg2) { + switch_codec *arg1 = (switch_codec *) 0 ; + switch_codec *arg2 = (switch_codec *) 0 ; + + arg1 = (switch_codec *)jarg1; + arg2 = (switch_codec *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_next_get(void * jarg1) { + void * jresult ; + switch_codec *arg1 = (switch_codec *) 0 ; + switch_codec *result = 0 ; + + arg1 = (switch_codec *)jarg1; + result = (switch_codec *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_codec() { + void * jresult ; + switch_codec *result = 0 ; + + result = (switch_codec *)new switch_codec(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_codec(void * jarg1) { + switch_codec *arg1 = (switch_codec *) 0 ; + + arg1 = (switch_codec *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_codec_type_set(void * jarg1, int jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + switch_codec_type_t arg2 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (switch_codec_type_t)jarg2; + if (arg1) (arg1)->codec_type = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_implementation_codec_type_get(void * jarg1) { + int jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + switch_codec_type_t result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (switch_codec_type_t) ((arg1)->codec_type); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_ianacode_set(void * jarg1, unsigned char jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + switch_payload_t arg2 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (switch_payload_t)jarg2; + if (arg1) (arg1)->ianacode = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_codec_implementation_ianacode_get(void * jarg1) { + unsigned char jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + switch_payload_t result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (switch_payload_t) ((arg1)->ianacode); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_iananame_set(void * jarg1, char * jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->iananame) delete [] arg1->iananame; + if (arg2) { + arg1->iananame = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->iananame, (const char *)arg2); + } else { + arg1->iananame = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_codec_implementation_iananame_get(void * jarg1) { + char * jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + char *result = 0 ; + + arg1 = (switch_codec_implementation *)jarg1; + result = (char *) ((arg1)->iananame); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_fmtp_set(void * jarg1, char * jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->fmtp) delete [] arg1->fmtp; + if (arg2) { + arg1->fmtp = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->fmtp, (const char *)arg2); + } else { + arg1->fmtp = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_codec_implementation_fmtp_get(void * jarg1) { + char * jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + char *result = 0 ; + + arg1 = (switch_codec_implementation *)jarg1; + result = (char *) ((arg1)->fmtp); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_samples_per_second_set(void * jarg1, unsigned long jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->samples_per_second = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_codec_implementation_samples_per_second_get(void * jarg1) { + unsigned long jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint32_t result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (uint32_t) ((arg1)->samples_per_second); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_actual_samples_per_second_set(void * jarg1, unsigned long jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->actual_samples_per_second = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_codec_implementation_actual_samples_per_second_get(void * jarg1) { + unsigned long jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint32_t result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (uint32_t) ((arg1)->actual_samples_per_second); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_bits_per_second_set(void * jarg1, int jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + int arg2 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->bits_per_second = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_implementation_bits_per_second_get(void * jarg1) { + int jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + int result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (int) ((arg1)->bits_per_second); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_microseconds_per_packet_set(void * jarg1, int jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + int arg2 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->microseconds_per_packet = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_implementation_microseconds_per_packet_get(void * jarg1) { + int jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + int result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (int) ((arg1)->microseconds_per_packet); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_samples_per_packet_set(void * jarg1, unsigned long jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->samples_per_packet = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_codec_implementation_samples_per_packet_get(void * jarg1) { + unsigned long jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint32_t result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (uint32_t) ((arg1)->samples_per_packet); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_decoded_bytes_per_packet_set(void * jarg1, unsigned long jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->decoded_bytes_per_packet = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_codec_implementation_decoded_bytes_per_packet_get(void * jarg1) { + unsigned long jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint32_t result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (uint32_t) ((arg1)->decoded_bytes_per_packet); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_encoded_bytes_per_packet_set(void * jarg1, unsigned long jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->encoded_bytes_per_packet = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_codec_implementation_encoded_bytes_per_packet_get(void * jarg1) { + unsigned long jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint32_t result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (uint32_t) ((arg1)->encoded_bytes_per_packet); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_number_of_channels_set(void * jarg1, unsigned char jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint8_t arg2 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (uint8_t)jarg2; + if (arg1) (arg1)->number_of_channels = arg2; +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_codec_implementation_number_of_channels_get(void * jarg1) { + unsigned char jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint8_t result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (uint8_t) ((arg1)->number_of_channels); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_codec_frames_per_packet_set(void * jarg1, int jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + int arg2 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->codec_frames_per_packet = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_implementation_codec_frames_per_packet_get(void * jarg1) { + int jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + int result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (int) ((arg1)->codec_frames_per_packet); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_init_set(void * jarg1, void * jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + switch_core_codec_init_func_t arg2 = (switch_core_codec_init_func_t) 0 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (switch_core_codec_init_func_t)jarg2; + if (arg1) (arg1)->init = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_implementation_init_get(void * jarg1) { + void * jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + switch_core_codec_init_func_t result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (switch_core_codec_init_func_t) ((arg1)->init); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_encode_set(void * jarg1, void * jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + switch_core_codec_encode_func_t arg2 = (switch_core_codec_encode_func_t) 0 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (switch_core_codec_encode_func_t)jarg2; + if (arg1) (arg1)->encode = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_implementation_encode_get(void * jarg1) { + void * jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + switch_core_codec_encode_func_t result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (switch_core_codec_encode_func_t) ((arg1)->encode); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_decode_set(void * jarg1, void * jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + switch_core_codec_decode_func_t arg2 = (switch_core_codec_decode_func_t) 0 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (switch_core_codec_decode_func_t)jarg2; + if (arg1) (arg1)->decode = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_implementation_decode_get(void * jarg1) { + void * jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + switch_core_codec_decode_func_t result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (switch_core_codec_decode_func_t) ((arg1)->decode); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_destroy_set(void * jarg1, void * jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + switch_core_codec_destroy_func_t arg2 = (switch_core_codec_destroy_func_t) 0 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (switch_core_codec_destroy_func_t)jarg2; + if (arg1) (arg1)->destroy = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_implementation_destroy_get(void * jarg1) { + void * jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + switch_core_codec_destroy_func_t result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (switch_core_codec_destroy_func_t) ((arg1)->destroy); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_codec_id_set(void * jarg1, unsigned long jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->codec_id = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_codec_implementation_codec_id_get(void * jarg1) { + unsigned long jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint32_t result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (uint32_t) ((arg1)->codec_id); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_impl_id_set(void * jarg1, unsigned long jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->impl_id = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_codec_implementation_impl_id_get(void * jarg1) { + unsigned long jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + uint32_t result; + + arg1 = (switch_codec_implementation *)jarg1; + result = (uint32_t) ((arg1)->impl_id); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_implementation_next_set(void * jarg1, void * jarg2) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + switch_codec_implementation *arg2 = (switch_codec_implementation *) 0 ; + + arg1 = (switch_codec_implementation *)jarg1; + arg2 = (switch_codec_implementation *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_implementation_next_get(void * jarg1) { + void * jresult ; + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + switch_codec_implementation *result = 0 ; + + arg1 = (switch_codec_implementation *)jarg1; + result = (switch_codec_implementation *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_codec_implementation() { + void * jresult ; + switch_codec_implementation *result = 0 ; + + result = (switch_codec_implementation *)new switch_codec_implementation(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_codec_implementation(void * jarg1) { + switch_codec_implementation *arg1 = (switch_codec_implementation *) 0 ; + + arg1 = (switch_codec_implementation *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_interface_interface_name_set(void * jarg1, char * jarg2) { + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_codec_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->interface_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->interface_name, (const char *)arg2); + } else { + arg1->interface_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_codec_interface_interface_name_get(void * jarg1) { + char * jresult ; + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_codec_interface *)jarg1; + result = (char *) ((arg1)->interface_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_interface_implementations_set(void * jarg1, void * jarg2) { + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + switch_codec_implementation_t *arg2 = (switch_codec_implementation_t *) 0 ; + + arg1 = (switch_codec_interface *)jarg1; + arg2 = (switch_codec_implementation_t *)jarg2; + if (arg1) (arg1)->implementations = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_interface_implementations_get(void * jarg1) { + void * jresult ; + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + switch_codec_implementation_t *result = 0 ; + + arg1 = (switch_codec_interface *)jarg1; + result = (switch_codec_implementation_t *) ((arg1)->implementations); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_interface_codec_id_set(void * jarg1, unsigned long jarg2) { + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_codec_interface *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->codec_id = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_codec_interface_codec_id_get(void * jarg1) { + unsigned long jresult ; + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + uint32_t result; + + arg1 = (switch_codec_interface *)jarg1; + result = (uint32_t) ((arg1)->codec_id); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_interface_rwlock_set(void * jarg1, void * jarg2) { + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; + + arg1 = (switch_codec_interface *)jarg1; + arg2 = (switch_thread_rwlock_t *)jarg2; + if (arg1) (arg1)->rwlock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_interface_rwlock_get(void * jarg1) { + void * jresult ; + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + switch_thread_rwlock_t *result = 0 ; + + arg1 = (switch_codec_interface *)jarg1; + result = (switch_thread_rwlock_t *) ((arg1)->rwlock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_interface_refs_set(void * jarg1, int jarg2) { + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + int arg2 ; + + arg1 = (switch_codec_interface *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->refs = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_codec_interface_refs_get(void * jarg1) { + int jresult ; + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + int result; + + arg1 = (switch_codec_interface *)jarg1; + result = (int) ((arg1)->refs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_interface_reflock_set(void * jarg1, void * jarg2) { + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_codec_interface *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->reflock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_interface_reflock_get(void * jarg1) { + void * jresult ; + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_codec_interface *)jarg1; + result = (switch_mutex_t *) ((arg1)->reflock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_interface_parent_set(void * jarg1, void * jarg2) { + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + switch_loadable_module_interface_t *arg2 = (switch_loadable_module_interface_t *) 0 ; + + arg1 = (switch_codec_interface *)jarg1; + arg2 = (switch_loadable_module_interface_t *)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_interface_parent_get(void * jarg1) { + void * jresult ; + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_codec_interface *)jarg1; + result = (switch_loadable_module_interface_t *) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_codec_interface_next_set(void * jarg1, void * jarg2) { + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + switch_codec_interface *arg2 = (switch_codec_interface *) 0 ; + + arg1 = (switch_codec_interface *)jarg1; + arg2 = (switch_codec_interface *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_codec_interface_next_get(void * jarg1) { + void * jresult ; + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + switch_codec_interface *result = 0 ; + + arg1 = (switch_codec_interface *)jarg1; + result = (switch_codec_interface *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_codec_interface() { + void * jresult ; + switch_codec_interface *result = 0 ; + + result = (switch_codec_interface *)new switch_codec_interface(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_codec_interface(void * jarg1) { + switch_codec_interface *arg1 = (switch_codec_interface *) 0 ; + + arg1 = (switch_codec_interface *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_application_interface_interface_name_set(void * jarg1, char * jarg2) { + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_application_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->interface_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->interface_name, (const char *)arg2); + } else { + arg1->interface_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_application_interface_interface_name_get(void * jarg1) { + char * jresult ; + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_application_interface *)jarg1; + result = (char *) ((arg1)->interface_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_application_interface_application_function_set(void * jarg1, void * jarg2) { + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + switch_application_function_t arg2 = (switch_application_function_t) 0 ; + + arg1 = (switch_application_interface *)jarg1; + arg2 = (switch_application_function_t)jarg2; + if (arg1) (arg1)->application_function = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_application_interface_application_function_get(void * jarg1) { + void * jresult ; + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + switch_application_function_t result; + + arg1 = (switch_application_interface *)jarg1; + result = (switch_application_function_t) ((arg1)->application_function); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_application_interface_long_desc_set(void * jarg1, char * jarg2) { + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_application_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->long_desc = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->long_desc, (const char *)arg2); + } else { + arg1->long_desc = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_application_interface_long_desc_get(void * jarg1) { + char * jresult ; + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_application_interface *)jarg1; + result = (char *) ((arg1)->long_desc); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_application_interface_short_desc_set(void * jarg1, char * jarg2) { + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_application_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->short_desc = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->short_desc, (const char *)arg2); + } else { + arg1->short_desc = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_application_interface_short_desc_get(void * jarg1) { + char * jresult ; + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_application_interface *)jarg1; + result = (char *) ((arg1)->short_desc); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_application_interface_syntax_set(void * jarg1, char * jarg2) { + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_application_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->syntax = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->syntax, (const char *)arg2); + } else { + arg1->syntax = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_application_interface_syntax_get(void * jarg1) { + char * jresult ; + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_application_interface *)jarg1; + result = (char *) ((arg1)->syntax); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_application_interface_flags_set(void * jarg1, unsigned long jarg2) { + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_application_interface *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_application_interface_flags_get(void * jarg1) { + unsigned long jresult ; + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + uint32_t result; + + arg1 = (switch_application_interface *)jarg1; + result = (uint32_t) ((arg1)->flags); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_application_interface_rwlock_set(void * jarg1, void * jarg2) { + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; + + arg1 = (switch_application_interface *)jarg1; + arg2 = (switch_thread_rwlock_t *)jarg2; + if (arg1) (arg1)->rwlock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_application_interface_rwlock_get(void * jarg1) { + void * jresult ; + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + switch_thread_rwlock_t *result = 0 ; + + arg1 = (switch_application_interface *)jarg1; + result = (switch_thread_rwlock_t *) ((arg1)->rwlock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_application_interface_refs_set(void * jarg1, int jarg2) { + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + int arg2 ; + + arg1 = (switch_application_interface *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->refs = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_application_interface_refs_get(void * jarg1) { + int jresult ; + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + int result; + + arg1 = (switch_application_interface *)jarg1; + result = (int) ((arg1)->refs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_application_interface_reflock_set(void * jarg1, void * jarg2) { + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_application_interface *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->reflock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_application_interface_reflock_get(void * jarg1) { + void * jresult ; + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_application_interface *)jarg1; + result = (switch_mutex_t *) ((arg1)->reflock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_application_interface_parent_set(void * jarg1, void * jarg2) { + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + switch_loadable_module_interface_t *arg2 = (switch_loadable_module_interface_t *) 0 ; + + arg1 = (switch_application_interface *)jarg1; + arg2 = (switch_loadable_module_interface_t *)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_application_interface_parent_get(void * jarg1) { + void * jresult ; + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_application_interface *)jarg1; + result = (switch_loadable_module_interface_t *) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_application_interface_next_set(void * jarg1, void * jarg2) { + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + switch_application_interface *arg2 = (switch_application_interface *) 0 ; + + arg1 = (switch_application_interface *)jarg1; + arg2 = (switch_application_interface *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_application_interface_next_get(void * jarg1) { + void * jresult ; + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + switch_application_interface *result = 0 ; + + arg1 = (switch_application_interface *)jarg1; + result = (switch_application_interface *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_application_interface() { + void * jresult ; + switch_application_interface *result = 0 ; + + result = (switch_application_interface *)new switch_application_interface(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_application_interface(void * jarg1) { + switch_application_interface *arg1 = (switch_application_interface *) 0 ; + + arg1 = (switch_application_interface *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_api_interface_interface_name_set(void * jarg1, char * jarg2) { + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_api_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->interface_name = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->interface_name, (const char *)arg2); + } else { + arg1->interface_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_api_interface_interface_name_get(void * jarg1) { + char * jresult ; + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_api_interface *)jarg1; + result = (char *) ((arg1)->interface_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_api_interface_desc_set(void * jarg1, char * jarg2) { + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_api_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->desc = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->desc, (const char *)arg2); + } else { + arg1->desc = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_api_interface_desc_get(void * jarg1) { + char * jresult ; + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_api_interface *)jarg1; + result = (char *) ((arg1)->desc); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_api_interface_function_set(void * jarg1, void * jarg2) { + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + switch_api_function_t arg2 = (switch_api_function_t) 0 ; + + arg1 = (switch_api_interface *)jarg1; + arg2 = (switch_api_function_t)jarg2; + if (arg1) (arg1)->function = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_api_interface_function_get(void * jarg1) { + void * jresult ; + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + switch_api_function_t result; + + arg1 = (switch_api_interface *)jarg1; + result = (switch_api_function_t) ((arg1)->function); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_api_interface_syntax_set(void * jarg1, char * jarg2) { + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_api_interface *)jarg1; + arg2 = (char *)jarg2; + { + if (arg2) { + arg1->syntax = (char const *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->syntax, (const char *)arg2); + } else { + arg1->syntax = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_api_interface_syntax_get(void * jarg1) { + char * jresult ; + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + char *result = 0 ; + + arg1 = (switch_api_interface *)jarg1; + result = (char *) ((arg1)->syntax); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_api_interface_rwlock_set(void * jarg1, void * jarg2) { + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + switch_thread_rwlock_t *arg2 = (switch_thread_rwlock_t *) 0 ; + + arg1 = (switch_api_interface *)jarg1; + arg2 = (switch_thread_rwlock_t *)jarg2; + if (arg1) (arg1)->rwlock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_api_interface_rwlock_get(void * jarg1) { + void * jresult ; + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + switch_thread_rwlock_t *result = 0 ; + + arg1 = (switch_api_interface *)jarg1; + result = (switch_thread_rwlock_t *) ((arg1)->rwlock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_api_interface_refs_set(void * jarg1, int jarg2) { + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + int arg2 ; + + arg1 = (switch_api_interface *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->refs = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_api_interface_refs_get(void * jarg1) { + int jresult ; + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + int result; + + arg1 = (switch_api_interface *)jarg1; + result = (int) ((arg1)->refs); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_api_interface_reflock_set(void * jarg1, void * jarg2) { + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_api_interface *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->reflock = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_api_interface_reflock_get(void * jarg1) { + void * jresult ; + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_api_interface *)jarg1; + result = (switch_mutex_t *) ((arg1)->reflock); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_api_interface_parent_set(void * jarg1, void * jarg2) { + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + switch_loadable_module_interface_t *arg2 = (switch_loadable_module_interface_t *) 0 ; + + arg1 = (switch_api_interface *)jarg1; + arg2 = (switch_loadable_module_interface_t *)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_api_interface_parent_get(void * jarg1) { + void * jresult ; + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + switch_loadable_module_interface_t *result = 0 ; + + arg1 = (switch_api_interface *)jarg1; + result = (switch_loadable_module_interface_t *) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_api_interface_next_set(void * jarg1, void * jarg2) { + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + switch_api_interface *arg2 = (switch_api_interface *) 0 ; + + arg1 = (switch_api_interface *)jarg1; + arg2 = (switch_api_interface *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_api_interface_next_get(void * jarg1) { + void * jresult ; + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + switch_api_interface *result = 0 ; + + arg1 = (switch_api_interface *)jarg1; + result = (switch_api_interface *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_api_interface() { + void * jresult ; + switch_api_interface *result = 0 ; + + result = (switch_api_interface *)new switch_api_interface(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_api_interface(void * jarg1) { + switch_api_interface *arg1 = (switch_api_interface *) 0 ; + + arg1 = (switch_api_interface *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_timetable_profile_created_set(void * jarg1, void * jarg2) { + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t arg2 ; + switch_time_t *argp2 ; + + arg1 = (switch_channel_timetable *)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)->profile_created = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_timetable_profile_created_get(void * jarg1) { + void * jresult ; + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t result; + + arg1 = (switch_channel_timetable *)jarg1; + result = ((arg1)->profile_created); + jresult = new switch_time_t((const switch_time_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_timetable_created_set(void * jarg1, void * jarg2) { + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t arg2 ; + switch_time_t *argp2 ; + + arg1 = (switch_channel_timetable *)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)->created = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_timetable_created_get(void * jarg1) { + void * jresult ; + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t result; + + arg1 = (switch_channel_timetable *)jarg1; + result = ((arg1)->created); + jresult = new switch_time_t((const switch_time_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_timetable_answered_set(void * jarg1, void * jarg2) { + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t arg2 ; + switch_time_t *argp2 ; + + arg1 = (switch_channel_timetable *)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)->answered = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_timetable_answered_get(void * jarg1) { + void * jresult ; + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t result; + + arg1 = (switch_channel_timetable *)jarg1; + result = ((arg1)->answered); + jresult = new switch_time_t((const switch_time_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_timetable_progress_set(void * jarg1, void * jarg2) { + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t arg2 ; + switch_time_t *argp2 ; + + arg1 = (switch_channel_timetable *)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)->progress = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_timetable_progress_get(void * jarg1) { + void * jresult ; + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t result; + + arg1 = (switch_channel_timetable *)jarg1; + result = ((arg1)->progress); + jresult = new switch_time_t((const switch_time_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_timetable_progress_media_set(void * jarg1, void * jarg2) { + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t arg2 ; + switch_time_t *argp2 ; + + arg1 = (switch_channel_timetable *)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)->progress_media = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_timetable_progress_media_get(void * jarg1) { + void * jresult ; + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t result; + + arg1 = (switch_channel_timetable *)jarg1; + result = ((arg1)->progress_media); + jresult = new switch_time_t((const switch_time_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_timetable_hungup_set(void * jarg1, void * jarg2) { + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t arg2 ; + switch_time_t *argp2 ; + + arg1 = (switch_channel_timetable *)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)->hungup = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_timetable_hungup_get(void * jarg1) { + void * jresult ; + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t result; + + arg1 = (switch_channel_timetable *)jarg1; + result = ((arg1)->hungup); + jresult = new switch_time_t((const switch_time_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_timetable_transferred_set(void * jarg1, void * jarg2) { + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t arg2 ; + switch_time_t *argp2 ; + + arg1 = (switch_channel_timetable *)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)->transferred = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_timetable_transferred_get(void * jarg1) { + void * jresult ; + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t result; + + arg1 = (switch_channel_timetable *)jarg1; + result = ((arg1)->transferred); + jresult = new switch_time_t((const switch_time_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_timetable_resurrected_set(void * jarg1, void * jarg2) { + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t arg2 ; + switch_time_t *argp2 ; + + arg1 = (switch_channel_timetable *)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)->resurrected = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_timetable_resurrected_get(void * jarg1) { + void * jresult ; + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_time_t result; + + arg1 = (switch_channel_timetable *)jarg1; + result = ((arg1)->resurrected); + jresult = new switch_time_t((const switch_time_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_timetable_next_set(void * jarg1, void * jarg2) { + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_channel_timetable *arg2 = (switch_channel_timetable *) 0 ; + + arg1 = (switch_channel_timetable *)jarg1; + arg2 = (switch_channel_timetable *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_timetable_next_get(void * jarg1) { + void * jresult ; + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + switch_channel_timetable *result = 0 ; + + arg1 = (switch_channel_timetable *)jarg1; + result = (switch_channel_timetable *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_channel_timetable() { + void * jresult ; + switch_channel_timetable *result = 0 ; + + result = (switch_channel_timetable *)new switch_channel_timetable(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_channel_timetable(void * jarg1) { + switch_channel_timetable *arg1 = (switch_channel_timetable *) 0 ; + + arg1 = (switch_channel_timetable *)jarg1; + delete arg1; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_get_state(void * jarg1) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_state_t result; + + arg1 = (switch_channel_t *)jarg1; + result = (switch_channel_state_t)switch_channel_get_state(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_get_running_state(void * jarg1) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_state_t result; + + arg1 = (switch_channel_t *)jarg1; + result = (switch_channel_state_t)switch_channel_get_running_state(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_test_ready(void * jarg1, int jarg2, int jarg3) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_bool_t arg2 ; + switch_bool_t arg3 ; + int result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_bool_t)jarg2; + arg3 = (switch_bool_t)jarg3; + result = (int)switch_channel_test_ready(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_wait_for_state(void * jarg1, void * jarg2, int jarg3) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_t *arg2 = (switch_channel_t *) 0 ; + switch_channel_state_t arg3 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_t *)jarg2; + arg3 = (switch_channel_state_t)jarg3; + switch_channel_wait_for_state(arg1,arg2,arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_wait_for_state_timeout(void * jarg1, int jarg2, unsigned long jarg3) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_state_t arg2 ; + uint32_t arg3 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_state_t)jarg2; + arg3 = (uint32_t)jarg3; + switch_channel_wait_for_state_timeout(arg1,arg2,arg3); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_wait_for_flag(void * jarg1, int jarg2, int jarg3, unsigned long jarg4, void * jarg5) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_flag_t arg2 ; + switch_bool_t arg3 ; + uint32_t arg4 ; + switch_channel_t *arg5 = (switch_channel_t *) 0 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_flag_t)jarg2; + arg3 = (switch_bool_t)jarg3; + arg4 = (uint32_t)jarg4; + arg5 = (switch_channel_t *)jarg5; + result = (switch_status_t)switch_channel_wait_for_flag(arg1,arg2,arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_perform_set_state(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 ; + int arg4 ; + switch_channel_state_t arg5 ; + switch_channel_state_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + arg5 = (switch_channel_state_t)jarg5; + result = (switch_channel_state_t)switch_channel_perform_set_state(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_perform_set_running_state(void * jarg1, int jarg2, char * jarg3, char * jarg4, int jarg5) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_state_t arg2 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + int arg5 ; + switch_channel_state_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_state_t)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (int)jarg5; + result = (switch_channel_state_t)switch_channel_perform_set_running_state(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_str2cause(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_call_cause_t result; + + arg1 = (char *)jarg1; + result = (switch_call_cause_t)switch_channel_str2cause((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_get_cause(void * jarg1) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_call_cause_t result; + + arg1 = (switch_channel_t *)jarg1; + result = (switch_call_cause_t)switch_channel_get_cause(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_cause_q850(int jarg1) { + int jresult ; + switch_call_cause_t arg1 ; + switch_call_cause_t result; + + arg1 = (switch_call_cause_t)jarg1; + result = (switch_call_cause_t)switch_channel_cause_q850(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_get_cause_q850(void * jarg1) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_call_cause_t result; + + arg1 = (switch_channel_t *)jarg1; + result = (switch_call_cause_t)switch_channel_get_cause_q850(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_channel_cause2str(int jarg1) { + char * jresult ; + switch_call_cause_t arg1 ; + char *result = 0 ; + + arg1 = (switch_call_cause_t)jarg1; + result = (char *)switch_channel_cause2str(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_get_timetable(void * jarg1) { + void * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_timetable_t *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + result = (switch_channel_timetable_t *)switch_channel_get_timetable(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_alloc(void * jarg1, int jarg2, void * jarg3) { + int jresult ; + switch_channel_t **arg1 = (switch_channel_t **) 0 ; + switch_call_direction_t arg2 ; + switch_memory_pool_t *arg3 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (switch_channel_t **)jarg1; + arg2 = (switch_call_direction_t)jarg2; + arg3 = (switch_memory_pool_t *)jarg3; + result = (switch_status_t)switch_channel_alloc(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_init(void * jarg1, void * jarg2, int jarg3, int jarg4) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_core_session_t *arg2 = (switch_core_session_t *) 0 ; + switch_channel_state_t arg3 ; + switch_channel_flag_t arg4 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_core_session_t *)jarg2; + arg3 = (switch_channel_state_t)jarg3; + arg4 = (switch_channel_flag_t)jarg4; + result = (switch_status_t)switch_channel_init(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_perform_presence(void * jarg1, char * jarg2, char * jarg3, char * jarg4, char * jarg5, char * jarg6, int jarg7) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + char *arg6 = (char *) 0 ; + int arg7 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + arg6 = (char *)jarg6; + arg7 = (int)jarg7; + switch_channel_perform_presence(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,arg7); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_uninit(void * jarg1) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + switch_channel_uninit(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_caller_profile(void * jarg1, void * jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_caller_profile_t *arg2 = (switch_caller_profile_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_caller_profile_t *)jarg2; + switch_channel_set_caller_profile(arg1,arg2); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_get_caller_profile(void * jarg1) { + void * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_caller_profile_t *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + result = (switch_caller_profile_t *)switch_channel_get_caller_profile(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_originator_caller_profile(void * jarg1, void * jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_caller_profile_t *arg2 = (switch_caller_profile_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_caller_profile_t *)jarg2; + switch_channel_set_originator_caller_profile(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_hunt_caller_profile(void * jarg1, void * jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_caller_profile_t *arg2 = (switch_caller_profile_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_caller_profile_t *)jarg2; + switch_channel_set_hunt_caller_profile(arg1,arg2); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_get_originator_caller_profile(void * jarg1) { + void * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_caller_profile_t *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + result = (switch_caller_profile_t *)switch_channel_get_originator_caller_profile(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_originatee_caller_profile(void * jarg1, void * jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_caller_profile_t *arg2 = (switch_caller_profile_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_caller_profile_t *)jarg2; + switch_channel_set_originatee_caller_profile(arg1,arg2); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_get_originatee_caller_profile(void * jarg1) { + void * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_caller_profile_t *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + result = (switch_caller_profile_t *)switch_channel_get_originatee_caller_profile(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_channel_get_uuid(void * jarg1) { + char * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + result = (char *)switch_channel_get_uuid(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_set_profile_var(void * jarg1, char * jarg2, char * jarg3) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (switch_status_t)switch_channel_set_profile_var(arg1,(char const *)arg2,(char const *)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_set_variable_var_check(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_bool_t arg4 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_bool_t)jarg4; + result = (switch_status_t)switch_channel_set_variable_var_check(arg1,(char const *)arg2,(char const *)arg3,arg4); + 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 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + void *arg4 = 0 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (switch_status_t)switch_channel_set_variable_printf(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_set_variable_name_printf(void * jarg1, char * jarg2, char * jarg3) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + void *arg4 = 0 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (switch_status_t)switch_channel_set_variable_name_printf(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_set_variable_partner_var_check(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_bool_t arg4 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_bool_t)jarg4; + result = (switch_status_t)switch_channel_set_variable_partner_var_check(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_channel_get_variable_partner(void * jarg1, char * jarg2) { + char * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + result = (char *)switch_channel_get_variable_partner(arg1,(char const *)arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_export_variable_var_check(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_bool_t arg4 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_bool_t)jarg4; + result = (switch_status_t)switch_channel_export_variable_var_check(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_export_variable_printf(void * jarg1, char * jarg2, char * jarg3) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + void *arg4 = 0 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (switch_status_t)switch_channel_export_variable_printf(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_channel_get_variable_dup(void * jarg1, char * jarg2, int jarg3) { + char * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_bool_t arg3 ; + 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); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_get_variables(void * jarg1, void * jarg2) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_event_t **arg2 = (switch_event_t **) 0 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_event_t **)jarg2; + result = (switch_status_t)switch_channel_get_variables(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_pass_callee_id(void * jarg1, void * jarg2) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_t *arg2 = (switch_channel_t *) 0 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_t *)jarg2; + result = (switch_status_t)switch_channel_pass_callee_id(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_variable_first(void * jarg1) { + void * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_event_header_t *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + result = (switch_event_header_t *)switch_channel_variable_first(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_variable_last(void * jarg1) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + switch_channel_variable_last(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_restart(void * jarg1) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + switch_channel_restart(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_caller_extension_masquerade(void * jarg1, void * jarg2, unsigned long jarg3) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_t *arg2 = (switch_channel_t *) 0 ; + uint32_t arg3 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_t *)jarg2; + arg3 = (uint32_t)jarg3; + result = (switch_status_t)switch_channel_caller_extension_masquerade(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_caller_extension(void * jarg1, void * jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_caller_extension_t *arg2 = (switch_caller_extension_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_caller_extension_t *)jarg2; + switch_channel_set_caller_extension(arg1,arg2); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_get_caller_extension(void * jarg1) { + void * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_caller_extension_t *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + result = (switch_caller_extension_t *)switch_channel_get_caller_extension(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_channel_test_flag(void * jarg1, int jarg2) { + unsigned long jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_flag_t arg2 ; + uint32_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_flag_t)jarg2; + result = (uint32_t)switch_channel_test_flag(arg1,arg2); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_flag_value(void * jarg1, int jarg2, unsigned long jarg3) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_flag_t arg2 ; + uint32_t arg3 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_flag_t)jarg2; + arg3 = (uint32_t)jarg3; + switch_channel_set_flag_value(arg1,arg2,arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_flag_recursive(void * jarg1, int jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_flag_t arg2 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_flag_t)jarg2; + switch_channel_set_flag_recursive(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_cap_value(void * jarg1, int jarg2, unsigned long jarg3) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_cap_t arg2 ; + uint32_t arg3 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_cap_t)jarg2; + arg3 = (uint32_t)jarg3; + switch_channel_set_cap_value(arg1,arg2,arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_clear_cap(void * jarg1, int jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_cap_t arg2 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_cap_t)jarg2; + switch_channel_clear_cap(arg1,arg2); +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_channel_test_cap(void * jarg1, int jarg2) { + unsigned long jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_cap_t arg2 ; + uint32_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_cap_t)jarg2; + result = (uint32_t)switch_channel_test_cap(arg1,arg2); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_set_flag_partner(void * jarg1, int jarg2) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_flag_t arg2 ; + switch_bool_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_flag_t)jarg2; + result = (switch_bool_t)switch_channel_set_flag_partner(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_clear_flag_partner(void * jarg1, int jarg2) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_flag_t arg2 ; + switch_bool_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_flag_t)jarg2; + result = (switch_bool_t)switch_channel_clear_flag_partner(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_channel_test_flag_partner(void * jarg1, int jarg2) { + unsigned long jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_flag_t arg2 ; + uint32_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_flag_t)jarg2; + result = (uint32_t)switch_channel_test_flag_partner(arg1,arg2); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_state_flag(void * jarg1, int jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_flag_t arg2 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_flag_t)jarg2; + switch_channel_set_state_flag(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_clear_flag(void * jarg1, int jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_flag_t arg2 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_flag_t)jarg2; + switch_channel_clear_flag(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_clear_flag_recursive(void * jarg1, int jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_flag_t arg2 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_flag_t)jarg2; + switch_channel_clear_flag_recursive(arg1,arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_perform_answer(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + result = (switch_status_t)switch_channel_perform_answer(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_perform_mark_answered(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + result = (switch_status_t)switch_channel_perform_mark_answered(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_perform_ring_ready_value(void * jarg1, int jarg2, char * jarg3, char * jarg4, int jarg5) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_ring_ready_t arg2 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + int arg5 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_ring_ready_t)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (int)jarg5; + result = (switch_status_t)switch_channel_perform_ring_ready_value(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_perform_pre_answer(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + result = (switch_status_t)switch_channel_perform_pre_answer(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_perform_mark_pre_answered(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + result = (switch_status_t)switch_channel_perform_mark_pre_answered(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_perform_mark_ring_ready_value(void * jarg1, int jarg2, char * jarg3, char * jarg4, int jarg5) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_ring_ready_t arg2 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + int arg5 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_ring_ready_t)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (int)jarg5; + result = (switch_status_t)switch_channel_perform_mark_ring_ready_value(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_add_state_handler(void * jarg1, void * jarg2) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_state_handler_table_t *arg2 = (switch_state_handler_table_t *) 0 ; + int result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_state_handler_table_t *)jarg2; + result = (int)switch_channel_add_state_handler(arg1,(switch_state_handler_table const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_clear_state_handler(void * jarg1, void * jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_state_handler_table_t *arg2 = (switch_state_handler_table_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_state_handler_table_t *)jarg2; + switch_channel_clear_state_handler(arg1,(switch_state_handler_table const *)arg2); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_get_state_handler(void * jarg1, int jarg2) { + void * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + int arg2 ; + switch_state_handler_table_t *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (int)jarg2; + result = (switch_state_handler_table_t *)switch_channel_get_state_handler(arg1,arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_set_private(void * jarg1, char * jarg2, void * jarg3) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + void *arg3 = (void *) 0 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (void *)jarg3; + result = (switch_status_t)switch_channel_set_private(arg1,(char const *)arg2,(void const *)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_get_private(void * jarg1, char * jarg2) { + void * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + void *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + result = (void *)switch_channel_get_private(arg1,(char const *)arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_get_private_partner(void * jarg1, char * jarg2) { + void * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + void *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + result = (void *)switch_channel_get_private_partner(arg1,(char const *)arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_set_name(void * jarg1, char * jarg2) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_channel_set_name(arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_channel_get_name(void * jarg1) { + char * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + result = (char *)switch_channel_get_name(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_perform_hangup(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 ; + int arg4 ; + switch_call_cause_t arg5 ; + switch_channel_state_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + arg5 = (switch_call_cause_t)jarg5; + result = (switch_channel_state_t)switch_channel_perform_hangup(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_has_dtmf(void * jarg1) { + void * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_size_t result; + + arg1 = (switch_channel_t *)jarg1; + result = switch_channel_has_dtmf(arg1); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_queue_dtmf(void * jarg1, void * jarg2) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_dtmf_t *arg2 = (switch_dtmf_t *) 0 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_dtmf_t *)jarg2; + result = (switch_status_t)switch_channel_queue_dtmf(arg1,(switch_dtmf_t const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_queue_dtmf_string(void * jarg1, char * jarg2) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_channel_queue_dtmf_string(arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_dequeue_dtmf(void * jarg1, void * jarg2) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_dtmf_t *arg2 = (switch_dtmf_t *) 0 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_dtmf_t *)jarg2; + result = (switch_status_t)switch_channel_dequeue_dtmf(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_flush_dtmf(void * jarg1) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + switch_channel_flush_dtmf(arg1); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_dequeue_dtmf_string(void * jarg1, char * jarg2, void * jarg3) { + void * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_size_t result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = switch_channel_dequeue_dtmf_string(arg1,arg2,arg3); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_channel_state_name(int jarg1) { + char * jresult ; + switch_channel_state_t arg1 ; + char *result = 0 ; + + arg1 = (switch_channel_state_t)jarg1; + result = (char *)switch_channel_state_name(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_name_state(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_channel_state_t result; + + arg1 = (char *)jarg1; + result = (switch_channel_state_t)switch_channel_name_state((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_event_set_data(void * jarg1, void * jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_event_t *arg2 = (switch_event_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_event_t *)jarg2; + switch_channel_event_set_data(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_event_set_basic_data(void * jarg1, void * jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_event_t *arg2 = (switch_event_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_event_t *)jarg2; + switch_channel_event_set_basic_data(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_event_set_extended_data(void * jarg1, void * jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_event_t *arg2 = (switch_event_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_event_t *)jarg2; + switch_channel_event_set_extended_data(arg1,arg2); +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_channel_expand_variables(void * jarg1, char * jarg2) { + char * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + result = (char *)switch_channel_expand_variables(arg1,(char const *)arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_channel_build_param_string(void * jarg1, void * jarg2, char * jarg3) { + char * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_caller_profile_t *arg2 = (switch_caller_profile_t *) 0 ; + char *arg3 = (char *) 0 ; + char *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_caller_profile_t *)jarg2; + arg3 = (char *)jarg3; + result = (char *)switch_channel_build_param_string(arg1,arg2,(char const *)arg3); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_set_timestamps(void * jarg1) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_status_t result; + + arg1 = (switch_channel_t *)jarg1; + result = (switch_status_t)switch_channel_set_timestamps(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_perform_audio_sync(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + switch_channel_perform_audio_sync(arg1,(char const *)arg2,(char const *)arg3,arg4); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_private_flag(void * jarg1, unsigned long jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (uint32_t)jarg2; + switch_channel_set_private_flag(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_clear_private_flag(void * jarg1, unsigned long jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (uint32_t)jarg2; + switch_channel_clear_private_flag(arg1,arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_test_private_flag(void * jarg1, unsigned long jarg2) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + uint32_t arg2 ; + int result; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (uint32_t)jarg2; + result = (int)switch_channel_test_private_flag(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_app_flag_key(char * jarg1, void * jarg2, unsigned long jarg3) { + char *arg1 = (char *) 0 ; + switch_channel_t *arg2 = (switch_channel_t *) 0 ; + uint32_t arg3 ; + + arg1 = (char *)jarg1; + arg2 = (switch_channel_t *)jarg2; + arg3 = (uint32_t)jarg3; + switch_channel_set_app_flag_key((char const *)arg1,arg2,arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_clear_app_flag_key(char * jarg1, void * jarg2, unsigned long jarg3) { + char *arg1 = (char *) 0 ; + switch_channel_t *arg2 = (switch_channel_t *) 0 ; + uint32_t arg3 ; + + arg1 = (char *)jarg1; + arg2 = (switch_channel_t *)jarg2; + arg3 = (uint32_t)jarg3; + switch_channel_clear_app_flag_key((char const *)arg1,arg2,arg3); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_test_app_flag_key(char * jarg1, void * jarg2, unsigned long jarg3) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_channel_t *arg2 = (switch_channel_t *) 0 ; + uint32_t arg3 ; + int result; + + arg1 = (char *)jarg1; + arg2 = (switch_channel_t *)jarg2; + arg3 = (uint32_t)jarg3; + result = (int)switch_channel_test_app_flag_key((char const *)arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_hangup_time(void * jarg1) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + + arg1 = (switch_channel_t *)jarg1; + switch_channel_set_hangup_time(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_direction(void * jarg1) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_call_direction_t result; + + arg1 = (switch_channel_t *)jarg1; + result = (switch_call_direction_t)switch_channel_direction(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_channel_get_session(void * jarg1) { + void * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_core_session_t *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + result = (switch_core_session_t *)switch_channel_get_session(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_channel_get_flag_string(void * jarg1) { + char * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + result = (char *)switch_channel_get_flag_string(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_channel_get_cap_string(void * jarg1) { + char * jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_channel_t *)jarg1; + result = (char *)switch_channel_get_cap_string(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_state_change_pending(void * jarg1) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + int result; + + arg1 = (switch_channel_t *)jarg1; + result = (int)switch_channel_state_change_pending(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_perform_set_callstate(void * jarg1, int jarg2, char * jarg3, char * jarg4, int jarg5) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_callstate_t arg2 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + int arg5 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_channel_callstate_t)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (int)jarg5; + switch_channel_perform_set_callstate(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_get_callstate(void * jarg1) { + int jresult ; + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_channel_callstate_t result; + + arg1 = (switch_channel_t *)jarg1; + result = (switch_channel_callstate_t)switch_channel_get_callstate(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_channel_callstate2str(int jarg1) { + char * jresult ; + switch_channel_callstate_t arg1 ; + char *result = 0 ; + + arg1 = (switch_channel_callstate_t)jarg1; + result = (char *)switch_channel_callstate2str(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_str2callstate(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_call_cause_t result; + + arg1 = (char *)jarg1; + result = (switch_call_cause_t)switch_channel_str2callstate((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_mark_hold(void * jarg1, int jarg2) { + switch_channel_t *arg1 = (switch_channel_t *) 0 ; + switch_bool_t arg2 ; + + arg1 = (switch_channel_t *)jarg1; + arg2 = (switch_bool_t)jarg2; + switch_channel_mark_hold(arg1,arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_buffer_create(void * jarg1, void * jarg2, void * jarg3) { + int jresult ; + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + switch_buffer_t **arg2 = (switch_buffer_t **) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_status_t result; + + arg1 = (switch_memory_pool_t *)jarg1; + arg2 = (switch_buffer_t **)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = (switch_status_t)switch_buffer_create(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_buffer_create_dynamic(void * jarg1, void * jarg2, void * jarg3, void * jarg4) { + int jresult ; + switch_buffer_t **arg1 = (switch_buffer_t **) 0 ; + switch_size_t arg2 ; + switch_size_t arg3 ; + switch_size_t arg4 ; + switch_size_t *argp2 ; + switch_size_t *argp3 ; + switch_size_t *argp4 ; + switch_status_t result; + + arg1 = (switch_buffer_t **)jarg1; + argp2 = (switch_size_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg2 = *argp2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + argp4 = (switch_size_t *)jarg4; + if (!argp4) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg4 = *argp4; + result = (switch_status_t)switch_buffer_create_dynamic(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_buffer_add_mutex(void * jarg1, void * jarg2) { + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_buffer_t *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + switch_buffer_add_mutex(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_buffer_lock(void * jarg1) { + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + + arg1 = (switch_buffer_t *)jarg1; + switch_buffer_lock(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_buffer_trylock(void * jarg1) { + int jresult ; + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + switch_status_t result; + + arg1 = (switch_buffer_t *)jarg1; + result = (switch_status_t)switch_buffer_trylock(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_buffer_unlock(void * jarg1) { + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + + arg1 = (switch_buffer_t *)jarg1; + switch_buffer_unlock(arg1); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_buffer_len(void * jarg1) { + void * jresult ; + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + switch_size_t result; + + arg1 = (switch_buffer_t *)jarg1; + result = switch_buffer_len(arg1); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_buffer_freespace(void * jarg1) { + void * jresult ; + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + switch_size_t result; + + arg1 = (switch_buffer_t *)jarg1; + result = switch_buffer_freespace(arg1); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_buffer_inuse(void * jarg1) { + void * jresult ; + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + switch_size_t result; + + arg1 = (switch_buffer_t *)jarg1; + result = switch_buffer_inuse(arg1); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_buffer_read(void * jarg1, void * jarg2, void * jarg3) { + void * jresult ; + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + void *arg2 = (void *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_size_t result; + + arg1 = (switch_buffer_t *)jarg1; + arg2 = (void *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = switch_buffer_read(arg1,arg2,arg3); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_buffer_peek(void * jarg1, void * jarg2, void * jarg3) { + void * jresult ; + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + void *arg2 = (void *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_size_t result; + + arg1 = (switch_buffer_t *)jarg1; + arg2 = (void *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = switch_buffer_peek(arg1,arg2,arg3); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_buffer_read_loop(void * jarg1, void * jarg2, void * jarg3) { + void * jresult ; + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + void *arg2 = (void *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_size_t result; + + arg1 = (switch_buffer_t *)jarg1; + arg2 = (void *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = switch_buffer_read_loop(arg1,arg2,arg3); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_buffer_set_loops(void * jarg1, int jarg2) { + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + int32_t arg2 ; + + arg1 = (switch_buffer_t *)jarg1; + arg2 = (int32_t)jarg2; + switch_buffer_set_loops(arg1,arg2); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_buffer_write(void * jarg1, void * jarg2, void * jarg3) { + void * jresult ; + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + void *arg2 = (void *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_size_t result; + + arg1 = (switch_buffer_t *)jarg1; + arg2 = (void *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = switch_buffer_write(arg1,(void const *)arg2,arg3); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_buffer_toss(void * jarg1, void * jarg2) { + void * jresult ; + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + switch_size_t result; + + arg1 = (switch_buffer_t *)jarg1; + argp2 = (switch_size_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg2 = *argp2; + result = switch_buffer_toss(arg1,arg2); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_buffer_zero(void * jarg1) { + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + + arg1 = (switch_buffer_t *)jarg1; + switch_buffer_zero(arg1); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_buffer_slide_write(void * jarg1, void * jarg2, void * jarg3) { + void * jresult ; + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + void *arg2 = (void *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_size_t result; + + arg1 = (switch_buffer_t *)jarg1; + arg2 = (void *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = switch_buffer_slide_write(arg1,(void const *)arg2,arg3); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_buffer_destroy(void * jarg1) { + switch_buffer_t **arg1 = (switch_buffer_t **) 0 ; + + arg1 = (switch_buffer_t **)jarg1; + switch_buffer_destroy(arg1); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_buffer_zwrite(void * jarg1, void * jarg2, void * jarg3) { + void * jresult ; + switch_buffer_t *arg1 = (switch_buffer_t *) 0 ; + void *arg2 = (void *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_size_t result; + + arg1 = (switch_buffer_t *)jarg1; + arg2 = (void *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = switch_buffer_zwrite(arg1,(void const *)arg2,arg3); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_header_name_set(void * jarg1, char * jarg2) { + switch_event_header *arg1 = (switch_event_header *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_event_header *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->name) delete [] arg1->name; + if (arg2) { + arg1->name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->name, (const char *)arg2); + } else { + arg1->name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_event_header_name_get(void * jarg1) { + char * jresult ; + switch_event_header *arg1 = (switch_event_header *) 0 ; + char *result = 0 ; + + arg1 = (switch_event_header *)jarg1; + result = (char *) ((arg1)->name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_header_value_set(void * jarg1, char * jarg2) { + switch_event_header *arg1 = (switch_event_header *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_event_header *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->value) delete [] arg1->value; + if (arg2) { + arg1->value = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->value, (const char *)arg2); + } else { + arg1->value = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_event_header_value_get(void * jarg1) { + char * jresult ; + switch_event_header *arg1 = (switch_event_header *) 0 ; + char *result = 0 ; + + arg1 = (switch_event_header *)jarg1; + result = (char *) ((arg1)->value); + jresult = SWIG_csharp_string_callback((const char *)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 ; + + arg1 = (switch_event_header *)jarg1; + arg2 = (unsigned long)jarg2; + if (arg1) (arg1)->hash = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_event_header_hash_get(void * jarg1) { + unsigned long jresult ; + switch_event_header *arg1 = (switch_event_header *) 0 ; + unsigned long result; + + arg1 = (switch_event_header *)jarg1; + result = (unsigned long) ((arg1)->hash); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_header_next_set(void * jarg1, void * jarg2) { + switch_event_header *arg1 = (switch_event_header *) 0 ; + switch_event_header *arg2 = (switch_event_header *) 0 ; + + arg1 = (switch_event_header *)jarg1; + arg2 = (switch_event_header *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_event_header_next_get(void * jarg1) { + void * jresult ; + switch_event_header *arg1 = (switch_event_header *) 0 ; + switch_event_header *result = 0 ; + + arg1 = (switch_event_header *)jarg1; + result = (switch_event_header *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_event_header() { + void * jresult ; + switch_event_header *result = 0 ; + + result = (switch_event_header *)new switch_event_header(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_event_header(void * jarg1) { + switch_event_header *arg1 = (switch_event_header *) 0 ; + + arg1 = (switch_event_header *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_event_id_set(void * jarg1, int jarg2) { + switch_event *arg1 = (switch_event *) 0 ; + switch_event_types_t arg2 ; + + arg1 = (switch_event *)jarg1; + arg2 = (switch_event_types_t)jarg2; + if (arg1) (arg1)->event_id = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_event_id_get(void * jarg1) { + int jresult ; + switch_event *arg1 = (switch_event *) 0 ; + switch_event_types_t result; + + arg1 = (switch_event *)jarg1; + result = (switch_event_types_t) ((arg1)->event_id); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_priority_set(void * jarg1, int jarg2) { + switch_event *arg1 = (switch_event *) 0 ; + switch_priority_t arg2 ; + + arg1 = (switch_event *)jarg1; + arg2 = (switch_priority_t)jarg2; + if (arg1) (arg1)->priority = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_priority_get(void * jarg1) { + int jresult ; + switch_event *arg1 = (switch_event *) 0 ; + switch_priority_t result; + + arg1 = (switch_event *)jarg1; + result = (switch_priority_t) ((arg1)->priority); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_owner_set(void * jarg1, char * jarg2) { + switch_event *arg1 = (switch_event *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_event *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->owner) delete [] arg1->owner; + if (arg2) { + arg1->owner = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->owner, (const char *)arg2); + } else { + arg1->owner = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_event_owner_get(void * jarg1) { + char * jresult ; + switch_event *arg1 = (switch_event *) 0 ; + char *result = 0 ; + + arg1 = (switch_event *)jarg1; + result = (char *) ((arg1)->owner); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_subclass_name_set(void * jarg1, char * jarg2) { + switch_event *arg1 = (switch_event *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_event *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->subclass_name) delete [] arg1->subclass_name; + if (arg2) { + arg1->subclass_name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->subclass_name, (const char *)arg2); + } else { + arg1->subclass_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_event_subclass_name_get(void * jarg1) { + char * jresult ; + switch_event *arg1 = (switch_event *) 0 ; + char *result = 0 ; + + arg1 = (switch_event *)jarg1; + result = (char *) ((arg1)->subclass_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_headers_set(void * jarg1, void * jarg2) { + switch_event *arg1 = (switch_event *) 0 ; + switch_event_header_t *arg2 = (switch_event_header_t *) 0 ; + + arg1 = (switch_event *)jarg1; + arg2 = (switch_event_header_t *)jarg2; + if (arg1) (arg1)->headers = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_event_headers_get(void * jarg1) { + void * jresult ; + switch_event *arg1 = (switch_event *) 0 ; + switch_event_header_t *result = 0 ; + + arg1 = (switch_event *)jarg1; + result = (switch_event_header_t *) ((arg1)->headers); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_last_header_set(void * jarg1, void * jarg2) { + switch_event *arg1 = (switch_event *) 0 ; + switch_event_header_t *arg2 = (switch_event_header_t *) 0 ; + + arg1 = (switch_event *)jarg1; + arg2 = (switch_event_header_t *)jarg2; + if (arg1) (arg1)->last_header = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_event_last_header_get(void * jarg1) { + void * jresult ; + switch_event *arg1 = (switch_event *) 0 ; + switch_event_header_t *result = 0 ; + + arg1 = (switch_event *)jarg1; + result = (switch_event_header_t *) ((arg1)->last_header); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_body_set(void * jarg1, char * jarg2) { + switch_event *arg1 = (switch_event *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_event *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->body) delete [] arg1->body; + if (arg2) { + arg1->body = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->body, (const char *)arg2); + } else { + arg1->body = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_event_body_get(void * jarg1) { + char * jresult ; + switch_event *arg1 = (switch_event *) 0 ; + char *result = 0 ; + + arg1 = (switch_event *)jarg1; + result = (char *) ((arg1)->body); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_bind_user_data_set(void * jarg1, void * jarg2) { + switch_event *arg1 = (switch_event *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_event *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->bind_user_data = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_event_bind_user_data_get(void * jarg1) { + void * jresult ; + switch_event *arg1 = (switch_event *) 0 ; + void *result = 0 ; + + arg1 = (switch_event *)jarg1; + result = (void *) ((arg1)->bind_user_data); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_event_user_data_set(void * jarg1, void * jarg2) { + switch_event *arg1 = (switch_event *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_event *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->event_user_data = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_event_event_user_data_get(void * jarg1) { + void * jresult ; + switch_event *arg1 = (switch_event *) 0 ; + void *result = 0 ; + + arg1 = (switch_event *)jarg1; + result = (void *) ((arg1)->event_user_data); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_key_set(void * jarg1, unsigned long jarg2) { + switch_event *arg1 = (switch_event *) 0 ; + unsigned long arg2 ; + + arg1 = (switch_event *)jarg1; + arg2 = (unsigned long)jarg2; + if (arg1) (arg1)->key = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_event_key_get(void * jarg1) { + unsigned long jresult ; + switch_event *arg1 = (switch_event *) 0 ; + unsigned long result; + + arg1 = (switch_event *)jarg1; + result = (unsigned long) ((arg1)->key); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_next_set(void * jarg1, void * jarg2) { + switch_event *arg1 = (switch_event *) 0 ; + switch_event *arg2 = (switch_event *) 0 ; + + arg1 = (switch_event *)jarg1; + arg2 = (switch_event *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_event_next_get(void * jarg1) { + void * jresult ; + switch_event *arg1 = (switch_event *) 0 ; + switch_event *result = 0 ; + + arg1 = (switch_event *)jarg1; + result = (switch_event *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_flags_set(void * jarg1, int jarg2) { + switch_event *arg1 = (switch_event *) 0 ; + int arg2 ; + + arg1 = (switch_event *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_flags_get(void * jarg1) { + int jresult ; + switch_event *arg1 = (switch_event *) 0 ; + int result; + + arg1 = (switch_event *)jarg1; + result = (int) ((arg1)->flags); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_event() { + void * jresult ; + switch_event *result = 0 ; + + result = (switch_event *)new switch_event(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_event(void * jarg1) { + switch_event *arg1 = (switch_event *) 0 ; + + arg1 = (switch_event *)jarg1; + delete arg1; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_init(void * jarg1) { + int jresult ; + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (switch_memory_pool_t *)jarg1; + result = (switch_status_t)switch_event_init(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_shutdown() { + int jresult ; + switch_status_t result; + + result = (switch_status_t)switch_event_shutdown(); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_create_subclass_detailed(char * jarg1, char * jarg2, int jarg3, void * jarg4, int jarg5, char * jarg6) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + switch_event_t **arg4 = (switch_event_t **) 0 ; + switch_event_types_t arg5 ; + char *arg6 = (char *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int)jarg3; + arg4 = (switch_event_t **)jarg4; + arg5 = (switch_event_types_t)jarg5; + arg6 = (char *)jarg6; + result = (switch_status_t)switch_event_create_subclass_detailed((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,(char const *)arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_set_priority(void * jarg1, int jarg2) { + int jresult ; + switch_event_t *arg1 = (switch_event_t *) 0 ; + switch_priority_t arg2 ; + switch_status_t result; + + arg1 = (switch_event_t *)jarg1; + arg2 = (switch_priority_t)jarg2; + result = (switch_status_t)switch_event_set_priority(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_event_get_header(void * jarg1, char * jarg2) { + char * jresult ; + switch_event_t *arg1 = (switch_event_t *) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + arg1 = (switch_event_t *)jarg1; + arg2 = (char *)jarg2; + result = (char *)switch_event_get_header(arg1,(char const *)arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_event_get_body(void * jarg1) { + char * jresult ; + switch_event_t *arg1 = (switch_event_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_event_t *)jarg1; + result = (char *)switch_event_get_body(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_set_subclass_name(void * jarg1, char * jarg2) { + int jresult ; + switch_event_t *arg1 = (switch_event_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_event_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_event_set_subclass_name(arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_add_header_string(void * jarg1, int jarg2, char * jarg3, char * jarg4) { + int jresult ; + switch_event_t *arg1 = (switch_event_t *) 0 ; + switch_stack_t arg2 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_event_t *)jarg1; + arg2 = (switch_stack_t)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + result = (switch_status_t)switch_event_add_header_string(arg1,arg2,(char const *)arg3,(char const *)arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_del_header_val(void * jarg1, char * jarg2, char * jarg3) { + int jresult ; + switch_event_t *arg1 = (switch_event_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_event_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (switch_status_t)switch_event_del_header_val(arg1,(char const *)arg2,(char const *)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_destroy(void * jarg1) { + switch_event_t **arg1 = (switch_event_t **) 0 ; + + arg1 = (switch_event_t **)jarg1; + switch_event_destroy(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_dup(void * jarg1, void * jarg2) { + int jresult ; + switch_event_t **arg1 = (switch_event_t **) 0 ; + switch_event_t *arg2 = (switch_event_t *) 0 ; + switch_status_t result; + + arg1 = (switch_event_t **)jarg1; + arg2 = (switch_event_t *)jarg2; + result = (switch_status_t)switch_event_dup(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_merge(void * jarg1, void * jarg2) { + switch_event_t *arg1 = (switch_event_t *) 0 ; + switch_event_t *arg2 = (switch_event_t *) 0 ; + + arg1 = (switch_event_t *)jarg1; + arg2 = (switch_event_t *)jarg2; + switch_event_merge(arg1,arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_fire_detailed(char * jarg1, char * jarg2, int jarg3, void * jarg4, void * jarg5) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + switch_event_t **arg4 = (switch_event_t **) 0 ; + void *arg5 = (void *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int)jarg3; + arg4 = (switch_event_t **)jarg4; + arg5 = (void *)jarg5; + result = (switch_status_t)switch_event_fire_detailed((char const *)arg1,(char const *)arg2,arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_prep_for_delivery_detailed(char * jarg1, char * jarg2, int jarg3, void * jarg4) { + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + switch_event_t *arg4 = (switch_event_t *) 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int)jarg3; + arg4 = (switch_event_t *)jarg4; + switch_event_prep_for_delivery_detailed((char const *)arg1,(char const *)arg2,arg3,arg4); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_bind(char * jarg1, int jarg2, char * jarg3, void * jarg4, void * jarg5) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_event_types_t arg2 ; + char *arg3 = (char *) 0 ; + switch_event_callback_t arg4 = (switch_event_callback_t) 0 ; + void *arg5 = (void *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_event_types_t)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_event_callback_t)jarg4; + arg5 = (void *)jarg5; + result = (switch_status_t)switch_event_bind((char const *)arg1,arg2,(char const *)arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_bind_removable(char * jarg1, int jarg2, char * jarg3, void * jarg4, void * jarg5, void * jarg6) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_event_types_t arg2 ; + char *arg3 = (char *) 0 ; + switch_event_callback_t arg4 = (switch_event_callback_t) 0 ; + void *arg5 = (void *) 0 ; + switch_event_node_t **arg6 = (switch_event_node_t **) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_event_types_t)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_event_callback_t)jarg4; + arg5 = (void *)jarg5; + arg6 = (switch_event_node_t **)jarg6; + result = (switch_status_t)switch_event_bind_removable((char const *)arg1,arg2,(char const *)arg3,arg4,arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_unbind(void * jarg1) { + int jresult ; + switch_event_node_t **arg1 = (switch_event_node_t **) 0 ; + switch_status_t result; + + arg1 = (switch_event_node_t **)jarg1; + result = (switch_status_t)switch_event_unbind(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_unbind_callback(void * jarg1) { + int jresult ; + switch_event_callback_t arg1 = (switch_event_callback_t) 0 ; + switch_status_t result; + + arg1 = (switch_event_callback_t)jarg1; + result = (switch_status_t)switch_event_unbind_callback(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_event_name(int jarg1) { + char * jresult ; + switch_event_types_t arg1 ; + char *result = 0 ; + + arg1 = (switch_event_types_t)jarg1; + result = (char *)switch_event_name(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_name_event(char * jarg1, void * jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_event_types_t *arg2 = (switch_event_types_t *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_event_types_t *)jarg2; + result = (switch_status_t)switch_name_event((char const *)arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_reserve_subclass_detailed(char * jarg1, char * jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_event_reserve_subclass_detailed((char const *)arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_free_subclass_detailed(char * jarg1, char * jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_event_free_subclass_detailed((char const *)arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_serialize(void * jarg1, void * jarg2, int jarg3) { + int jresult ; + switch_event_t *arg1 = (switch_event_t *) 0 ; + char **arg2 = (char **) 0 ; + switch_bool_t arg3 ; + switch_status_t result; + + arg1 = (switch_event_t *)jarg1; + arg2 = (char **)jarg2; + arg3 = (switch_bool_t)jarg3; + result = (switch_status_t)switch_event_serialize(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_serialize_json(void * jarg1, void * jarg2) { + int jresult ; + switch_event_t *arg1 = (switch_event_t *) 0 ; + char **arg2 = (char **) 0 ; + switch_status_t result; + + arg1 = (switch_event_t *)jarg1; + arg2 = (char **)jarg2; + result = (switch_status_t)switch_event_serialize_json(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_create_json(void * jarg1, char * jarg2) { + int jresult ; + switch_event_t **arg1 = (switch_event_t **) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_event_t **)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_event_create_json(arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_create_brackets(char * jarg1, char jarg2, char jarg3, char jarg4, void * jarg5, void * jarg6) { + int jresult ; + char *arg1 = (char *) 0 ; + char arg2 ; + char arg3 ; + char arg4 ; + switch_event_t **arg5 = (switch_event_t **) 0 ; + char **arg6 = (char **) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char)jarg2; + arg3 = (char)jarg3; + arg4 = (char)jarg4; + arg5 = (switch_event_t **)jarg5; + arg6 = (char **)jarg6; + result = (switch_status_t)switch_event_create_brackets(arg1,arg2,arg3,arg4,arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_running() { + int jresult ; + switch_status_t result; + + result = (switch_status_t)switch_event_running(); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_event_expand_headers(void * jarg1, char * jarg2) { + char * jresult ; + switch_event_t *arg1 = (switch_event_t *) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + arg1 = (switch_event_t *)jarg1; + arg2 = (char *)jarg2; + result = (char *)switch_event_expand_headers(arg1,(char const *)arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_create_pres_in_detailed(char * jarg1, char * jarg2, int jarg3, char * jarg4, char * jarg5, char * jarg6, char * jarg7, char * jarg8, char * jarg9, char * jarg10, int jarg11, char * jarg12, char * jarg13, char * jarg14, char * jarg15) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + char *arg6 = (char *) 0 ; + char *arg7 = (char *) 0 ; + char *arg8 = (char *) 0 ; + char *arg9 = (char *) 0 ; + char *arg10 = (char *) 0 ; + int arg11 ; + char *arg12 = (char *) 0 ; + char *arg13 = (char *) 0 ; + char *arg14 = (char *) 0 ; + char *arg15 = (char *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + arg6 = (char *)jarg6; + arg7 = (char *)jarg7; + arg8 = (char *)jarg8; + arg9 = (char *)jarg9; + arg10 = (char *)jarg10; + arg11 = (int)jarg11; + arg12 = (char *)jarg12; + arg13 = (char *)jarg13; + arg14 = (char *)jarg14; + arg15 = (char *)jarg15; + result = (switch_status_t)switch_event_create_pres_in_detailed(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,(char const *)arg9,(char const *)arg10,arg11,(char const *)arg12,(char const *)arg13,(char const *)arg14,(char const *)arg15); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_event_create_plain(void * jarg1, int jarg2) { + int jresult ; + switch_event_t **arg1 = (switch_event_t **) 0 ; + switch_event_types_t arg2 ; + switch_status_t result; + + arg1 = (switch_event_t **)jarg1; + arg2 = (switch_event_types_t)jarg2; + result = (switch_status_t)switch_event_create_plain(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_event_deliver(void * jarg1) { + switch_event_t **arg1 = (switch_event_t **) 0 ; + + arg1 = (switch_event_t **)jarg1; + switch_event_deliver(arg1); +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_event_build_param_string(void * jarg1, char * jarg2, void * jarg3) { + char * jresult ; + switch_event_t *arg1 = (switch_event_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_hash_t *arg3 = (switch_hash_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_event_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_hash_t *)jarg3; + result = (char *)switch_event_build_param_string(arg1,(char const *)arg2,arg3); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_RESAMPLE_QUALITY_get() { + int jresult ; + int result; + + result = (int)(2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_audio_resampler_t_resampler_set(void * jarg1, void * jarg2) { + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_audio_resampler_t *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->resampler = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_audio_resampler_t_resampler_get(void * jarg1) { + void * jresult ; + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + void *result = 0 ; + + arg1 = (switch_audio_resampler_t *)jarg1; + result = (void *) ((arg1)->resampler); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_audio_resampler_t_from_rate_set(void * jarg1, int jarg2) { + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + int arg2 ; + + arg1 = (switch_audio_resampler_t *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->from_rate = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_audio_resampler_t_from_rate_get(void * jarg1) { + int jresult ; + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + int result; + + arg1 = (switch_audio_resampler_t *)jarg1; + result = (int) ((arg1)->from_rate); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_audio_resampler_t_to_rate_set(void * jarg1, int jarg2) { + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + int arg2 ; + + arg1 = (switch_audio_resampler_t *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->to_rate = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_audio_resampler_t_to_rate_get(void * jarg1) { + int jresult ; + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + int result; + + arg1 = (switch_audio_resampler_t *)jarg1; + result = (int) ((arg1)->to_rate); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_audio_resampler_t_factor_set(void * jarg1, double jarg2) { + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + double arg2 ; + + arg1 = (switch_audio_resampler_t *)jarg1; + arg2 = (double)jarg2; + if (arg1) (arg1)->factor = arg2; +} + + +SWIGEXPORT double SWIGSTDCALL CSharp_switch_audio_resampler_t_factor_get(void * jarg1) { + double jresult ; + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + double result; + + arg1 = (switch_audio_resampler_t *)jarg1; + result = (double) ((arg1)->factor); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_audio_resampler_t_rfactor_set(void * jarg1, double jarg2) { + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + double arg2 ; + + arg1 = (switch_audio_resampler_t *)jarg1; + arg2 = (double)jarg2; + if (arg1) (arg1)->rfactor = arg2; +} + + +SWIGEXPORT double SWIGSTDCALL CSharp_switch_audio_resampler_t_rfactor_get(void * jarg1) { + double jresult ; + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + double result; + + arg1 = (switch_audio_resampler_t *)jarg1; + result = (double) ((arg1)->rfactor); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_audio_resampler_t_to_set(void * jarg1, void * jarg2) { + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + int16_t *arg2 = (int16_t *) 0 ; + + arg1 = (switch_audio_resampler_t *)jarg1; + arg2 = (int16_t *)jarg2; + if (arg1) (arg1)->to = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_audio_resampler_t_to_get(void * jarg1) { + void * jresult ; + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + int16_t *result = 0 ; + + arg1 = (switch_audio_resampler_t *)jarg1; + result = (int16_t *) ((arg1)->to); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_audio_resampler_t_to_len_set(void * jarg1, unsigned long jarg2) { + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_audio_resampler_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->to_len = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_audio_resampler_t_to_len_get(void * jarg1) { + unsigned long jresult ; + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + uint32_t result; + + arg1 = (switch_audio_resampler_t *)jarg1; + result = (uint32_t) ((arg1)->to_len); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_audio_resampler_t_to_size_set(void * jarg1, unsigned long jarg2) { + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_audio_resampler_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->to_size = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_audio_resampler_t_to_size_get(void * jarg1) { + unsigned long jresult ; + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + uint32_t result; + + arg1 = (switch_audio_resampler_t *)jarg1; + result = (uint32_t) ((arg1)->to_size); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_audio_resampler_t() { + void * jresult ; + switch_audio_resampler_t *result = 0 ; + + result = (switch_audio_resampler_t *)new switch_audio_resampler_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_audio_resampler_t(void * jarg1) { + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + + arg1 = (switch_audio_resampler_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_resample_perform_create(void * jarg1, unsigned long jarg2, unsigned long jarg3, unsigned long jarg4, int jarg5, unsigned long jarg6, char * jarg7, char * jarg8, int jarg9) { + int jresult ; + switch_audio_resampler_t **arg1 = (switch_audio_resampler_t **) 0 ; + uint32_t arg2 ; + uint32_t arg3 ; + uint32_t arg4 ; + int arg5 ; + uint32_t arg6 ; + char *arg7 = (char *) 0 ; + char *arg8 = (char *) 0 ; + int arg9 ; + switch_status_t result; + + arg1 = (switch_audio_resampler_t **)jarg1; + arg2 = (uint32_t)jarg2; + arg3 = (uint32_t)jarg3; + arg4 = (uint32_t)jarg4; + arg5 = (int)jarg5; + arg6 = (uint32_t)jarg6; + arg7 = (char *)jarg7; + arg8 = (char *)jarg8; + arg9 = (int)jarg9; + result = (switch_status_t)switch_resample_perform_create(arg1,arg2,arg3,arg4,arg5,arg6,(char const *)arg7,(char const *)arg8,arg9); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_resample_destroy(void * jarg1) { + switch_audio_resampler_t **arg1 = (switch_audio_resampler_t **) 0 ; + + arg1 = (switch_audio_resampler_t **)jarg1; + switch_resample_destroy(arg1); +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_resample_process(void * jarg1, void * jarg2, unsigned long jarg3) { + unsigned long jresult ; + switch_audio_resampler_t *arg1 = (switch_audio_resampler_t *) 0 ; + int16_t *arg2 = (int16_t *) 0 ; + uint32_t arg3 ; + uint32_t result; + + arg1 = (switch_audio_resampler_t *)jarg1; + arg2 = (int16_t *)jarg2; + arg3 = (uint32_t)jarg3; + result = (uint32_t)switch_resample_process(arg1,arg2,arg3); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_float_to_short(void * jarg1, void * jarg2, void * jarg3) { + void * jresult ; + float *arg1 = (float *) 0 ; + short *arg2 = (short *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_size_t result; + + arg1 = (float *)jarg1; + arg2 = (short *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = switch_float_to_short(arg1,arg2,arg3); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_char_to_float(char * jarg1, void * jarg2, int jarg3) { + int jresult ; + char *arg1 = (char *) 0 ; + float *arg2 = (float *) 0 ; + int arg3 ; + int result; + + arg1 = (char *)jarg1; + arg2 = (float *)jarg2; + arg3 = (int)jarg3; + result = (int)switch_char_to_float(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_float_to_char(void * jarg1, char * jarg2, int jarg3) { + int jresult ; + float *arg1 = (float *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + int result; + + arg1 = (float *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int)jarg3; + result = (int)switch_float_to_char(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_short_to_float(void * jarg1, void * jarg2, int jarg3) { + int jresult ; + short *arg1 = (short *) 0 ; + float *arg2 = (float *) 0 ; + int arg3 ; + int result; + + arg1 = (short *)jarg1; + arg2 = (float *)jarg2; + arg3 = (int)jarg3; + result = (int)switch_short_to_float(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_swap_linear(void * jarg1, int jarg2) { + int16_t *arg1 = (int16_t *) 0 ; + int arg2 ; + + arg1 = (int16_t *)jarg1; + arg2 = (int)jarg2; + switch_swap_linear(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_generate_sln_silence(void * jarg1, unsigned long jarg2, unsigned long jarg3) { + int16_t *arg1 = (int16_t *) 0 ; + uint32_t arg2 ; + uint32_t arg3 ; + + arg1 = (int16_t *)jarg1; + arg2 = (uint32_t)jarg2; + arg3 = (uint32_t)jarg3; + switch_generate_sln_silence(arg1,arg2,arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_change_sln_volume(void * jarg1, unsigned long jarg2, int jarg3) { + int16_t *arg1 = (int16_t *) 0 ; + uint32_t arg2 ; + int32_t arg3 ; + + arg1 = (int16_t *)jarg1; + arg2 = (uint32_t)jarg2; + arg3 = (int32_t)jarg3; + switch_change_sln_volume(arg1,arg2,arg3); +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_merge_sln(void * jarg1, unsigned long jarg2, void * jarg3, unsigned long jarg4) { + unsigned long jresult ; + int16_t *arg1 = (int16_t *) 0 ; + uint32_t arg2 ; + int16_t *arg3 = (int16_t *) 0 ; + uint32_t arg4 ; + uint32_t result; + + arg1 = (int16_t *)jarg1; + arg2 = (uint32_t)jarg2; + arg3 = (int16_t *)jarg3; + arg4 = (uint32_t)jarg4; + result = (uint32_t)switch_merge_sln(arg1,arg2,arg3,arg4); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_mux_channels(void * jarg1, void * jarg2, unsigned long jarg3) { + int16_t *arg1 = (int16_t *) 0 ; + switch_size_t arg2 ; + uint32_t arg3 ; + switch_size_t *argp2 ; + + arg1 = (int16_t *)jarg1; + argp2 = (switch_size_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return ; + } + arg2 = *argp2; + arg3 = (uint32_t)jarg3; + switch_mux_channels(arg1,arg2,arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_session_set(void * jarg1, void * jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_core_session_t *arg2 = (switch_core_session_t *) 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (switch_core_session_t *)jarg2; + if (arg1) (arg1)->session = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_unicast_conninfo_session_get(void * jarg1) { + void * jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_core_session_t *result = 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (switch_core_session_t *) ((arg1)->session); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_read_codec_set(void * jarg1, void * jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_codec_t *arg2 = (switch_codec_t *) 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (switch_codec_t *)jarg2; + if (arg1) (arg1)->read_codec = *arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_unicast_conninfo_read_codec_get(void * jarg1) { + void * jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_codec_t *result = 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (switch_codec_t *)& ((arg1)->read_codec); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_write_frame_set(void * jarg1, void * jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_frame_t *arg2 = (switch_frame_t *) 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (switch_frame_t *)jarg2; + if (arg1) (arg1)->write_frame = *arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_unicast_conninfo_write_frame_get(void * jarg1) { + void * jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_frame_t *result = 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (switch_frame_t *)& ((arg1)->write_frame); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_write_frame_data_set(void * jarg1, void * jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_byte_t *arg2 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (switch_byte_t *)jarg2; + { + size_t ii; + switch_byte_t *b = (switch_byte_t *) arg1->write_frame_data; + for (ii = 0; ii < (size_t)4096; ii++) b[ii] = *((switch_byte_t *) arg2 + ii); + } +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_unicast_conninfo_write_frame_data_get(void * jarg1) { + void * jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_byte_t *result = 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (switch_byte_t *)(switch_byte_t *) ((arg1)->write_frame_data); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_socket_set(void * jarg1, void * jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_socket_t *arg2 = (switch_socket_t *) 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (switch_socket_t *)jarg2; + if (arg1) (arg1)->socket = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_unicast_conninfo_socket_get(void * jarg1) { + void * jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_socket_t *result = 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (switch_socket_t *) ((arg1)->socket); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_local_ip_set(void * jarg1, char * jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->local_ip) delete [] arg1->local_ip; + if (arg2) { + arg1->local_ip = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->local_ip, (const char *)arg2); + } else { + arg1->local_ip = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_unicast_conninfo_local_ip_get(void * jarg1) { + char * jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + char *result = 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (char *) ((arg1)->local_ip); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_local_port_set(void * jarg1, unsigned short jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_port_t arg2 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (switch_port_t)jarg2; + if (arg1) (arg1)->local_port = arg2; +} + + +SWIGEXPORT unsigned short SWIGSTDCALL CSharp_switch_unicast_conninfo_local_port_get(void * jarg1) { + unsigned short jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_port_t result; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (switch_port_t) ((arg1)->local_port); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_remote_ip_set(void * jarg1, char * jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->remote_ip) delete [] arg1->remote_ip; + if (arg2) { + arg1->remote_ip = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->remote_ip, (const char *)arg2); + } else { + arg1->remote_ip = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_unicast_conninfo_remote_ip_get(void * jarg1) { + char * jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + char *result = 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (char *) ((arg1)->remote_ip); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_remote_port_set(void * jarg1, unsigned short jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_port_t arg2 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (switch_port_t)jarg2; + if (arg1) (arg1)->remote_port = arg2; +} + + +SWIGEXPORT unsigned short SWIGSTDCALL CSharp_switch_unicast_conninfo_remote_port_get(void * jarg1) { + unsigned short jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_port_t result; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (switch_port_t) ((arg1)->remote_port); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_local_addr_set(void * jarg1, void * jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_sockaddr_t *arg2 = (switch_sockaddr_t *) 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (switch_sockaddr_t *)jarg2; + if (arg1) (arg1)->local_addr = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_unicast_conninfo_local_addr_get(void * jarg1) { + void * jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_sockaddr_t *result = 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (switch_sockaddr_t *) ((arg1)->local_addr); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_remote_addr_set(void * jarg1, void * jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_sockaddr_t *arg2 = (switch_sockaddr_t *) 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (switch_sockaddr_t *)jarg2; + if (arg1) (arg1)->remote_addr = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_unicast_conninfo_remote_addr_get(void * jarg1) { + void * jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_sockaddr_t *result = 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (switch_sockaddr_t *) ((arg1)->remote_addr); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_flag_mutex_set(void * jarg1, void * jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_mutex_t *arg2 = (switch_mutex_t *) 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (switch_mutex_t *)jarg2; + if (arg1) (arg1)->flag_mutex = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_unicast_conninfo_flag_mutex_get(void * jarg1) { + void * jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + switch_mutex_t *result = 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (switch_mutex_t *) ((arg1)->flag_mutex); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_flags_set(void * jarg1, int jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + int32_t arg2 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (int32_t)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_unicast_conninfo_flags_get(void * jarg1) { + int jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + int32_t result; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (int32_t) ((arg1)->flags); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_type_set(void * jarg1, int jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + int arg2 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->type = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_unicast_conninfo_type_get(void * jarg1) { + int jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + int result; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (int) ((arg1)->type); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_transport_set(void * jarg1, int jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + int arg2 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->transport = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_unicast_conninfo_transport_get(void * jarg1) { + int jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + int result; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (int) ((arg1)->transport); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_unicast_conninfo_stream_id_set(void * jarg1, int jarg2) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + int arg2 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->stream_id = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_unicast_conninfo_stream_id_get(void * jarg1) { + int jresult ; + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + int result; + + arg1 = (switch_unicast_conninfo *)jarg1; + result = (int) ((arg1)->stream_id); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_unicast_conninfo() { + void * jresult ; + switch_unicast_conninfo *result = 0 ; + + result = (switch_unicast_conninfo *)new switch_unicast_conninfo(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_unicast_conninfo(void * jarg1) { + switch_unicast_conninfo *arg1 = (switch_unicast_conninfo *) 0 ; + + arg1 = (switch_unicast_conninfo *)jarg1; + delete arg1; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_deactivate_unicast(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_deactivate_unicast(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_activate_unicast(void * jarg1, char * jarg2, unsigned short jarg3, char * jarg4, unsigned short jarg5, char * jarg6, char * jarg7) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_port_t arg3 ; + char *arg4 = (char *) 0 ; + switch_port_t arg5 ; + char *arg6 = (char *) 0 ; + char *arg7 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_port_t)jarg3; + arg4 = (char *)jarg4; + arg5 = (switch_port_t)jarg5; + arg6 = (char *)jarg6; + arg7 = (char *)jarg7; + result = (switch_status_t)switch_ivr_activate_unicast(arg1,arg2,arg3,arg4,arg5,arg6,arg7); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_generate_xml_cdr(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_xml_t *arg2 = (switch_xml_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_xml_t *)jarg2; + result = (switch_status_t)switch_ivr_generate_xml_cdr(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_set_xml_profile_data(void * jarg1, void * jarg2, int jarg3) { + int jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + switch_caller_profile_t *arg2 = (switch_caller_profile_t *) 0 ; + int arg3 ; + int result; + + arg1 = (switch_xml_t)jarg1; + arg2 = (switch_caller_profile_t *)jarg2; + arg3 = (int)jarg3; + result = (int)switch_ivr_set_xml_profile_data(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_set_xml_chan_vars(void * jarg1, void * jarg2, int jarg3) { + int jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + switch_channel_t *arg2 = (switch_channel_t *) 0 ; + int arg3 ; + int result; + + arg1 = (switch_xml_t)jarg1; + arg2 = (switch_channel_t *)jarg2; + arg3 = (int)jarg3; + result = (int)switch_ivr_set_xml_chan_vars(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_parse_event(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_event_t *arg2 = (switch_event_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_event_t *)jarg2; + result = (switch_status_t)switch_ivr_parse_event(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_parse_all_events(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_parse_all_events(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_parse_next_event(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_parse_next_event(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_parse_all_messages(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_parse_all_messages(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_sleep(void * jarg1, unsigned long jarg2, int jarg3, void * jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t arg2 ; + switch_bool_t arg3 ; + switch_input_args_t *arg4 = (switch_input_args_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (uint32_t)jarg2; + arg3 = (switch_bool_t)jarg3; + arg4 = (switch_input_args_t *)jarg4; + result = (switch_status_t)switch_ivr_sleep(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_park(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_input_args_t *arg2 = (switch_input_args_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_input_args_t *)jarg2; + result = (switch_status_t)switch_ivr_park(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_collect_digits_callback(void * jarg1, void * jarg2, unsigned long jarg3, unsigned long jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_input_args_t *arg2 = (switch_input_args_t *) 0 ; + uint32_t arg3 ; + uint32_t arg4 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_input_args_t *)jarg2; + arg3 = (uint32_t)jarg3; + arg4 = (uint32_t)jarg4; + result = (switch_status_t)switch_ivr_collect_digits_callback(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_collect_digits_count(void * jarg1, char * jarg2, void * jarg3, void * jarg4, char * jarg5, char * jarg6, unsigned long jarg7, unsigned long jarg8, unsigned long jarg9) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_size_t arg3 ; + switch_size_t arg4 ; + char *arg5 = (char *) 0 ; + char *arg6 = (char *) 0 ; + uint32_t arg7 ; + uint32_t arg8 ; + uint32_t arg9 ; + switch_size_t *argp3 ; + switch_size_t *argp4 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + argp4 = (switch_size_t *)jarg4; + if (!argp4) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg4 = *argp4; + arg5 = (char *)jarg5; + arg6 = (char *)jarg6; + arg7 = (uint32_t)jarg7; + arg8 = (uint32_t)jarg8; + arg9 = (uint32_t)jarg9; + result = (switch_status_t)switch_ivr_collect_digits_count(arg1,arg2,arg3,arg4,(char const *)arg5,arg6,arg7,arg8,arg9); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_detect_speech(void * jarg1, char * jarg2, char * jarg3, char * jarg4, char * jarg5, void * jarg6) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + switch_asr_handle_t *arg6 = (switch_asr_handle_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + arg6 = (switch_asr_handle_t *)jarg6; + result = (switch_status_t)switch_ivr_detect_speech(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_stop_detect_speech(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_stop_detect_speech(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_pause_detect_speech(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_pause_detect_speech(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_resume_detect_speech(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_resume_detect_speech(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_detect_speech_load_grammar(void * jarg1, char * jarg2, char * jarg3) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (switch_status_t)switch_ivr_detect_speech_load_grammar(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_detect_speech_unload_grammar(void * jarg1, char * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_ivr_detect_speech_unload_grammar(arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_set_param_detect_speech(void * jarg1, char * jarg2, char * jarg3) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (switch_status_t)switch_ivr_set_param_detect_speech(arg1,(char const *)arg2,(char const *)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_record_session(void * jarg1, char * jarg2, unsigned long jarg3, void * jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + uint32_t arg3 ; + switch_file_handle_t *arg4 = (switch_file_handle_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (uint32_t)jarg3; + arg4 = (switch_file_handle_t *)jarg4; + result = (switch_status_t)switch_ivr_record_session(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_eavesdrop_session(void * jarg1, char * jarg2, char * jarg3, unsigned long jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_eavesdrop_flag_t arg4 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_eavesdrop_flag_t)jarg4; + result = (switch_status_t)switch_ivr_eavesdrop_session(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_displace_session(void * jarg1, char * jarg2, unsigned long jarg3, char * jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + uint32_t arg3 ; + char *arg4 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (uint32_t)jarg3; + arg4 = (char *)jarg4; + result = (switch_status_t)switch_ivr_displace_session(arg1,(char const *)arg2,arg3,(char const *)arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_stop_displace_session(void * jarg1, char * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_ivr_stop_displace_session(arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_stop_record_session(void * jarg1, char * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_ivr_stop_record_session(arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_session_audio(void * jarg1, char * jarg2, char * jarg3, int jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + result = (switch_status_t)switch_ivr_session_audio(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_stop_session_audio(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_stop_session_audio(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_inband_dtmf_session(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_inband_dtmf_session(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_stop_inband_dtmf_session(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_stop_inband_dtmf_session(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_inband_dtmf_generate_session(void * jarg1, int jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_bool_t arg2 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_bool_t)jarg2; + result = (switch_status_t)switch_ivr_inband_dtmf_generate_session(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_stop_inband_dtmf_generate_session(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_stop_inband_dtmf_generate_session(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_ivr_session_echo(void * jarg1, void * jarg2) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_input_args_t *arg2 = (switch_input_args_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_input_args_t *)jarg2; + switch_ivr_session_echo(arg1,arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_stop_tone_detect_session(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_stop_tone_detect_session(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_tone_detect_session(void * jarg1, char * jarg2, char * jarg3, char * jarg4, void * jarg5, int jarg6, char * jarg7, char * jarg8, void * jarg9) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + time_t arg5 ; + int arg6 ; + char *arg7 = (char *) 0 ; + char *arg8 = (char *) 0 ; + switch_tone_detect_callback_t arg9 = (switch_tone_detect_callback_t) 0 ; + time_t *argp5 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + argp5 = (time_t *)jarg5; + if (!argp5) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null time_t", 0); + return 0; + } + arg5 = *argp5; + arg6 = (int)jarg6; + arg7 = (char *)jarg7; + arg8 = (char *)jarg8; + arg9 = (switch_tone_detect_callback_t)jarg9; + result = (switch_status_t)switch_ivr_tone_detect_session(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,arg5,arg6,(char const *)arg7,(char const *)arg8,arg9); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_play_file(void * jarg1, void * jarg2, char * jarg3, void * jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_file_handle_t *arg2 = (switch_file_handle_t *) 0 ; + char *arg3 = (char *) 0 ; + switch_input_args_t *arg4 = (switch_input_args_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_file_handle_t *)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_input_args_t *)jarg4; + result = (switch_status_t)switch_ivr_play_file(arg1,arg2,(char const *)arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_wait_for_silence(void * jarg1, unsigned long jarg2, unsigned long jarg3, unsigned long jarg4, unsigned long jarg5, char * jarg6) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t arg2 ; + uint32_t arg3 ; + uint32_t arg4 ; + uint32_t arg5 ; + char *arg6 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (uint32_t)jarg2; + arg3 = (uint32_t)jarg3; + arg4 = (uint32_t)jarg4; + arg5 = (uint32_t)jarg5; + arg6 = (char *)jarg6; + result = (switch_status_t)switch_ivr_wait_for_silence(arg1,arg2,arg3,arg4,arg5,(char const *)arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_gentones(void * jarg1, char * jarg2, int jarg3, void * jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + int32_t arg3 ; + switch_input_args_t *arg4 = (switch_input_args_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int32_t)jarg3; + arg4 = (switch_input_args_t *)jarg4; + result = (switch_status_t)switch_ivr_gentones(arg1,(char const *)arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_record_file(void * jarg1, void * jarg2, char * jarg3, void * jarg4, unsigned long jarg5) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_file_handle_t *arg2 = (switch_file_handle_t *) 0 ; + char *arg3 = (char *) 0 ; + switch_input_args_t *arg4 = (switch_input_args_t *) 0 ; + uint32_t arg5 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_file_handle_t *)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_input_args_t *)jarg4; + arg5 = (uint32_t)jarg5; + result = (switch_status_t)switch_ivr_record_file(arg1,arg2,(char const *)arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_play_and_get_digits(void * jarg1, unsigned long jarg2, unsigned long jarg3, unsigned long jarg4, unsigned long jarg5, char * jarg6, char * jarg7, char * jarg8, char * jarg9, char * jarg10, unsigned long jarg11, char * jarg12) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t arg2 ; + uint32_t arg3 ; + uint32_t arg4 ; + uint32_t arg5 ; + char *arg6 = (char *) 0 ; + char *arg7 = (char *) 0 ; + char *arg8 = (char *) 0 ; + char *arg9 = (char *) 0 ; + char *arg10 = (char *) 0 ; + uint32_t arg11 ; + char *arg12 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (uint32_t)jarg2; + arg3 = (uint32_t)jarg3; + arg4 = (uint32_t)jarg4; + arg5 = (uint32_t)jarg5; + arg6 = (char *)jarg6; + arg7 = (char *)jarg7; + arg8 = (char *)jarg8; + arg9 = (char *)jarg9; + arg10 = (char *)jarg10; + arg11 = (uint32_t)jarg11; + arg12 = (char *)jarg12; + result = (switch_status_t)switch_play_and_get_digits(arg1,arg2,arg3,arg4,arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,(char const *)arg9,arg10,arg11,(char const *)arg12); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_speak_text_handle(void * jarg1, void * jarg2, void * jarg3, void * jarg4, char * jarg5, void * jarg6) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_speech_handle_t *arg2 = (switch_speech_handle_t *) 0 ; + switch_codec_t *arg3 = (switch_codec_t *) 0 ; + switch_timer_t *arg4 = (switch_timer_t *) 0 ; + char *arg5 = (char *) 0 ; + switch_input_args_t *arg6 = (switch_input_args_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_speech_handle_t *)jarg2; + arg3 = (switch_codec_t *)jarg3; + arg4 = (switch_timer_t *)jarg4; + arg5 = (char *)jarg5; + arg6 = (switch_input_args_t *)jarg6; + result = (switch_status_t)switch_ivr_speak_text_handle(arg1,arg2,arg3,arg4,arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_ivr_clear_speech_cache(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_ivr_clear_speech_cache(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_speak_text(void * jarg1, char * jarg2, char * jarg3, char * jarg4, void * jarg5) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + switch_input_args_t *arg5 = (switch_input_args_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (switch_input_args_t *)jarg5; + result = (switch_status_t)switch_ivr_speak_text(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_originate(void * jarg1, void * jarg2, void * jarg3, char * jarg4, unsigned long jarg5, void * jarg6, char * jarg7, char * jarg8, void * jarg9, void * jarg10, unsigned long jarg11, void * jarg12) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_core_session_t **arg2 = (switch_core_session_t **) 0 ; + switch_call_cause_t *arg3 = (switch_call_cause_t *) 0 ; + char *arg4 = (char *) 0 ; + uint32_t arg5 ; + switch_state_handler_table_t *arg6 = (switch_state_handler_table_t *) 0 ; + char *arg7 = (char *) 0 ; + char *arg8 = (char *) 0 ; + switch_caller_profile_t *arg9 = (switch_caller_profile_t *) 0 ; + switch_event_t *arg10 = (switch_event_t *) 0 ; + switch_originate_flag_t arg11 ; + switch_call_cause_t *arg12 = (switch_call_cause_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_core_session_t **)jarg2; + arg3 = (switch_call_cause_t *)jarg3; + arg4 = (char *)jarg4; + arg5 = (uint32_t)jarg5; + arg6 = (switch_state_handler_table_t *)jarg6; + arg7 = (char *)jarg7; + arg8 = (char *)jarg8; + arg9 = (switch_caller_profile_t *)jarg9; + arg10 = (switch_event_t *)jarg10; + arg11 = (switch_originate_flag_t)jarg11; + arg12 = (switch_call_cause_t *)jarg12; + result = (switch_status_t)switch_ivr_originate(arg1,arg2,arg3,(char const *)arg4,arg5,(switch_state_handler_table const *)arg6,(char const *)arg7,(char const *)arg8,arg9,arg10,arg11,arg12); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_enterprise_originate(void * jarg1, void * jarg2, void * jarg3, char * jarg4, unsigned long jarg5, void * jarg6, char * jarg7, char * jarg8, void * jarg9, void * jarg10, unsigned long jarg11) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_core_session_t **arg2 = (switch_core_session_t **) 0 ; + switch_call_cause_t *arg3 = (switch_call_cause_t *) 0 ; + char *arg4 = (char *) 0 ; + uint32_t arg5 ; + switch_state_handler_table_t *arg6 = (switch_state_handler_table_t *) 0 ; + char *arg7 = (char *) 0 ; + char *arg8 = (char *) 0 ; + switch_caller_profile_t *arg9 = (switch_caller_profile_t *) 0 ; + switch_event_t *arg10 = (switch_event_t *) 0 ; + switch_originate_flag_t arg11 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_core_session_t **)jarg2; + arg3 = (switch_call_cause_t *)jarg3; + arg4 = (char *)jarg4; + arg5 = (uint32_t)jarg5; + arg6 = (switch_state_handler_table_t *)jarg6; + arg7 = (char *)jarg7; + arg8 = (char *)jarg8; + arg9 = (switch_caller_profile_t *)jarg9; + arg10 = (switch_event_t *)jarg10; + arg11 = (switch_originate_flag_t)jarg11; + result = (switch_status_t)switch_ivr_enterprise_originate(arg1,arg2,arg3,(char const *)arg4,arg5,(switch_state_handler_table const *)arg6,(char const *)arg7,(char const *)arg8,arg9,arg10,arg11); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_ivr_bridge_display(void * jarg1, void * jarg2) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_core_session_t *arg2 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_core_session_t *)jarg2; + switch_ivr_bridge_display(arg1,arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_multi_threaded_bridge(void * jarg1, void * jarg2, void * jarg3, void * jarg4, void * jarg5) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_core_session_t *arg2 = (switch_core_session_t *) 0 ; + switch_input_callback_function_t arg3 = (switch_input_callback_function_t) 0 ; + void *arg4 = (void *) 0 ; + void *arg5 = (void *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_core_session_t *)jarg2; + arg3 = (switch_input_callback_function_t)jarg3; + arg4 = (void *)jarg4; + arg5 = (void *)jarg5; + result = (switch_status_t)switch_ivr_multi_threaded_bridge(arg1,arg2,arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_signal_bridge(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_core_session_t *arg2 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_core_session_t *)jarg2; + result = (switch_status_t)switch_ivr_signal_bridge(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_session_transfer(void * jarg1, char * jarg2, char * jarg3, char * jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + result = (switch_status_t)switch_ivr_session_transfer(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_ivr_schedule_transfer(void * jarg1, char * jarg2, char * jarg3, char * jarg4, char * jarg5) { + unsigned long jresult ; + time_t arg1 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + time_t *argp1 ; + uint32_t result; + + argp1 = (time_t *)jarg1; + if (!argp1) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null time_t", 0); + return 0; + } + arg1 = *argp1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + result = (uint32_t)switch_ivr_schedule_transfer(arg1,(char const *)arg2,arg3,arg4,arg5); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_ivr_schedule_hangup(void * jarg1, char * jarg2, int jarg3, int jarg4) { + unsigned long jresult ; + time_t arg1 ; + char *arg2 = (char *) 0 ; + switch_call_cause_t arg3 ; + switch_bool_t arg4 ; + time_t *argp1 ; + uint32_t result; + + argp1 = (time_t *)jarg1; + if (!argp1) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null time_t", 0); + return 0; + } + arg1 = *argp1; + arg2 = (char *)jarg2; + arg3 = (switch_call_cause_t)jarg3; + arg4 = (switch_bool_t)jarg4; + result = (uint32_t)switch_ivr_schedule_hangup(arg1,(char const *)arg2,arg3,arg4); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_uuid_bridge(char * jarg1, char * jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_ivr_uuid_bridge((char const *)arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_media(char * jarg1, unsigned long jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_media_flag_t arg2 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_media_flag_t)jarg2; + result = (switch_status_t)switch_ivr_media((char const *)arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_nomedia(char * jarg1, unsigned long jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_media_flag_t arg2 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_media_flag_t)jarg2; + result = (switch_status_t)switch_ivr_nomedia((char const *)arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_hold_uuid(char * jarg1, char * jarg2, int jarg3) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_bool_t arg3 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_bool_t)jarg3; + result = (switch_status_t)switch_ivr_hold_uuid((char const *)arg1,(char const *)arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_unhold_uuid(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + result = (switch_status_t)switch_ivr_unhold_uuid((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_hold(void * jarg1, char * jarg2, int jarg3) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_bool_t arg3 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_bool_t)jarg3; + result = (switch_status_t)switch_ivr_hold(arg1,(char const *)arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_unhold(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_unhold(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_ivr_schedule_broadcast(void * jarg1, char * jarg2, char * jarg3, unsigned long jarg4) { + unsigned long jresult ; + time_t arg1 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_media_flag_t arg4 ; + time_t *argp1 ; + uint32_t result; + + argp1 = (time_t *)jarg1; + if (!argp1) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null time_t", 0); + return 0; + } + arg1 = *argp1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_media_flag_t)jarg4; + result = (uint32_t)switch_ivr_schedule_broadcast(arg1,(char const *)arg2,(char const *)arg3,arg4); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_broadcast(char * jarg1, char * jarg2, unsigned long jarg3) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_media_flag_t arg3 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_media_flag_t)jarg3; + result = (switch_status_t)switch_ivr_broadcast((char const *)arg1,(char const *)arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_transfer_variable(void * jarg1, void * jarg2, char * jarg3) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_core_session_t *arg2 = (switch_core_session_t *) 0 ; + char *arg3 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_core_session_t *)jarg2; + arg3 = (char *)jarg3; + result = (switch_status_t)switch_ivr_transfer_variable(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_digit_stream_parser_new(void * jarg1, void * jarg2) { + int jresult ; + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + switch_ivr_digit_stream_parser_t **arg2 = (switch_ivr_digit_stream_parser_t **) 0 ; + switch_status_t result; + + arg1 = (switch_memory_pool_t *)jarg1; + arg2 = (switch_ivr_digit_stream_parser_t **)jarg2; + result = (switch_status_t)switch_ivr_digit_stream_parser_new(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_digit_stream_parser_destroy(void * jarg1) { + int jresult ; + switch_ivr_digit_stream_parser_t *arg1 = (switch_ivr_digit_stream_parser_t *) 0 ; + switch_status_t result; + + arg1 = (switch_ivr_digit_stream_parser_t *)jarg1; + result = (switch_status_t)switch_ivr_digit_stream_parser_destroy(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_digit_stream_new(void * jarg1, void * jarg2) { + int jresult ; + switch_ivr_digit_stream_parser_t *arg1 = (switch_ivr_digit_stream_parser_t *) 0 ; + switch_ivr_digit_stream_t **arg2 = (switch_ivr_digit_stream_t **) 0 ; + switch_status_t result; + + arg1 = (switch_ivr_digit_stream_parser_t *)jarg1; + arg2 = (switch_ivr_digit_stream_t **)jarg2; + result = (switch_status_t)switch_ivr_digit_stream_new(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_digit_stream_destroy(void * jarg1) { + int jresult ; + switch_ivr_digit_stream_t **arg1 = (switch_ivr_digit_stream_t **) 0 ; + switch_status_t result; + + arg1 = (switch_ivr_digit_stream_t **)jarg1; + result = (switch_status_t)switch_ivr_digit_stream_destroy(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_digit_stream_parser_set_event(void * jarg1, char * jarg2, void * jarg3) { + int jresult ; + switch_ivr_digit_stream_parser_t *arg1 = (switch_ivr_digit_stream_parser_t *) 0 ; + char *arg2 = (char *) 0 ; + void *arg3 = (void *) 0 ; + switch_status_t result; + + arg1 = (switch_ivr_digit_stream_parser_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (void *)jarg3; + result = (switch_status_t)switch_ivr_digit_stream_parser_set_event(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_digit_stream_parser_del_event(void * jarg1, char * jarg2) { + int jresult ; + switch_ivr_digit_stream_parser_t *arg1 = (switch_ivr_digit_stream_parser_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_ivr_digit_stream_parser_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_ivr_digit_stream_parser_del_event(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_ivr_digit_stream_parser_feed(void * jarg1, void * jarg2, char jarg3) { + void * jresult ; + switch_ivr_digit_stream_parser_t *arg1 = (switch_ivr_digit_stream_parser_t *) 0 ; + switch_ivr_digit_stream_t *arg2 = (switch_ivr_digit_stream_t *) 0 ; + char arg3 ; + void *result = 0 ; + + arg1 = (switch_ivr_digit_stream_parser_t *)jarg1; + arg2 = (switch_ivr_digit_stream_t *)jarg2; + arg3 = (char)jarg3; + result = (void *)switch_ivr_digit_stream_parser_feed(arg1,arg2,arg3); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_digit_stream_reset(void * jarg1) { + int jresult ; + switch_ivr_digit_stream_t *arg1 = (switch_ivr_digit_stream_t *) 0 ; + switch_status_t result; + + arg1 = (switch_ivr_digit_stream_t *)jarg1; + result = (switch_status_t)switch_ivr_digit_stream_reset(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_digit_stream_parser_set_terminator(void * jarg1, char jarg2) { + int jresult ; + switch_ivr_digit_stream_parser_t *arg1 = (switch_ivr_digit_stream_parser_t *) 0 ; + char arg2 ; + switch_status_t result; + + arg1 = (switch_ivr_digit_stream_parser_t *)jarg1; + arg2 = (char)jarg2; + result = (switch_status_t)switch_ivr_digit_stream_parser_set_terminator(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_menu_init(void * jarg1, void * jarg2, char * jarg3, char * jarg4, char * jarg5, char * jarg6, char * jarg7, char * jarg8, char * jarg9, char * jarg10, char * jarg11, int jarg12, int jarg13, int jarg14, int jarg15, int jarg16, int jarg17, void * jarg18) { + int jresult ; + switch_ivr_menu_t **arg1 = (switch_ivr_menu_t **) 0 ; + switch_ivr_menu_t *arg2 = (switch_ivr_menu_t *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + char *arg6 = (char *) 0 ; + char *arg7 = (char *) 0 ; + char *arg8 = (char *) 0 ; + char *arg9 = (char *) 0 ; + char *arg10 = (char *) 0 ; + char *arg11 = (char *) 0 ; + int arg12 ; + int arg13 ; + int arg14 ; + int arg15 ; + int arg16 ; + int arg17 ; + switch_memory_pool_t *arg18 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (switch_ivr_menu_t **)jarg1; + arg2 = (switch_ivr_menu_t *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + arg6 = (char *)jarg6; + arg7 = (char *)jarg7; + arg8 = (char *)jarg8; + arg9 = (char *)jarg9; + arg10 = (char *)jarg10; + arg11 = (char *)jarg11; + arg12 = (int)jarg12; + arg13 = (int)jarg13; + arg14 = (int)jarg14; + arg15 = (int)jarg15; + arg16 = (int)jarg16; + arg17 = (int)jarg17; + arg18 = (switch_memory_pool_t *)jarg18; + result = (switch_status_t)switch_ivr_menu_init(arg1,arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,(char const *)arg9,(char const *)arg10,(char const *)arg11,arg12,arg13,arg14,arg15,arg16,arg17,arg18); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_menu_bind_action(void * jarg1, int jarg2, char * jarg3, char * jarg4) { + int jresult ; + switch_ivr_menu_t *arg1 = (switch_ivr_menu_t *) 0 ; + switch_ivr_action_t arg2 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_ivr_menu_t *)jarg1; + arg2 = (switch_ivr_action_t)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + result = (switch_status_t)switch_ivr_menu_bind_action(arg1,arg2,(char const *)arg3,(char const *)arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_menu_bind_function(void * jarg1, void * jarg2, char * jarg3, char * jarg4) { + int jresult ; + switch_ivr_menu_t *arg1 = (switch_ivr_menu_t *) 0 ; + switch_ivr_menu_action_function_t *arg2 = (switch_ivr_menu_action_function_t *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_ivr_menu_t *)jarg1; + arg2 = (switch_ivr_menu_action_function_t *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + result = (switch_status_t)switch_ivr_menu_bind_function(arg1,arg2,(char const *)arg3,(char const *)arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_menu_execute(void * jarg1, void * jarg2, char * jarg3, void * jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_ivr_menu_t *arg2 = (switch_ivr_menu_t *) 0 ; + char *arg3 = (char *) 0 ; + void *arg4 = (void *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_ivr_menu_t *)jarg2; + arg3 = (char *)jarg3; + arg4 = (void *)jarg4; + result = (switch_status_t)switch_ivr_menu_execute(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_menu_stack_free(void * jarg1) { + int jresult ; + switch_ivr_menu_t *arg1 = (switch_ivr_menu_t *) 0 ; + switch_status_t result; + + arg1 = (switch_ivr_menu_t *)jarg1; + result = (switch_status_t)switch_ivr_menu_stack_free(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_menu_stack_xml_build(void * jarg1, void * jarg2, void * jarg3, void * jarg4) { + int jresult ; + switch_ivr_menu_xml_ctx_t *arg1 = (switch_ivr_menu_xml_ctx_t *) 0 ; + switch_ivr_menu_t **arg2 = (switch_ivr_menu_t **) 0 ; + switch_xml_t arg3 = (switch_xml_t) 0 ; + switch_xml_t arg4 = (switch_xml_t) 0 ; + switch_status_t result; + + arg1 = (switch_ivr_menu_xml_ctx_t *)jarg1; + arg2 = (switch_ivr_menu_t **)jarg2; + arg3 = (switch_xml_t)jarg3; + arg4 = (switch_xml_t)jarg4; + result = (switch_status_t)switch_ivr_menu_stack_xml_build(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_menu_str2action(char * jarg1, void * jarg2) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_ivr_action_t *arg2 = (switch_ivr_action_t *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_ivr_action_t *)jarg2; + result = (switch_status_t)switch_ivr_menu_str2action((char const *)arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_menu_stack_xml_add_custom(void * jarg1, char * jarg2, void * jarg3) { + int jresult ; + switch_ivr_menu_xml_ctx_t *arg1 = (switch_ivr_menu_xml_ctx_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_ivr_menu_action_function_t *arg3 = (switch_ivr_menu_action_function_t *) 0 ; + switch_status_t result; + + arg1 = (switch_ivr_menu_xml_ctx_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_ivr_menu_action_function_t *)jarg3; + result = (switch_status_t)switch_ivr_menu_stack_xml_add_custom(arg1,(char const *)arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_menu_stack_xml_init(void * jarg1, void * jarg2) { + int jresult ; + switch_ivr_menu_xml_ctx_t **arg1 = (switch_ivr_menu_xml_ctx_t **) 0 ; + switch_memory_pool_t *arg2 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (switch_ivr_menu_xml_ctx_t **)jarg1; + arg2 = (switch_memory_pool_t *)jarg2; + result = (switch_status_t)switch_ivr_menu_stack_xml_init(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_phrase_macro_event(void * jarg1, char * jarg2, char * jarg3, void * jarg4, char * jarg5, void * jarg6) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_event_t *arg4 = (switch_event_t *) 0 ; + char *arg5 = (char *) 0 ; + switch_input_args_t *arg6 = (switch_input_args_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_event_t *)jarg4; + arg5 = (char *)jarg5; + arg6 = (switch_input_args_t *)jarg6; + result = (switch_status_t)switch_ivr_phrase_macro_event(arg1,(char const *)arg2,(char const *)arg3,arg4,(char const *)arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_ivr_delay_echo(void * jarg1, unsigned long jarg2) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (uint32_t)jarg2; + switch_ivr_delay_echo(arg1,arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_find_bridged_uuid(char * jarg1, char * jarg2, void * jarg3) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = (switch_status_t)switch_ivr_find_bridged_uuid((char const *)arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_ivr_intercept_session(void * jarg1, char * jarg2, int jarg3) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_bool_t arg3 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_bool_t)jarg3; + switch_ivr_intercept_session(arg1,(char const *)arg2,arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_ivr_park_session(void * jarg1) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + switch_ivr_park_session(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_wait_for_answer(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_core_session_t *arg2 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_core_session_t *)jarg2; + result = (switch_status_t)switch_ivr_wait_for_answer(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_read(void * jarg1, unsigned long jarg2, unsigned long jarg3, char * jarg4, char * jarg5, char * jarg6, void * jarg7, unsigned long jarg8, char * jarg9) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t arg2 ; + uint32_t arg3 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + char *arg6 = (char *) 0 ; + switch_size_t arg7 ; + uint32_t arg8 ; + char *arg9 = (char *) 0 ; + switch_size_t *argp7 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (uint32_t)jarg2; + arg3 = (uint32_t)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + arg6 = (char *)jarg6; + argp7 = (switch_size_t *)jarg7; + if (!argp7) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg7 = *argp7; + arg8 = (uint32_t)jarg8; + arg9 = (char *)jarg9; + result = (switch_status_t)switch_ivr_read(arg1,arg2,arg3,(char const *)arg4,(char const *)arg5,arg6,arg7,arg8,(char const *)arg9); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_block_dtmf_session(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_block_dtmf_session(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_unblock_dtmf_session(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_unblock_dtmf_session(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_bind_dtmf_meta_session(void * jarg1, unsigned long jarg2, unsigned long jarg3, char * jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t arg2 ; + switch_bind_flag_t arg3 ; + char *arg4 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (uint32_t)jarg2; + arg3 = (switch_bind_flag_t)jarg3; + arg4 = (char *)jarg4; + result = (switch_status_t)switch_ivr_bind_dtmf_meta_session(arg1,arg2,arg3,(char const *)arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_unbind_dtmf_meta_session(void * jarg1, unsigned long jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + uint32_t arg2 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (uint32_t)jarg2; + result = (switch_status_t)switch_ivr_unbind_dtmf_meta_session(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_soft_hold(void * jarg1, char * jarg2, char * jarg3, char * jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + result = (switch_status_t)switch_ivr_soft_hold(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_say(void * jarg1, char * jarg2, char * jarg3, char * jarg4, char * jarg5, char * jarg6, void * jarg7) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + char *arg6 = (char *) 0 ; + switch_input_args_t *arg7 = (switch_input_args_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + arg6 = (char *)jarg6; + arg7 = (switch_input_args_t *)jarg7; + result = (switch_status_t)switch_ivr_say(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,arg7); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_get_say_method_by_name(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_say_method_t result; + + arg1 = (char *)jarg1; + result = (switch_say_method_t)switch_ivr_get_say_method_by_name((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_get_say_gender_by_name(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_say_gender_t result; + + arg1 = (char *)jarg1; + result = (switch_say_gender_t)switch_ivr_get_say_gender_by_name((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_get_say_type_by_name(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_say_type_t result; + + arg1 = (char *)jarg1; + result = (switch_say_type_t)switch_ivr_get_say_type_by_name((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_say_spell(void * jarg1, char * jarg2, void * jarg3, void * jarg4) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_say_args_t *arg3 = (switch_say_args_t *) 0 ; + switch_input_args_t *arg4 = (switch_input_args_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_say_args_t *)jarg3; + arg4 = (switch_input_args_t *)jarg4; + result = (switch_status_t)switch_ivr_say_spell(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_say_ip(void * jarg1, char * jarg2, void * jarg3, void * jarg4, void * jarg5) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_say_callback_t arg3 = (switch_say_callback_t) 0 ; + switch_say_args_t *arg4 = (switch_say_args_t *) 0 ; + switch_input_args_t *arg5 = (switch_input_args_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_say_callback_t)jarg3; + arg4 = (switch_say_args_t *)jarg4; + arg5 = (switch_input_args_t *)jarg5; + result = (switch_status_t)switch_ivr_say_ip(arg1,arg2,arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_set_user(void * jarg1, char * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (char *)jarg2; + result = (switch_status_t)switch_ivr_set_user(arg1,(char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_sound_test(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)switch_ivr_sound_test(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_process_import(void * jarg1, void * jarg2, char * jarg3) { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_channel_t *arg2 = (switch_channel_t *) 0 ; + char *arg3 = (char *) 0 ; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_channel_t *)jarg2; + arg3 = (char *)jarg3; + switch_process_import(arg1,arg2,(char const *)arg3); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_uuid_exists(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_bool_t result; + + arg1 = (char *)jarg1; + result = (switch_bool_t)switch_ivr_uuid_exists((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_RTP_MAX_BUF_LEN_get() { + int jresult ; + int result; + + result = (int)(16384); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_RTCP_MAX_BUF_LEN_get() { + int jresult ; + int result; + + result = (int)(16384); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_RTP_MAX_CRYPTO_LEN_get() { + int jresult ; + int result; + + result = (int)(64); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_RTP_KEY_LEN_get() { + int jresult ; + int result; + + result = (int)(30); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_RTP_CRYPTO_KEY_32_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("AES_CM_128_HMAC_SHA1_32"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_RTP_CRYPTO_KEY_80_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("AES_CM_128_HMAC_SHA1_80"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_crypto_key_index_set(void * jarg1, unsigned long jarg2) { + switch_rtp_crypto_key *arg1 = (switch_rtp_crypto_key *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_rtp_crypto_key *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->index = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_rtp_crypto_key_index_get(void * jarg1) { + unsigned long jresult ; + switch_rtp_crypto_key *arg1 = (switch_rtp_crypto_key *) 0 ; + uint32_t result; + + arg1 = (switch_rtp_crypto_key *)jarg1; + result = (uint32_t) ((arg1)->index); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_crypto_key_type_set(void * jarg1, int jarg2) { + switch_rtp_crypto_key *arg1 = (switch_rtp_crypto_key *) 0 ; + switch_rtp_crypto_key_type_t arg2 ; + + arg1 = (switch_rtp_crypto_key *)jarg1; + arg2 = (switch_rtp_crypto_key_type_t)jarg2; + if (arg1) (arg1)->type = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_crypto_key_type_get(void * jarg1) { + int jresult ; + switch_rtp_crypto_key *arg1 = (switch_rtp_crypto_key *) 0 ; + switch_rtp_crypto_key_type_t result; + + arg1 = (switch_rtp_crypto_key *)jarg1; + result = (switch_rtp_crypto_key_type_t) ((arg1)->type); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_crypto_key_key_set(void * jarg1, void * jarg2) { + switch_rtp_crypto_key *arg1 = (switch_rtp_crypto_key *) 0 ; + unsigned char *arg2 ; + + arg1 = (switch_rtp_crypto_key *)jarg1; + arg2 = (unsigned char *)jarg2; + { + size_t ii; + unsigned char *b = (unsigned char *) arg1->key; + for (ii = 0; ii < (size_t)64; ii++) b[ii] = *((unsigned char *) arg2 + ii); + } +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_crypto_key_key_get(void * jarg1) { + void * jresult ; + switch_rtp_crypto_key *arg1 = (switch_rtp_crypto_key *) 0 ; + unsigned char *result = 0 ; + + arg1 = (switch_rtp_crypto_key *)jarg1; + result = (unsigned char *)(unsigned char *) ((arg1)->key); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_crypto_key_keylen_set(void * jarg1, void * jarg2) { + switch_rtp_crypto_key *arg1 = (switch_rtp_crypto_key *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_rtp_crypto_key *)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)->keylen = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_crypto_key_keylen_get(void * jarg1) { + void * jresult ; + switch_rtp_crypto_key *arg1 = (switch_rtp_crypto_key *) 0 ; + switch_size_t result; + + arg1 = (switch_rtp_crypto_key *)jarg1; + result = ((arg1)->keylen); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_crypto_key_next_set(void * jarg1, void * jarg2) { + switch_rtp_crypto_key *arg1 = (switch_rtp_crypto_key *) 0 ; + switch_rtp_crypto_key *arg2 = (switch_rtp_crypto_key *) 0 ; + + arg1 = (switch_rtp_crypto_key *)jarg1; + arg2 = (switch_rtp_crypto_key *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_crypto_key_next_get(void * jarg1) { + void * jresult ; + switch_rtp_crypto_key *arg1 = (switch_rtp_crypto_key *) 0 ; + switch_rtp_crypto_key *result = 0 ; + + arg1 = (switch_rtp_crypto_key *)jarg1; + result = (switch_rtp_crypto_key *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_rtp_crypto_key() { + void * jresult ; + switch_rtp_crypto_key *result = 0 ; + + result = (switch_rtp_crypto_key *)new switch_rtp_crypto_key(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_rtp_crypto_key(void * jarg1) { + switch_rtp_crypto_key *arg1 = (switch_rtp_crypto_key *) 0 ; + + arg1 = (switch_rtp_crypto_key *)jarg1; + delete arg1; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_add_crypto_key(void * jarg1, int jarg2, unsigned long jarg3, int jarg4, void * jarg5, void * jarg6) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_rtp_crypto_direction_t arg2 ; + uint32_t arg3 ; + switch_rtp_crypto_key_type_t arg4 ; + unsigned char *arg5 = (unsigned char *) 0 ; + switch_size_t arg6 ; + switch_size_t *argp6 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_rtp_crypto_direction_t)jarg2; + arg3 = (uint32_t)jarg3; + arg4 = (switch_rtp_crypto_key_type_t)jarg4; + arg5 = (unsigned char *)jarg5; + argp6 = (switch_size_t *)jarg6; + if (!argp6) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg6 = *argp6; + result = (switch_status_t)switch_rtp_add_crypto_key(arg1,arg2,arg3,arg4,arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_get_random(void * jarg1, unsigned long jarg2) { + void *arg1 = (void *) 0 ; + uint32_t arg2 ; + + arg1 = (void *)jarg1; + arg2 = (uint32_t)jarg2; + switch_rtp_get_random(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_init(void * jarg1) { + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + + arg1 = (switch_memory_pool_t *)jarg1; + switch_rtp_init(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_shutdown() { + switch_rtp_shutdown(); +} + + +SWIGEXPORT unsigned short SWIGSTDCALL CSharp_switch_rtp_set_start_port(unsigned short jarg1) { + unsigned short jresult ; + switch_port_t arg1 ; + switch_port_t result; + + arg1 = (switch_port_t)jarg1; + result = (switch_port_t)switch_rtp_set_start_port(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_set_ssrc(void * jarg1, unsigned long jarg2) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + uint32_t arg2 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (uint32_t)jarg2; + result = (switch_status_t)switch_rtp_set_ssrc(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned short SWIGSTDCALL CSharp_switch_rtp_set_end_port(unsigned short jarg1) { + unsigned short jresult ; + switch_port_t arg1 ; + switch_port_t result; + + arg1 = (switch_port_t)jarg1; + result = (switch_port_t)switch_rtp_set_end_port(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned short SWIGSTDCALL CSharp_switch_rtp_request_port(char * jarg1) { + unsigned short jresult ; + char *arg1 = (char *) 0 ; + switch_port_t result; + + arg1 = (char *)jarg1; + result = (switch_port_t)switch_rtp_request_port((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_release_port(char * jarg1, unsigned short jarg2) { + char *arg1 = (char *) 0 ; + switch_port_t arg2 ; + + arg1 = (char *)jarg1; + arg2 = (switch_port_t)jarg2; + switch_rtp_release_port((char const *)arg1,arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_set_interval(void * jarg1, unsigned long jarg2, unsigned long jarg3) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + uint32_t arg2 ; + uint32_t arg3 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (uint32_t)jarg2; + arg3 = (uint32_t)jarg3; + result = (switch_status_t)switch_rtp_set_interval(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_change_interval(void * jarg1, unsigned long jarg2, unsigned long jarg3) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + uint32_t arg2 ; + uint32_t arg3 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (uint32_t)jarg2; + arg3 = (uint32_t)jarg3; + result = (switch_status_t)switch_rtp_change_interval(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_create(void * jarg1, unsigned char jarg2, unsigned long jarg3, unsigned long jarg4, unsigned long jarg5, char * jarg6, void * jarg7, void * jarg8) { + int jresult ; + switch_rtp_t **arg1 = (switch_rtp_t **) 0 ; + switch_payload_t arg2 ; + uint32_t arg3 ; + uint32_t arg4 ; + switch_rtp_flag_t arg5 ; + char *arg6 = (char *) 0 ; + char **arg7 = (char **) 0 ; + switch_memory_pool_t *arg8 = (switch_memory_pool_t *) 0 ; + switch_status_t result; + + arg1 = (switch_rtp_t **)jarg1; + arg2 = (switch_payload_t)jarg2; + arg3 = (uint32_t)jarg3; + arg4 = (uint32_t)jarg4; + arg5 = (switch_rtp_flag_t)jarg5; + arg6 = (char *)jarg6; + arg7 = (char **)jarg7; + arg8 = (switch_memory_pool_t *)jarg8; + result = (switch_status_t)switch_rtp_create(arg1,arg2,arg3,arg4,arg5,arg6,(char const **)arg7,arg8); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_new(char * jarg1, unsigned short jarg2, char * jarg3, unsigned short jarg4, unsigned char jarg5, unsigned long jarg6, unsigned long jarg7, unsigned long jarg8, char * jarg9, void * jarg10, void * jarg11) { + void * jresult ; + char *arg1 = (char *) 0 ; + switch_port_t arg2 ; + char *arg3 = (char *) 0 ; + switch_port_t arg4 ; + switch_payload_t arg5 ; + uint32_t arg6 ; + uint32_t arg7 ; + switch_rtp_flag_t arg8 ; + char *arg9 = (char *) 0 ; + char **arg10 = (char **) 0 ; + switch_memory_pool_t *arg11 = (switch_memory_pool_t *) 0 ; + switch_rtp_t *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (switch_port_t)jarg2; + arg3 = (char *)jarg3; + arg4 = (switch_port_t)jarg4; + arg5 = (switch_payload_t)jarg5; + arg6 = (uint32_t)jarg6; + arg7 = (uint32_t)jarg7; + arg8 = (switch_rtp_flag_t)jarg8; + arg9 = (char *)jarg9; + arg10 = (char **)jarg10; + arg11 = (switch_memory_pool_t *)jarg11; + result = (switch_rtp_t *)switch_rtp_new((char const *)arg1,arg2,(char const *)arg3,arg4,arg5,arg6,arg7,arg8,arg9,(char const **)arg10,arg11); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_set_remote_address(void * jarg1, char * jarg2, unsigned short jarg3, unsigned short jarg4, int jarg5, void * jarg6) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_port_t arg3 ; + switch_port_t arg4 ; + switch_bool_t arg5 ; + char **arg6 = (char **) 0 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_port_t)jarg3; + arg4 = (switch_port_t)jarg4; + arg5 = (switch_bool_t)jarg5; + arg6 = (char **)jarg6; + result = (switch_status_t)switch_rtp_set_remote_address(arg1,(char const *)arg2,arg3,arg4,arg5,(char const **)arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_rtp_get_remote_host(void * jarg1) { + char * jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_rtp_t *)jarg1; + result = (char *)switch_rtp_get_remote_host(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT unsigned short SWIGSTDCALL CSharp_switch_rtp_get_remote_port(void * jarg1) { + unsigned short jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_port_t result; + + arg1 = (switch_rtp_t *)jarg1; + result = (switch_port_t)switch_rtp_get_remote_port(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_reset_media_timer(void * jarg1) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + + arg1 = (switch_rtp_t *)jarg1; + switch_rtp_reset_media_timer(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_set_max_missed_packets(void * jarg1, unsigned long jarg2) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (uint32_t)jarg2; + switch_rtp_set_max_missed_packets(arg1,arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_udptl_mode(void * jarg1) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + result = (switch_status_t)switch_rtp_udptl_mode(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_set_local_address(void * jarg1, char * jarg2, unsigned short jarg3, void * jarg4) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_port_t arg3 ; + char **arg4 = (char **) 0 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_port_t)jarg3; + arg4 = (char **)jarg4; + result = (switch_status_t)switch_rtp_set_local_address(arg1,(char const *)arg2,arg3,(char const **)arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_kill_socket(void * jarg1) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + + arg1 = (switch_rtp_t *)jarg1; + switch_rtp_kill_socket(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_break(void * jarg1) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + + arg1 = (switch_rtp_t *)jarg1; + switch_rtp_break(arg1); +} + + +SWIGEXPORT unsigned char SWIGSTDCALL CSharp_switch_rtp_ready(void * jarg1) { + unsigned char jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + uint8_t result; + + arg1 = (switch_rtp_t *)jarg1; + result = (uint8_t)switch_rtp_ready(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_destroy(void * jarg1) { + switch_rtp_t **arg1 = (switch_rtp_t **) 0 ; + + arg1 = (switch_rtp_t **)jarg1; + switch_rtp_destroy(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_activate_ice(void * jarg1, char * jarg2, char * jarg3) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (switch_status_t)switch_rtp_activate_ice(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_activate_rtcp(void * jarg1, int jarg2, unsigned short jarg3) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + int arg2 ; + switch_port_t arg3 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (int)jarg2; + arg3 = (switch_port_t)jarg3; + result = (switch_status_t)switch_rtp_activate_rtcp(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_activate_jitter_buffer(void * jarg1, unsigned long jarg2) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + uint32_t arg2 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (uint32_t)jarg2; + result = (switch_status_t)switch_rtp_activate_jitter_buffer(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_set_flag(void * jarg1, unsigned long jarg2) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_rtp_flag_t arg2 ; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_rtp_flag_t)jarg2; + switch_rtp_set_flag(arg1,arg2); +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_rtp_test_flag(void * jarg1, unsigned long jarg2) { + unsigned long jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_rtp_flag_t arg2 ; + uint32_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_rtp_flag_t)jarg2; + result = (uint32_t)switch_rtp_test_flag(arg1,arg2); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_clear_flag(void * jarg1, unsigned long jarg2) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_rtp_flag_t arg2 ; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_rtp_flag_t)jarg2; + switch_rtp_clear_flag(arg1,arg2); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_get_rtp_socket(void * jarg1) { + void * jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_socket_t *result = 0 ; + + arg1 = (switch_rtp_t *)jarg1; + result = (switch_socket_t *)switch_rtp_get_rtp_socket(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_rtp_get_default_samples_per_interval(void * jarg1) { + unsigned long jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + uint32_t result; + + arg1 = (switch_rtp_t *)jarg1; + result = (uint32_t)switch_rtp_get_default_samples_per_interval(arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_set_default_payload(void * jarg1, unsigned char jarg2) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_payload_t arg2 ; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_payload_t)jarg2; + switch_rtp_set_default_payload(arg1,arg2); +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_rtp_get_default_payload(void * jarg1) { + unsigned long jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + uint32_t result; + + arg1 = (switch_rtp_t *)jarg1; + result = (uint32_t)switch_rtp_get_default_payload(arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_set_invald_handler(void * jarg1, void * jarg2) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_rtp_invalid_handler_t arg2 = (switch_rtp_invalid_handler_t) 0 ; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_rtp_invalid_handler_t)jarg2; + switch_rtp_set_invald_handler(arg1,arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_read(void * jarg1, void * jarg2, void * jarg3, void * jarg4, void * jarg5, unsigned long jarg6) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + void *arg2 = (void *) 0 ; + uint32_t *arg3 = (uint32_t *) 0 ; + switch_payload_t *arg4 = (switch_payload_t *) 0 ; + switch_frame_flag_t *arg5 = (switch_frame_flag_t *) 0 ; + switch_io_flag_t arg6 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (void *)jarg2; + arg3 = (uint32_t *)jarg3; + arg4 = (switch_payload_t *)jarg4; + arg5 = (switch_frame_flag_t *)jarg5; + arg6 = (switch_io_flag_t)jarg6; + result = (switch_status_t)switch_rtp_read(arg1,arg2,arg3,arg4,arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_queue_rfc2833(void * jarg1, void * jarg2) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_dtmf_t *arg2 = (switch_dtmf_t *) 0 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_dtmf_t *)jarg2; + result = (switch_status_t)switch_rtp_queue_rfc2833(arg1,(switch_dtmf_t const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_queue_rfc2833_in(void * jarg1, void * jarg2) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_dtmf_t *arg2 = (switch_dtmf_t *) 0 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_dtmf_t *)jarg2; + result = (switch_status_t)switch_rtp_queue_rfc2833_in(arg1,(switch_dtmf_t const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_has_dtmf(void * jarg1) { + void * jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_size_t result; + + arg1 = (switch_rtp_t *)jarg1; + result = switch_rtp_has_dtmf(arg1); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_dequeue_dtmf(void * jarg1, void * jarg2) { + void * jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_dtmf_t *arg2 = (switch_dtmf_t *) 0 ; + switch_size_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_dtmf_t *)jarg2; + result = switch_rtp_dequeue_dtmf(arg1,arg2); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_zerocopy_read(void * jarg1, void * jarg2, void * jarg3, void * jarg4, void * jarg5, unsigned long jarg6) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + void **arg2 = (void **) 0 ; + uint32_t *arg3 = (uint32_t *) 0 ; + switch_payload_t *arg4 = (switch_payload_t *) 0 ; + switch_frame_flag_t *arg5 = (switch_frame_flag_t *) 0 ; + switch_io_flag_t arg6 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (void **)jarg2; + arg3 = (uint32_t *)jarg3; + arg4 = (switch_payload_t *)jarg4; + arg5 = (switch_frame_flag_t *)jarg5; + arg6 = (switch_io_flag_t)jarg6; + result = (switch_status_t)switch_rtp_zerocopy_read(arg1,arg2,arg3,arg4,arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_zerocopy_read_frame(void * jarg1, void * jarg2, unsigned long jarg3) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_frame_t *arg2 = (switch_frame_t *) 0 ; + switch_io_flag_t arg3 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_frame_t *)jarg2; + arg3 = (switch_io_flag_t)jarg3; + result = (switch_status_t)switch_rtp_zerocopy_read_frame(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtcp_zerocopy_read_frame(void * jarg1, void * jarg2) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_rtcp_frame_t *arg2 = (switch_rtcp_frame_t *) 0 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_rtcp_frame_t *)jarg2; + result = (switch_status_t)switch_rtcp_zerocopy_read_frame(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_rtp_flush_read_buffer(void * jarg1, int jarg2) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_rtp_flush_t arg2 ; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_rtp_flush_t)jarg2; + rtp_flush_read_buffer(arg1,arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_enable_vad(void * jarg1, void * jarg2, void * jarg3, unsigned long jarg4) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_core_session_t *arg2 = (switch_core_session_t *) 0 ; + switch_codec_t *arg3 = (switch_codec_t *) 0 ; + switch_vad_flag_t arg4 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_core_session_t *)jarg2; + arg3 = (switch_codec_t *)jarg3; + arg4 = (switch_vad_flag_t)jarg4; + result = (switch_status_t)switch_rtp_enable_vad(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_disable_vad(void * jarg1) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + result = (switch_status_t)switch_rtp_disable_vad(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_write_frame(void * jarg1, void * jarg2) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_frame_t *arg2 = (switch_frame_t *) 0 ; + int result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_frame_t *)jarg2; + result = (int)switch_rtp_write_frame(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_write_manual(void * jarg1, void * jarg2, unsigned long jarg3, unsigned char jarg4, unsigned char jarg5, unsigned long jarg6, void * jarg7) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + void *arg2 = (void *) 0 ; + uint32_t arg3 ; + uint8_t arg4 ; + switch_payload_t arg5 ; + uint32_t arg6 ; + switch_frame_flag_t *arg7 = (switch_frame_flag_t *) 0 ; + int result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (void *)jarg2; + arg3 = (uint32_t)jarg3; + arg4 = (uint8_t)jarg4; + arg5 = (switch_payload_t)jarg5; + arg6 = (uint32_t)jarg6; + arg7 = (switch_frame_flag_t *)jarg7; + result = (int)switch_rtp_write_manual(arg1,arg2,arg3,arg4,arg5,arg6,arg7); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_rtp_get_ssrc(void * jarg1) { + unsigned long jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + uint32_t result; + + arg1 = (switch_rtp_t *)jarg1; + result = (uint32_t)switch_rtp_get_ssrc(arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_set_private(void * jarg1, void * jarg2) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (void *)jarg2; + switch_rtp_set_private(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_set_telephony_event(void * jarg1, unsigned char jarg2) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_payload_t arg2 ; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_payload_t)jarg2; + switch_rtp_set_telephony_event(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_set_telephony_recv_event(void * jarg1, unsigned char jarg2) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_payload_t arg2 ; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_payload_t)jarg2; + switch_rtp_set_telephony_recv_event(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_set_cng_pt(void * jarg1, unsigned char jarg2) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_payload_t arg2 ; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_payload_t)jarg2; + switch_rtp_set_cng_pt(arg1,arg2); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_get_private(void * jarg1) { + void * jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + void *result = 0 ; + + arg1 = (switch_rtp_t *)jarg1; + result = (void *)switch_rtp_get_private(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_activate_stun_ping(void * jarg1, char * jarg2, unsigned short jarg3, unsigned long jarg4, int jarg5) { + int jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + char *arg2 = (char *) 0 ; + switch_port_t arg3 ; + uint32_t arg4 ; + switch_bool_t arg5 ; + switch_status_t result; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_port_t)jarg3; + arg4 = (uint32_t)jarg4; + arg5 = (switch_bool_t)jarg5; + result = (switch_status_t)switch_rtp_activate_stun_ping(arg1,(char const *)arg2,arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_intentional_bugs(void * jarg1, int jarg2) { + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_rtp_bug_flag_t arg2 ; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_rtp_bug_flag_t)jarg2; + switch_rtp_intentional_bugs(arg1,arg2); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_get_stats(void * jarg1, void * jarg2) { + void * jresult ; + switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; + switch_memory_pool_t *arg2 = (switch_memory_pool_t *) 0 ; + switch_rtp_stats_t *result = 0 ; + + arg1 = (switch_rtp_t *)jarg1; + arg2 = (switch_memory_pool_t *)jarg2; + result = (switch_rtp_stats_t *)switch_rtp_get_stats(arg1,arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_log_node_t_data_set(void * jarg1, char * jarg2) { + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_log_node_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->data) delete [] arg1->data; + if (arg2) { + arg1->data = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->data, (const char *)arg2); + } else { + arg1->data = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_log_node_t_data_get(void * jarg1) { + char * jresult ; + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_log_node_t *)jarg1; + result = (char *) ((arg1)->data); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_log_node_t_file_set(void * jarg1, char * jarg2) { + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + char *arg2 ; + + arg1 = (switch_log_node_t *)jarg1; + arg2 = (char *)jarg2; + { + if(arg2) { + strncpy((char*)arg1->file, (const char *)arg2, 80-1); + arg1->file[80-1] = 0; + } else { + arg1->file[0] = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_log_node_t_file_get(void * jarg1) { + char * jresult ; + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_log_node_t *)jarg1; + result = (char *)(char *) ((arg1)->file); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_log_node_t_line_set(void * jarg1, unsigned long jarg2) { + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_log_node_t *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->line = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_log_node_t_line_get(void * jarg1) { + unsigned long jresult ; + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + uint32_t result; + + arg1 = (switch_log_node_t *)jarg1; + result = (uint32_t) ((arg1)->line); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_log_node_t_func_set(void * jarg1, char * jarg2) { + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + char *arg2 ; + + arg1 = (switch_log_node_t *)jarg1; + arg2 = (char *)jarg2; + { + if(arg2) { + strncpy((char*)arg1->func, (const char *)arg2, 80-1); + arg1->func[80-1] = 0; + } else { + arg1->func[0] = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_log_node_t_func_get(void * jarg1) { + char * jresult ; + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_log_node_t *)jarg1; + result = (char *)(char *) ((arg1)->func); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_log_node_t_level_set(void * jarg1, int jarg2) { + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + switch_log_level_t arg2 ; + + arg1 = (switch_log_node_t *)jarg1; + arg2 = (switch_log_level_t)jarg2; + if (arg1) (arg1)->level = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_log_node_t_level_get(void * jarg1) { + int jresult ; + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + switch_log_level_t result; + + arg1 = (switch_log_node_t *)jarg1; + result = (switch_log_level_t) ((arg1)->level); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_log_node_t_timestamp_set(void * jarg1, void * jarg2) { + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + switch_time_t arg2 ; + switch_time_t *argp2 ; + + arg1 = (switch_log_node_t *)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)->timestamp = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_log_node_t_timestamp_get(void * jarg1) { + void * jresult ; + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + switch_time_t result; + + arg1 = (switch_log_node_t *)jarg1; + result = ((arg1)->timestamp); + jresult = new switch_time_t((const switch_time_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_log_node_t_content_set(void * jarg1, char * jarg2) { + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_log_node_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->content) delete [] arg1->content; + if (arg2) { + arg1->content = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->content, (const char *)arg2); + } else { + arg1->content = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_log_node_t_content_get(void * jarg1) { + char * jresult ; + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_log_node_t *)jarg1; + result = (char *) ((arg1)->content); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_log_node_t_userdata_set(void * jarg1, char * jarg2) { + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_log_node_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->userdata) delete [] arg1->userdata; + if (arg2) { + arg1->userdata = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->userdata, (const char *)arg2); + } else { + arg1->userdata = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_log_node_t_userdata_get(void * jarg1) { + char * jresult ; + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + char *result = 0 ; + + arg1 = (switch_log_node_t *)jarg1; + result = (char *) ((arg1)->userdata); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_log_node_t_channel_set(void * jarg1, int jarg2) { + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + switch_text_channel_t arg2 ; + + arg1 = (switch_log_node_t *)jarg1; + arg2 = (switch_text_channel_t)jarg2; + if (arg1) (arg1)->channel = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_log_node_t_channel_get(void * jarg1) { + int jresult ; + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + switch_text_channel_t result; + + arg1 = (switch_log_node_t *)jarg1; + result = (switch_text_channel_t) ((arg1)->channel); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_log_node_t() { + void * jresult ; + switch_log_node_t *result = 0 ; + + result = (switch_log_node_t *)new switch_log_node_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_log_node_t(void * jarg1) { + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + + arg1 = (switch_log_node_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_log_init(void * jarg1, int jarg2) { + int jresult ; + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + switch_bool_t arg2 ; + switch_status_t result; + + arg1 = (switch_memory_pool_t *)jarg1; + arg2 = (switch_bool_t)jarg2; + result = (switch_status_t)switch_log_init(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_log_shutdown() { + int jresult ; + switch_status_t result; + + result = (switch_status_t)switch_log_shutdown(); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_log_bind_logger(void * jarg1, int jarg2, int jarg3) { + int jresult ; + switch_log_function_t arg1 = (switch_log_function_t) 0 ; + switch_log_level_t arg2 ; + switch_bool_t arg3 ; + switch_status_t result; + + arg1 = (switch_log_function_t)jarg1; + arg2 = (switch_log_level_t)jarg2; + arg3 = (switch_bool_t)jarg3; + result = (switch_status_t)switch_log_bind_logger(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_log_unbind_logger(void * jarg1) { + int jresult ; + switch_log_function_t arg1 = (switch_log_function_t) 0 ; + switch_status_t result; + + arg1 = (switch_log_function_t)jarg1; + result = (switch_status_t)switch_log_unbind_logger(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_log_level2str(int jarg1) { + char * jresult ; + switch_log_level_t arg1 ; + char *result = 0 ; + + arg1 = (switch_log_level_t)jarg1; + result = (char *)switch_log_level2str(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_log_str2level(char * jarg1) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_log_level_t result; + + arg1 = (char *)jarg1; + result = (switch_log_level_t)switch_log_str2level((char const *)arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_log_str2mask(char * jarg1) { + unsigned long jresult ; + char *arg1 = (char *) 0 ; + uint32_t result; + + arg1 = (char *)jarg1; + result = (uint32_t)switch_log_str2mask((char const *)arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_log_node_dup(void * jarg1) { + void * jresult ; + switch_log_node_t *arg1 = (switch_log_node_t *) 0 ; + switch_log_node_t *result = 0 ; + + arg1 = (switch_log_node_t *)jarg1; + result = (switch_log_node_t *)switch_log_node_dup((switch_log_node_t const *)arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_log_node_free(void * jarg1) { + switch_log_node_t **arg1 = (switch_log_node_t **) 0 ; + + arg1 = (switch_log_node_t **)jarg1; + switch_log_node_free(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_XML_BUFSIZE_get() { + int jresult ; + int result; + + result = (int)(1024); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_name_set(void * jarg1, char * jarg2) { + switch_xml *arg1 = (switch_xml *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_xml *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->name) delete [] arg1->name; + if (arg2) { + arg1->name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->name, (const char *)arg2); + } else { + arg1->name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_xml_name_get(void * jarg1) { + char * jresult ; + switch_xml *arg1 = (switch_xml *) 0 ; + char *result = 0 ; + + arg1 = (switch_xml *)jarg1; + result = (char *) ((arg1)->name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_attr_set(void * jarg1, void * jarg2) { + switch_xml *arg1 = (switch_xml *) 0 ; + char **arg2 = (char **) 0 ; + + arg1 = (switch_xml *)jarg1; + arg2 = (char **)jarg2; + if (arg1) (arg1)->attr = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_attr_get(void * jarg1) { + void * jresult ; + switch_xml *arg1 = (switch_xml *) 0 ; + char **result = 0 ; + + arg1 = (switch_xml *)jarg1; + result = (char **) ((arg1)->attr); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_txt_set(void * jarg1, char * jarg2) { + switch_xml *arg1 = (switch_xml *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_xml *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->txt) delete [] arg1->txt; + if (arg2) { + arg1->txt = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->txt, (const char *)arg2); + } else { + arg1->txt = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_xml_txt_get(void * jarg1) { + char * jresult ; + switch_xml *arg1 = (switch_xml *) 0 ; + char *result = 0 ; + + arg1 = (switch_xml *)jarg1; + result = (char *) ((arg1)->txt); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_free_path_set(void * jarg1, char * jarg2) { + switch_xml *arg1 = (switch_xml *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_xml *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->free_path) delete [] arg1->free_path; + if (arg2) { + arg1->free_path = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->free_path, (const char *)arg2); + } else { + arg1->free_path = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_xml_free_path_get(void * jarg1) { + char * jresult ; + switch_xml *arg1 = (switch_xml *) 0 ; + char *result = 0 ; + + arg1 = (switch_xml *)jarg1; + result = (char *) ((arg1)->free_path); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_off_set(void * jarg1, void * jarg2) { + switch_xml *arg1 = (switch_xml *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + + arg1 = (switch_xml *)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)->off = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_off_get(void * jarg1) { + void * jresult ; + switch_xml *arg1 = (switch_xml *) 0 ; + switch_size_t result; + + arg1 = (switch_xml *)jarg1; + result = ((arg1)->off); + jresult = new switch_size_t((const switch_size_t &)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_next_set(void * jarg1, void * jarg2) { + switch_xml *arg1 = (switch_xml *) 0 ; + switch_xml_t arg2 = (switch_xml_t) 0 ; + + arg1 = (switch_xml *)jarg1; + arg2 = (switch_xml_t)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_next_get(void * jarg1) { + void * jresult ; + switch_xml *arg1 = (switch_xml *) 0 ; + switch_xml_t result; + + arg1 = (switch_xml *)jarg1; + result = (switch_xml_t) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_sibling_set(void * jarg1, void * jarg2) { + switch_xml *arg1 = (switch_xml *) 0 ; + switch_xml_t arg2 = (switch_xml_t) 0 ; + + arg1 = (switch_xml *)jarg1; + arg2 = (switch_xml_t)jarg2; + if (arg1) (arg1)->sibling = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_sibling_get(void * jarg1) { + void * jresult ; + switch_xml *arg1 = (switch_xml *) 0 ; + switch_xml_t result; + + arg1 = (switch_xml *)jarg1; + result = (switch_xml_t) ((arg1)->sibling); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_ordered_set(void * jarg1, void * jarg2) { + switch_xml *arg1 = (switch_xml *) 0 ; + switch_xml_t arg2 = (switch_xml_t) 0 ; + + arg1 = (switch_xml *)jarg1; + arg2 = (switch_xml_t)jarg2; + if (arg1) (arg1)->ordered = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_ordered_get(void * jarg1) { + void * jresult ; + switch_xml *arg1 = (switch_xml *) 0 ; + switch_xml_t result; + + arg1 = (switch_xml *)jarg1; + result = (switch_xml_t) ((arg1)->ordered); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_child_set(void * jarg1, void * jarg2) { + switch_xml *arg1 = (switch_xml *) 0 ; + switch_xml_t arg2 = (switch_xml_t) 0 ; + + arg1 = (switch_xml *)jarg1; + arg2 = (switch_xml_t)jarg2; + if (arg1) (arg1)->child = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_child_get(void * jarg1) { + void * jresult ; + switch_xml *arg1 = (switch_xml *) 0 ; + switch_xml_t result; + + arg1 = (switch_xml *)jarg1; + result = (switch_xml_t) ((arg1)->child); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_parent_set(void * jarg1, void * jarg2) { + switch_xml *arg1 = (switch_xml *) 0 ; + switch_xml_t arg2 = (switch_xml_t) 0 ; + + arg1 = (switch_xml *)jarg1; + arg2 = (switch_xml_t)jarg2; + if (arg1) (arg1)->parent = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_parent_get(void * jarg1) { + void * jresult ; + switch_xml *arg1 = (switch_xml *) 0 ; + switch_xml_t result; + + arg1 = (switch_xml *)jarg1; + result = (switch_xml_t) ((arg1)->parent); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_flags_set(void * jarg1, unsigned long jarg2) { + switch_xml *arg1 = (switch_xml *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_xml *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_xml_flags_get(void * jarg1) { + unsigned long jresult ; + switch_xml *arg1 = (switch_xml *) 0 ; + uint32_t result; + + arg1 = (switch_xml *)jarg1; + result = (uint32_t) ((arg1)->flags); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_is_switch_xml_root_t_set(void * jarg1, int jarg2) { + switch_xml *arg1 = (switch_xml *) 0 ; + switch_bool_t arg2 ; + + arg1 = (switch_xml *)jarg1; + arg2 = (switch_bool_t)jarg2; + if (arg1) (arg1)->is_switch_xml_root_t = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_is_switch_xml_root_t_get(void * jarg1) { + int jresult ; + switch_xml *arg1 = (switch_xml *) 0 ; + switch_bool_t result; + + arg1 = (switch_xml *)jarg1; + result = (switch_bool_t) ((arg1)->is_switch_xml_root_t); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_xml() { + void * jresult ; + switch_xml *result = 0 ; + + result = (switch_xml *)new switch_xml(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_xml(void * jarg1) { + switch_xml *arg1 = (switch_xml *) 0 ; + + arg1 = (switch_xml *)jarg1; + delete arg1; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_parse_str_dynamic(char * jarg1, int jarg2) { + void * jresult ; + char *arg1 = (char *) 0 ; + switch_bool_t arg2 ; + switch_xml_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_bool_t)jarg2; + result = (switch_xml_t)switch_xml_parse_str_dynamic(arg1,arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_parse_str(char * jarg1, void * jarg2) { + void * jresult ; + char *arg1 = (char *) 0 ; + switch_size_t arg2 ; + switch_size_t *argp2 ; + switch_xml_t result; + + arg1 = (char *)jarg1; + argp2 = (switch_size_t *)jarg2; + if (!argp2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg2 = *argp2; + result = (switch_xml_t)switch_xml_parse_str(arg1,arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_parse_fd(int jarg1) { + void * jresult ; + int arg1 ; + switch_xml_t result; + + arg1 = (int)jarg1; + result = (switch_xml_t)switch_xml_parse_fd(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_parse_file(char * jarg1) { + void * jresult ; + char *arg1 = (char *) 0 ; + switch_xml_t result; + + arg1 = (char *)jarg1; + result = (switch_xml_t)switch_xml_parse_file((char const *)arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_parse_file_simple(char * jarg1) { + void * jresult ; + char *arg1 = (char *) 0 ; + switch_xml_t result; + + arg1 = (char *)jarg1; + result = (switch_xml_t)switch_xml_parse_file_simple((char const *)arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_parse_fp(void * jarg1) { + void * jresult ; + FILE *arg1 = (FILE *) 0 ; + switch_xml_t result; + + arg1 = (FILE *)jarg1; + result = (switch_xml_t)switch_xml_parse_fp(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_child(void * jarg1, char * jarg2) { + void * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + char *arg2 = (char *) 0 ; + switch_xml_t result; + + arg1 = (switch_xml_t)jarg1; + arg2 = (char *)jarg2; + result = (switch_xml_t)switch_xml_child(arg1,(char const *)arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_find_child(void * jarg1, char * jarg2, char * jarg3, char * jarg4) { + void * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + switch_xml_t result; + + arg1 = (switch_xml_t)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + result = (switch_xml_t)switch_xml_find_child(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_find_child_multi(void * jarg1, char * jarg2) { + void * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + char *arg2 = (char *) 0 ; + void *arg3 = 0 ; + switch_xml_t result; + + arg1 = (switch_xml_t)jarg1; + arg2 = (char *)jarg2; + result = (switch_xml_t)switch_xml_find_child_multi(arg1,(char const *)arg2,arg3); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_xml_attr(void * jarg1, char * jarg2) { + char * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + arg1 = (switch_xml_t)jarg1; + arg2 = (char *)jarg2; + result = (char *)switch_xml_attr(arg1,(char const *)arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_xml_attr_soft(void * jarg1, char * jarg2) { + char * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + arg1 = (switch_xml_t)jarg1; + arg2 = (char *)jarg2; + result = (char *)switch_xml_attr_soft(arg1,(char const *)arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_get(void * jarg1) { + void * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + void *arg2 = 0 ; + switch_xml_t result; + + arg1 = (switch_xml_t)jarg1; + result = (switch_xml_t)switch_xml_get(arg1,arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_xml_toxml(void * jarg1, int jarg2) { + char * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + switch_bool_t arg2 ; + char *result = 0 ; + + arg1 = (switch_xml_t)jarg1; + arg2 = (switch_bool_t)jarg2; + result = (char *)switch_xml_toxml(arg1,arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_xml_toxml_buf(void * jarg1, char * jarg2, void * jarg3, void * jarg4, int jarg5) { + char * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + char *arg2 = (char *) 0 ; + switch_size_t arg3 ; + switch_size_t arg4 ; + switch_bool_t arg5 ; + switch_size_t *argp3 ; + switch_size_t *argp4 ; + char *result = 0 ; + + arg1 = (switch_xml_t)jarg1; + arg2 = (char *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + argp4 = (switch_size_t *)jarg4; + if (!argp4) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg4 = *argp4; + arg5 = (switch_bool_t)jarg5; + result = (char *)switch_xml_toxml_buf(arg1,arg2,arg3,arg4,arg5); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_free(void * jarg1) { + switch_xml_t arg1 = (switch_xml_t) 0 ; + + arg1 = (switch_xml_t)jarg1; + switch_xml_free(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_free_in_thread(void * jarg1, int jarg2) { + switch_xml_t arg1 = (switch_xml_t) 0 ; + int arg2 ; + + arg1 = (switch_xml_t)jarg1; + arg2 = (int)jarg2; + switch_xml_free_in_thread(arg1,arg2); +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_xml_error(void * jarg1) { + char * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + char *result = 0 ; + + arg1 = (switch_xml_t)jarg1; + result = (char *)switch_xml_error(arg1); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_new(char * jarg1) { + void * jresult ; + char *arg1 = (char *) 0 ; + switch_xml_t result; + + arg1 = (char *)jarg1; + result = (switch_xml_t)switch_xml_new((char const *)arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_add_child(void * jarg1, char * jarg2, void * jarg3) { + void * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + char *arg2 = (char *) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_xml_t result; + + arg1 = (switch_xml_t)jarg1; + arg2 = (char *)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = (switch_xml_t)switch_xml_add_child(arg1,(char const *)arg2,arg3); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_set_txt(void * jarg1, char * jarg2) { + void * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + char *arg2 = (char *) 0 ; + switch_xml_t result; + + arg1 = (switch_xml_t)jarg1; + arg2 = (char *)jarg2; + result = (switch_xml_t)switch_xml_set_txt(arg1,(char const *)arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_set_attr(void * jarg1, char * jarg2, char * jarg3) { + void * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + switch_xml_t result; + + arg1 = (switch_xml_t)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (switch_xml_t)switch_xml_set_attr(arg1,(char const *)arg2,(char const *)arg3); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_set_flag(void * jarg1, int jarg2) { + void * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + switch_xml_flag_t arg2 ; + switch_xml_t result; + + arg1 = (switch_xml_t)jarg1; + arg2 = (switch_xml_flag_t)jarg2; + result = (switch_xml_t)switch_xml_set_flag(arg1,arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_cut(void * jarg1) { + void * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + switch_xml_t result; + + arg1 = (switch_xml_t)jarg1; + result = (switch_xml_t)switch_xml_cut(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_insert(void * jarg1, void * jarg2, void * jarg3) { + void * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + switch_xml_t arg2 = (switch_xml_t) 0 ; + switch_size_t arg3 ; + switch_size_t *argp3 ; + switch_xml_t result; + + arg1 = (switch_xml_t)jarg1; + arg2 = (switch_xml_t)jarg2; + argp3 = (switch_size_t *)jarg3; + if (!argp3) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null switch_size_t", 0); + return 0; + } + arg3 = *argp3; + result = (switch_xml_t)switch_xml_insert(arg1,arg2,arg3); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_open_root(unsigned char jarg1, void * jarg2) { + void * jresult ; + uint8_t arg1 ; + char **arg2 = (char **) 0 ; + switch_xml_t result; + + arg1 = (uint8_t)jarg1; + arg2 = (char **)jarg2; + result = (switch_xml_t)switch_xml_open_root(arg1,(char const **)arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_init(void * jarg1, void * jarg2) { + int jresult ; + switch_memory_pool_t *arg1 = (switch_memory_pool_t *) 0 ; + char **arg2 = (char **) 0 ; + switch_status_t result; + + arg1 = (switch_memory_pool_t *)jarg1; + arg2 = (char **)jarg2; + result = (switch_status_t)switch_xml_init(arg1,(char const **)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_destroy() { + int jresult ; + switch_status_t result; + + result = (switch_status_t)switch_xml_destroy(); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_root() { + void * jresult ; + switch_xml_t result; + + result = (switch_xml_t)switch_xml_root(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate(char * jarg1, char * jarg2, char * jarg3, char * jarg4, void * jarg5, void * jarg6, void * jarg7, int jarg8) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + switch_xml_t *arg5 = (switch_xml_t *) 0 ; + switch_xml_t *arg6 = (switch_xml_t *) 0 ; + switch_event_t *arg7 = (switch_event_t *) 0 ; + switch_bool_t arg8 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (switch_xml_t *)jarg5; + arg6 = (switch_xml_t *)jarg6; + arg7 = (switch_event_t *)jarg7; + arg8 = (switch_bool_t)jarg8; + result = (switch_status_t)switch_xml_locate((char const *)arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate_domain(char * jarg1, void * jarg2, void * jarg3, void * jarg4) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_event_t *arg2 = (switch_event_t *) 0 ; + switch_xml_t *arg3 = (switch_xml_t *) 0 ; + switch_xml_t *arg4 = (switch_xml_t *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_event_t *)jarg2; + arg3 = (switch_xml_t *)jarg3; + arg4 = (switch_xml_t *)jarg4; + result = (switch_status_t)switch_xml_locate_domain((char const *)arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate_group(char * jarg1, char * jarg2, void * jarg3, void * jarg4, void * jarg5, void * jarg6) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + switch_xml_t *arg3 = (switch_xml_t *) 0 ; + switch_xml_t *arg4 = (switch_xml_t *) 0 ; + switch_xml_t *arg5 = (switch_xml_t *) 0 ; + switch_event_t *arg6 = (switch_event_t *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (switch_xml_t *)jarg3; + arg4 = (switch_xml_t *)jarg4; + arg5 = (switch_xml_t *)jarg5; + arg6 = (switch_event_t *)jarg6; + result = (switch_status_t)switch_xml_locate_group((char const *)arg1,(char const *)arg2,arg3,arg4,arg5,arg6); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate_user(char * jarg1, char * jarg2, char * jarg3, char * jarg4, void * jarg5, void * jarg6, void * jarg7, void * jarg8, void * jarg9) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + switch_xml_t *arg5 = (switch_xml_t *) 0 ; + switch_xml_t *arg6 = (switch_xml_t *) 0 ; + switch_xml_t *arg7 = (switch_xml_t *) 0 ; + switch_xml_t *arg8 = (switch_xml_t *) 0 ; + switch_event_t *arg9 = (switch_event_t *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (switch_xml_t *)jarg5; + arg6 = (switch_xml_t *)jarg6; + arg7 = (switch_xml_t *)jarg7; + arg8 = (switch_xml_t *)jarg8; + arg9 = (switch_event_t *)jarg9; + result = (switch_status_t)switch_xml_locate_user((char const *)arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,arg5,arg6,arg7,arg8,arg9); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate_user_in_domain(char * jarg1, void * jarg2, void * jarg3, void * jarg4) { + int jresult ; + char *arg1 = (char *) 0 ; + switch_xml_t arg2 = (switch_xml_t) 0 ; + switch_xml_t *arg3 = (switch_xml_t *) 0 ; + switch_xml_t *arg4 = (switch_xml_t *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_xml_t)jarg2; + arg3 = (switch_xml_t *)jarg3; + arg4 = (switch_xml_t *)jarg4; + result = (switch_status_t)switch_xml_locate_user_in_domain((char const *)arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_locate_user_merged(char * jarg1, char * jarg2, char * jarg3, char * jarg4, void * jarg5, void * jarg6) { + int jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + switch_xml_t *arg5 = (switch_xml_t *) 0 ; + switch_event_t *arg6 = (switch_event_t *) 0 ; + switch_status_t result; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (switch_xml_t *)jarg5; + arg6 = (switch_event_t *)jarg6; + result = (switch_status_t)switch_xml_locate_user_merged((char const *)arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,arg5,arg6); + jresult = 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 ; + switch_xml_t arg3 = (switch_xml_t) 0 ; + + arg1 = (switch_xml_t)jarg1; + arg2 = (switch_xml_t)jarg2; + arg3 = (switch_xml_t)jarg3; + switch_xml_merge_user(arg1,arg2,arg3); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_dup(void * jarg1) { + void * jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + switch_xml_t result; + + arg1 = (switch_xml_t)jarg1; + result = (switch_xml_t)switch_xml_dup(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_open_cfg(char * jarg1, void * jarg2, void * jarg3) { + void * jresult ; + char *arg1 = (char *) 0 ; + switch_xml_t *arg2 = (switch_xml_t *) 0 ; + switch_event_t *arg3 = (switch_event_t *) 0 ; + switch_xml_t result; + + arg1 = (char *)jarg1; + arg2 = (switch_xml_t *)jarg2; + arg3 = (switch_event_t *)jarg3; + result = (switch_xml_t)switch_xml_open_cfg((char const *)arg1,arg2,arg3); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_set_binding_sections(void * jarg1, unsigned long jarg2) { + switch_xml_binding_t *arg1 = (switch_xml_binding_t *) 0 ; + switch_xml_section_t arg2 ; + + arg1 = (switch_xml_binding_t *)jarg1; + arg2 = (switch_xml_section_t)jarg2; + switch_xml_set_binding_sections(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_xml_set_binding_user_data(void * jarg1, void * jarg2) { + switch_xml_binding_t *arg1 = (switch_xml_binding_t *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_xml_binding_t *)jarg1; + arg2 = (void *)jarg2; + switch_xml_set_binding_user_data(arg1,arg2); +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_xml_get_binding_sections(void * jarg1) { + unsigned long jresult ; + switch_xml_binding_t *arg1 = (switch_xml_binding_t *) 0 ; + switch_xml_section_t result; + + arg1 = (switch_xml_binding_t *)jarg1; + result = (switch_xml_section_t)switch_xml_get_binding_sections(arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_xml_get_binding_user_data(void * jarg1) { + void * jresult ; + switch_xml_binding_t *arg1 = (switch_xml_binding_t *) 0 ; + void *result = 0 ; + + arg1 = (switch_xml_binding_t *)jarg1; + result = (void *)switch_xml_get_binding_user_data(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_bind_search_function_ret(void * jarg1, unsigned long jarg2, void * jarg3, void * jarg4) { + int jresult ; + switch_xml_search_function_t arg1 = (switch_xml_search_function_t) 0 ; + switch_xml_section_t arg2 ; + void *arg3 = (void *) 0 ; + switch_xml_binding_t **arg4 = (switch_xml_binding_t **) 0 ; + switch_status_t result; + + arg1 = (switch_xml_search_function_t)jarg1; + arg2 = (switch_xml_section_t)jarg2; + arg3 = (void *)jarg3; + arg4 = (switch_xml_binding_t **)jarg4; + result = (switch_status_t)switch_xml_bind_search_function_ret(arg1,arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_unbind_search_function(void * jarg1) { + int jresult ; + switch_xml_binding_t **arg1 = (switch_xml_binding_t **) 0 ; + switch_status_t result; + + arg1 = (switch_xml_binding_t **)jarg1; + result = (switch_status_t)switch_xml_unbind_search_function(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_unbind_search_function_ptr(void * jarg1) { + int jresult ; + switch_xml_search_function_t arg1 = (switch_xml_search_function_t) 0 ; + switch_status_t result; + + arg1 = (switch_xml_search_function_t)jarg1; + result = (switch_status_t)switch_xml_unbind_search_function_ptr(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_xml_parse_section_string(char * jarg1) { + unsigned long jresult ; + char *arg1 = (char *) 0 ; + switch_xml_section_t result; + + arg1 = (char *)jarg1; + result = (switch_xml_section_t)switch_xml_parse_section_string((char const *)arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_std_datetime_check(void * jarg1) { + int jresult ; + switch_xml_t arg1 = (switch_xml_t) 0 ; + int result; + + arg1 = (switch_xml_t)jarg1; + result = (int)switch_xml_std_datetime_check(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_outgoing_channel_outgoing_channel_set(void * jarg1, void * jarg2) { + switch_io_event_hook_outgoing_channel *arg1 = (switch_io_event_hook_outgoing_channel *) 0 ; + switch_outgoing_channel_hook_t arg2 = (switch_outgoing_channel_hook_t) 0 ; + + arg1 = (switch_io_event_hook_outgoing_channel *)jarg1; + arg2 = (switch_outgoing_channel_hook_t)jarg2; + if (arg1) (arg1)->outgoing_channel = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_outgoing_channel_outgoing_channel_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_outgoing_channel *arg1 = (switch_io_event_hook_outgoing_channel *) 0 ; + switch_outgoing_channel_hook_t result; + + arg1 = (switch_io_event_hook_outgoing_channel *)jarg1; + result = (switch_outgoing_channel_hook_t) ((arg1)->outgoing_channel); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_outgoing_channel_next_set(void * jarg1, void * jarg2) { + switch_io_event_hook_outgoing_channel *arg1 = (switch_io_event_hook_outgoing_channel *) 0 ; + switch_io_event_hook_outgoing_channel *arg2 = (switch_io_event_hook_outgoing_channel *) 0 ; + + arg1 = (switch_io_event_hook_outgoing_channel *)jarg1; + arg2 = (switch_io_event_hook_outgoing_channel *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_outgoing_channel_next_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_outgoing_channel *arg1 = (switch_io_event_hook_outgoing_channel *) 0 ; + switch_io_event_hook_outgoing_channel *result = 0 ; + + arg1 = (switch_io_event_hook_outgoing_channel *)jarg1; + result = (switch_io_event_hook_outgoing_channel *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_io_event_hook_outgoing_channel() { + void * jresult ; + switch_io_event_hook_outgoing_channel *result = 0 ; + + result = (switch_io_event_hook_outgoing_channel *)new switch_io_event_hook_outgoing_channel(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_io_event_hook_outgoing_channel(void * jarg1) { + switch_io_event_hook_outgoing_channel *arg1 = (switch_io_event_hook_outgoing_channel *) 0 ; + + arg1 = (switch_io_event_hook_outgoing_channel *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_receive_message_receive_message_set(void * jarg1, void * jarg2) { + switch_io_event_hook_receive_message *arg1 = (switch_io_event_hook_receive_message *) 0 ; + switch_receive_message_hook_t arg2 = (switch_receive_message_hook_t) 0 ; + + arg1 = (switch_io_event_hook_receive_message *)jarg1; + arg2 = (switch_receive_message_hook_t)jarg2; + if (arg1) (arg1)->receive_message = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_receive_message_receive_message_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_receive_message *arg1 = (switch_io_event_hook_receive_message *) 0 ; + switch_receive_message_hook_t result; + + arg1 = (switch_io_event_hook_receive_message *)jarg1; + result = (switch_receive_message_hook_t) ((arg1)->receive_message); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_receive_message_next_set(void * jarg1, void * jarg2) { + switch_io_event_hook_receive_message *arg1 = (switch_io_event_hook_receive_message *) 0 ; + switch_io_event_hook_receive_message *arg2 = (switch_io_event_hook_receive_message *) 0 ; + + arg1 = (switch_io_event_hook_receive_message *)jarg1; + arg2 = (switch_io_event_hook_receive_message *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_receive_message_next_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_receive_message *arg1 = (switch_io_event_hook_receive_message *) 0 ; + switch_io_event_hook_receive_message *result = 0 ; + + arg1 = (switch_io_event_hook_receive_message *)jarg1; + result = (switch_io_event_hook_receive_message *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_io_event_hook_receive_message() { + void * jresult ; + switch_io_event_hook_receive_message *result = 0 ; + + result = (switch_io_event_hook_receive_message *)new switch_io_event_hook_receive_message(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_io_event_hook_receive_message(void * jarg1) { + switch_io_event_hook_receive_message *arg1 = (switch_io_event_hook_receive_message *) 0 ; + + arg1 = (switch_io_event_hook_receive_message *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_receive_event_receive_event_set(void * jarg1, void * jarg2) { + switch_io_event_hook_receive_event *arg1 = (switch_io_event_hook_receive_event *) 0 ; + switch_receive_event_hook_t arg2 = (switch_receive_event_hook_t) 0 ; + + arg1 = (switch_io_event_hook_receive_event *)jarg1; + arg2 = (switch_receive_event_hook_t)jarg2; + if (arg1) (arg1)->receive_event = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_receive_event_receive_event_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_receive_event *arg1 = (switch_io_event_hook_receive_event *) 0 ; + switch_receive_event_hook_t result; + + arg1 = (switch_io_event_hook_receive_event *)jarg1; + result = (switch_receive_event_hook_t) ((arg1)->receive_event); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_receive_event_next_set(void * jarg1, void * jarg2) { + switch_io_event_hook_receive_event *arg1 = (switch_io_event_hook_receive_event *) 0 ; + switch_io_event_hook_receive_event *arg2 = (switch_io_event_hook_receive_event *) 0 ; + + arg1 = (switch_io_event_hook_receive_event *)jarg1; + arg2 = (switch_io_event_hook_receive_event *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_receive_event_next_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_receive_event *arg1 = (switch_io_event_hook_receive_event *) 0 ; + switch_io_event_hook_receive_event *result = 0 ; + + arg1 = (switch_io_event_hook_receive_event *)jarg1; + result = (switch_io_event_hook_receive_event *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_io_event_hook_receive_event() { + void * jresult ; + switch_io_event_hook_receive_event *result = 0 ; + + result = (switch_io_event_hook_receive_event *)new switch_io_event_hook_receive_event(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_io_event_hook_receive_event(void * jarg1) { + switch_io_event_hook_receive_event *arg1 = (switch_io_event_hook_receive_event *) 0 ; + + arg1 = (switch_io_event_hook_receive_event *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_read_frame_read_frame_set(void * jarg1, void * jarg2) { + switch_io_event_hook_read_frame *arg1 = (switch_io_event_hook_read_frame *) 0 ; + switch_read_frame_hook_t arg2 = (switch_read_frame_hook_t) 0 ; + + arg1 = (switch_io_event_hook_read_frame *)jarg1; + arg2 = (switch_read_frame_hook_t)jarg2; + if (arg1) (arg1)->read_frame = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_read_frame_read_frame_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_read_frame *arg1 = (switch_io_event_hook_read_frame *) 0 ; + switch_read_frame_hook_t result; + + arg1 = (switch_io_event_hook_read_frame *)jarg1; + result = (switch_read_frame_hook_t) ((arg1)->read_frame); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_read_frame_next_set(void * jarg1, void * jarg2) { + switch_io_event_hook_read_frame *arg1 = (switch_io_event_hook_read_frame *) 0 ; + switch_io_event_hook_read_frame *arg2 = (switch_io_event_hook_read_frame *) 0 ; + + arg1 = (switch_io_event_hook_read_frame *)jarg1; + arg2 = (switch_io_event_hook_read_frame *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_read_frame_next_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_read_frame *arg1 = (switch_io_event_hook_read_frame *) 0 ; + switch_io_event_hook_read_frame *result = 0 ; + + arg1 = (switch_io_event_hook_read_frame *)jarg1; + result = (switch_io_event_hook_read_frame *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_io_event_hook_read_frame() { + void * jresult ; + switch_io_event_hook_read_frame *result = 0 ; + + result = (switch_io_event_hook_read_frame *)new switch_io_event_hook_read_frame(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_io_event_hook_read_frame(void * jarg1) { + switch_io_event_hook_read_frame *arg1 = (switch_io_event_hook_read_frame *) 0 ; + + arg1 = (switch_io_event_hook_read_frame *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_video_read_frame_video_read_frame_set(void * jarg1, void * jarg2) { + switch_io_event_hook_video_read_frame *arg1 = (switch_io_event_hook_video_read_frame *) 0 ; + switch_read_frame_hook_t arg2 = (switch_read_frame_hook_t) 0 ; + + arg1 = (switch_io_event_hook_video_read_frame *)jarg1; + arg2 = (switch_read_frame_hook_t)jarg2; + if (arg1) (arg1)->video_read_frame = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_video_read_frame_video_read_frame_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_video_read_frame *arg1 = (switch_io_event_hook_video_read_frame *) 0 ; + switch_read_frame_hook_t result; + + arg1 = (switch_io_event_hook_video_read_frame *)jarg1; + result = (switch_read_frame_hook_t) ((arg1)->video_read_frame); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_video_read_frame_next_set(void * jarg1, void * jarg2) { + switch_io_event_hook_video_read_frame *arg1 = (switch_io_event_hook_video_read_frame *) 0 ; + switch_io_event_hook_video_read_frame *arg2 = (switch_io_event_hook_video_read_frame *) 0 ; + + arg1 = (switch_io_event_hook_video_read_frame *)jarg1; + arg2 = (switch_io_event_hook_video_read_frame *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_video_read_frame_next_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_video_read_frame *arg1 = (switch_io_event_hook_video_read_frame *) 0 ; + switch_io_event_hook_video_read_frame *result = 0 ; + + arg1 = (switch_io_event_hook_video_read_frame *)jarg1; + result = (switch_io_event_hook_video_read_frame *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_io_event_hook_video_read_frame() { + void * jresult ; + switch_io_event_hook_video_read_frame *result = 0 ; + + result = (switch_io_event_hook_video_read_frame *)new switch_io_event_hook_video_read_frame(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_io_event_hook_video_read_frame(void * jarg1) { + switch_io_event_hook_video_read_frame *arg1 = (switch_io_event_hook_video_read_frame *) 0 ; + + arg1 = (switch_io_event_hook_video_read_frame *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_write_frame_write_frame_set(void * jarg1, void * jarg2) { + switch_io_event_hook_write_frame *arg1 = (switch_io_event_hook_write_frame *) 0 ; + switch_write_frame_hook_t arg2 = (switch_write_frame_hook_t) 0 ; + + arg1 = (switch_io_event_hook_write_frame *)jarg1; + arg2 = (switch_write_frame_hook_t)jarg2; + if (arg1) (arg1)->write_frame = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_write_frame_write_frame_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_write_frame *arg1 = (switch_io_event_hook_write_frame *) 0 ; + switch_write_frame_hook_t result; + + arg1 = (switch_io_event_hook_write_frame *)jarg1; + result = (switch_write_frame_hook_t) ((arg1)->write_frame); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_write_frame_next_set(void * jarg1, void * jarg2) { + switch_io_event_hook_write_frame *arg1 = (switch_io_event_hook_write_frame *) 0 ; + switch_io_event_hook_write_frame *arg2 = (switch_io_event_hook_write_frame *) 0 ; + + arg1 = (switch_io_event_hook_write_frame *)jarg1; + arg2 = (switch_io_event_hook_write_frame *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_write_frame_next_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_write_frame *arg1 = (switch_io_event_hook_write_frame *) 0 ; + switch_io_event_hook_write_frame *result = 0 ; + + arg1 = (switch_io_event_hook_write_frame *)jarg1; + result = (switch_io_event_hook_write_frame *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_io_event_hook_write_frame() { + void * jresult ; + switch_io_event_hook_write_frame *result = 0 ; + + result = (switch_io_event_hook_write_frame *)new switch_io_event_hook_write_frame(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_io_event_hook_write_frame(void * jarg1) { + switch_io_event_hook_write_frame *arg1 = (switch_io_event_hook_write_frame *) 0 ; + + arg1 = (switch_io_event_hook_write_frame *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_video_write_frame_video_write_frame_set(void * jarg1, void * jarg2) { + switch_io_event_hook_video_write_frame *arg1 = (switch_io_event_hook_video_write_frame *) 0 ; + switch_video_write_frame_hook_t arg2 = (switch_video_write_frame_hook_t) 0 ; + + arg1 = (switch_io_event_hook_video_write_frame *)jarg1; + arg2 = (switch_video_write_frame_hook_t)jarg2; + if (arg1) (arg1)->video_write_frame = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_video_write_frame_video_write_frame_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_video_write_frame *arg1 = (switch_io_event_hook_video_write_frame *) 0 ; + switch_video_write_frame_hook_t result; + + arg1 = (switch_io_event_hook_video_write_frame *)jarg1; + result = (switch_video_write_frame_hook_t) ((arg1)->video_write_frame); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_video_write_frame_next_set(void * jarg1, void * jarg2) { + switch_io_event_hook_video_write_frame *arg1 = (switch_io_event_hook_video_write_frame *) 0 ; + switch_io_event_hook_video_write_frame *arg2 = (switch_io_event_hook_video_write_frame *) 0 ; + + arg1 = (switch_io_event_hook_video_write_frame *)jarg1; + arg2 = (switch_io_event_hook_video_write_frame *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_video_write_frame_next_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_video_write_frame *arg1 = (switch_io_event_hook_video_write_frame *) 0 ; + switch_io_event_hook_video_write_frame *result = 0 ; + + arg1 = (switch_io_event_hook_video_write_frame *)jarg1; + result = (switch_io_event_hook_video_write_frame *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_io_event_hook_video_write_frame() { + void * jresult ; + switch_io_event_hook_video_write_frame *result = 0 ; + + result = (switch_io_event_hook_video_write_frame *)new switch_io_event_hook_video_write_frame(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_io_event_hook_video_write_frame(void * jarg1) { + switch_io_event_hook_video_write_frame *arg1 = (switch_io_event_hook_video_write_frame *) 0 ; + + arg1 = (switch_io_event_hook_video_write_frame *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_kill_channel_kill_channel_set(void * jarg1, void * jarg2) { + switch_io_event_hook_kill_channel *arg1 = (switch_io_event_hook_kill_channel *) 0 ; + switch_kill_channel_hook_t arg2 = (switch_kill_channel_hook_t) 0 ; + + arg1 = (switch_io_event_hook_kill_channel *)jarg1; + arg2 = (switch_kill_channel_hook_t)jarg2; + if (arg1) (arg1)->kill_channel = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_kill_channel_kill_channel_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_kill_channel *arg1 = (switch_io_event_hook_kill_channel *) 0 ; + switch_kill_channel_hook_t result; + + arg1 = (switch_io_event_hook_kill_channel *)jarg1; + result = (switch_kill_channel_hook_t) ((arg1)->kill_channel); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_kill_channel_next_set(void * jarg1, void * jarg2) { + switch_io_event_hook_kill_channel *arg1 = (switch_io_event_hook_kill_channel *) 0 ; + switch_io_event_hook_kill_channel *arg2 = (switch_io_event_hook_kill_channel *) 0 ; + + arg1 = (switch_io_event_hook_kill_channel *)jarg1; + arg2 = (switch_io_event_hook_kill_channel *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_kill_channel_next_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_kill_channel *arg1 = (switch_io_event_hook_kill_channel *) 0 ; + switch_io_event_hook_kill_channel *result = 0 ; + + arg1 = (switch_io_event_hook_kill_channel *)jarg1; + result = (switch_io_event_hook_kill_channel *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_io_event_hook_kill_channel() { + void * jresult ; + switch_io_event_hook_kill_channel *result = 0 ; + + result = (switch_io_event_hook_kill_channel *)new switch_io_event_hook_kill_channel(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_io_event_hook_kill_channel(void * jarg1) { + switch_io_event_hook_kill_channel *arg1 = (switch_io_event_hook_kill_channel *) 0 ; + + arg1 = (switch_io_event_hook_kill_channel *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_send_dtmf_send_dtmf_set(void * jarg1, void * jarg2) { + switch_io_event_hook_send_dtmf *arg1 = (switch_io_event_hook_send_dtmf *) 0 ; + switch_send_dtmf_hook_t arg2 = (switch_send_dtmf_hook_t) 0 ; + + arg1 = (switch_io_event_hook_send_dtmf *)jarg1; + arg2 = (switch_send_dtmf_hook_t)jarg2; + if (arg1) (arg1)->send_dtmf = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_send_dtmf_send_dtmf_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_send_dtmf *arg1 = (switch_io_event_hook_send_dtmf *) 0 ; + switch_send_dtmf_hook_t result; + + arg1 = (switch_io_event_hook_send_dtmf *)jarg1; + result = (switch_send_dtmf_hook_t) ((arg1)->send_dtmf); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_send_dtmf_next_set(void * jarg1, void * jarg2) { + switch_io_event_hook_send_dtmf *arg1 = (switch_io_event_hook_send_dtmf *) 0 ; + switch_io_event_hook_send_dtmf *arg2 = (switch_io_event_hook_send_dtmf *) 0 ; + + arg1 = (switch_io_event_hook_send_dtmf *)jarg1; + arg2 = (switch_io_event_hook_send_dtmf *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_send_dtmf_next_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_send_dtmf *arg1 = (switch_io_event_hook_send_dtmf *) 0 ; + switch_io_event_hook_send_dtmf *result = 0 ; + + arg1 = (switch_io_event_hook_send_dtmf *)jarg1; + result = (switch_io_event_hook_send_dtmf *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_io_event_hook_send_dtmf() { + void * jresult ; + switch_io_event_hook_send_dtmf *result = 0 ; + + result = (switch_io_event_hook_send_dtmf *)new switch_io_event_hook_send_dtmf(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_io_event_hook_send_dtmf(void * jarg1) { + switch_io_event_hook_send_dtmf *arg1 = (switch_io_event_hook_send_dtmf *) 0 ; + + arg1 = (switch_io_event_hook_send_dtmf *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_recv_dtmf_recv_dtmf_set(void * jarg1, void * jarg2) { + switch_io_event_hook_recv_dtmf *arg1 = (switch_io_event_hook_recv_dtmf *) 0 ; + switch_recv_dtmf_hook_t arg2 = (switch_recv_dtmf_hook_t) 0 ; + + arg1 = (switch_io_event_hook_recv_dtmf *)jarg1; + arg2 = (switch_recv_dtmf_hook_t)jarg2; + if (arg1) (arg1)->recv_dtmf = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_recv_dtmf_recv_dtmf_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_recv_dtmf *arg1 = (switch_io_event_hook_recv_dtmf *) 0 ; + switch_recv_dtmf_hook_t result; + + arg1 = (switch_io_event_hook_recv_dtmf *)jarg1; + result = (switch_recv_dtmf_hook_t) ((arg1)->recv_dtmf); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_recv_dtmf_next_set(void * jarg1, void * jarg2) { + switch_io_event_hook_recv_dtmf *arg1 = (switch_io_event_hook_recv_dtmf *) 0 ; + switch_io_event_hook_recv_dtmf *arg2 = (switch_io_event_hook_recv_dtmf *) 0 ; + + arg1 = (switch_io_event_hook_recv_dtmf *)jarg1; + arg2 = (switch_io_event_hook_recv_dtmf *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_recv_dtmf_next_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_recv_dtmf *arg1 = (switch_io_event_hook_recv_dtmf *) 0 ; + switch_io_event_hook_recv_dtmf *result = 0 ; + + arg1 = (switch_io_event_hook_recv_dtmf *)jarg1; + result = (switch_io_event_hook_recv_dtmf *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_io_event_hook_recv_dtmf() { + void * jresult ; + switch_io_event_hook_recv_dtmf *result = 0 ; + + result = (switch_io_event_hook_recv_dtmf *)new switch_io_event_hook_recv_dtmf(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_io_event_hook_recv_dtmf(void * jarg1) { + switch_io_event_hook_recv_dtmf *arg1 = (switch_io_event_hook_recv_dtmf *) 0 ; + + arg1 = (switch_io_event_hook_recv_dtmf *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_state_change_state_change_set(void * jarg1, void * jarg2) { + switch_io_event_hook_state_change *arg1 = (switch_io_event_hook_state_change *) 0 ; + switch_state_change_hook_t arg2 = (switch_state_change_hook_t) 0 ; + + arg1 = (switch_io_event_hook_state_change *)jarg1; + arg2 = (switch_state_change_hook_t)jarg2; + if (arg1) (arg1)->state_change = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_state_change_state_change_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_state_change *arg1 = (switch_io_event_hook_state_change *) 0 ; + switch_state_change_hook_t result; + + arg1 = (switch_io_event_hook_state_change *)jarg1; + result = (switch_state_change_hook_t) ((arg1)->state_change); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_state_change_next_set(void * jarg1, void * jarg2) { + switch_io_event_hook_state_change *arg1 = (switch_io_event_hook_state_change *) 0 ; + switch_io_event_hook_state_change *arg2 = (switch_io_event_hook_state_change *) 0 ; + + arg1 = (switch_io_event_hook_state_change *)jarg1; + arg2 = (switch_io_event_hook_state_change *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_state_change_next_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_state_change *arg1 = (switch_io_event_hook_state_change *) 0 ; + switch_io_event_hook_state_change *result = 0 ; + + arg1 = (switch_io_event_hook_state_change *)jarg1; + result = (switch_io_event_hook_state_change *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_io_event_hook_state_change() { + void * jresult ; + switch_io_event_hook_state_change *result = 0 ; + + result = (switch_io_event_hook_state_change *)new switch_io_event_hook_state_change(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_io_event_hook_state_change(void * jarg1) { + switch_io_event_hook_state_change *arg1 = (switch_io_event_hook_state_change *) 0 ; + + arg1 = (switch_io_event_hook_state_change *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_resurrect_session_resurrect_session_set(void * jarg1, void * jarg2) { + switch_io_event_hook_resurrect_session *arg1 = (switch_io_event_hook_resurrect_session *) 0 ; + switch_resurrect_session_hook_t arg2 = (switch_resurrect_session_hook_t) 0 ; + + arg1 = (switch_io_event_hook_resurrect_session *)jarg1; + arg2 = (switch_resurrect_session_hook_t)jarg2; + if (arg1) (arg1)->resurrect_session = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_resurrect_session_resurrect_session_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_resurrect_session *arg1 = (switch_io_event_hook_resurrect_session *) 0 ; + switch_resurrect_session_hook_t result; + + arg1 = (switch_io_event_hook_resurrect_session *)jarg1; + result = (switch_resurrect_session_hook_t) ((arg1)->resurrect_session); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hook_resurrect_session_next_set(void * jarg1, void * jarg2) { + switch_io_event_hook_resurrect_session *arg1 = (switch_io_event_hook_resurrect_session *) 0 ; + switch_io_event_hook_resurrect_session *arg2 = (switch_io_event_hook_resurrect_session *) 0 ; + + arg1 = (switch_io_event_hook_resurrect_session *)jarg1; + arg2 = (switch_io_event_hook_resurrect_session *)jarg2; + if (arg1) (arg1)->next = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hook_resurrect_session_next_get(void * jarg1) { + void * jresult ; + switch_io_event_hook_resurrect_session *arg1 = (switch_io_event_hook_resurrect_session *) 0 ; + switch_io_event_hook_resurrect_session *result = 0 ; + + arg1 = (switch_io_event_hook_resurrect_session *)jarg1; + result = (switch_io_event_hook_resurrect_session *) ((arg1)->next); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_io_event_hook_resurrect_session() { + void * jresult ; + switch_io_event_hook_resurrect_session *result = 0 ; + + result = (switch_io_event_hook_resurrect_session *)new switch_io_event_hook_resurrect_session(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_io_event_hook_resurrect_session(void * jarg1) { + switch_io_event_hook_resurrect_session *arg1 = (switch_io_event_hook_resurrect_session *) 0 ; + + arg1 = (switch_io_event_hook_resurrect_session *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hooks_outgoing_channel_set(void * jarg1, void * jarg2) { + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_outgoing_channel_t *arg2 = (switch_io_event_hook_outgoing_channel_t *) 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + arg2 = (switch_io_event_hook_outgoing_channel_t *)jarg2; + if (arg1) (arg1)->outgoing_channel = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hooks_outgoing_channel_get(void * jarg1) { + void * jresult ; + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_outgoing_channel_t *result = 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + result = (switch_io_event_hook_outgoing_channel_t *) ((arg1)->outgoing_channel); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hooks_receive_message_set(void * jarg1, void * jarg2) { + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_receive_message_t *arg2 = (switch_io_event_hook_receive_message_t *) 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + arg2 = (switch_io_event_hook_receive_message_t *)jarg2; + if (arg1) (arg1)->receive_message = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hooks_receive_message_get(void * jarg1) { + void * jresult ; + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_receive_message_t *result = 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + result = (switch_io_event_hook_receive_message_t *) ((arg1)->receive_message); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hooks_receive_event_set(void * jarg1, void * jarg2) { + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_receive_event_t *arg2 = (switch_io_event_hook_receive_event_t *) 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + arg2 = (switch_io_event_hook_receive_event_t *)jarg2; + if (arg1) (arg1)->receive_event = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hooks_receive_event_get(void * jarg1) { + void * jresult ; + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_receive_event_t *result = 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + result = (switch_io_event_hook_receive_event_t *) ((arg1)->receive_event); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hooks_read_frame_set(void * jarg1, void * jarg2) { + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_read_frame_t *arg2 = (switch_io_event_hook_read_frame_t *) 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + arg2 = (switch_io_event_hook_read_frame_t *)jarg2; + if (arg1) (arg1)->read_frame = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hooks_read_frame_get(void * jarg1) { + void * jresult ; + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_read_frame_t *result = 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + result = (switch_io_event_hook_read_frame_t *) ((arg1)->read_frame); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hooks_video_read_frame_set(void * jarg1, void * jarg2) { + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_video_read_frame_t *arg2 = (switch_io_event_hook_video_read_frame_t *) 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + arg2 = (switch_io_event_hook_video_read_frame_t *)jarg2; + if (arg1) (arg1)->video_read_frame = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hooks_video_read_frame_get(void * jarg1) { + void * jresult ; + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_video_read_frame_t *result = 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + result = (switch_io_event_hook_video_read_frame_t *) ((arg1)->video_read_frame); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hooks_write_frame_set(void * jarg1, void * jarg2) { + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_write_frame_t *arg2 = (switch_io_event_hook_write_frame_t *) 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + arg2 = (switch_io_event_hook_write_frame_t *)jarg2; + if (arg1) (arg1)->write_frame = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hooks_write_frame_get(void * jarg1) { + void * jresult ; + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_write_frame_t *result = 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + result = (switch_io_event_hook_write_frame_t *) ((arg1)->write_frame); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hooks_video_write_frame_set(void * jarg1, void * jarg2) { + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_video_write_frame_t *arg2 = (switch_io_event_hook_video_write_frame_t *) 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + arg2 = (switch_io_event_hook_video_write_frame_t *)jarg2; + if (arg1) (arg1)->video_write_frame = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hooks_video_write_frame_get(void * jarg1) { + void * jresult ; + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_video_write_frame_t *result = 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + result = (switch_io_event_hook_video_write_frame_t *) ((arg1)->video_write_frame); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hooks_kill_channel_set(void * jarg1, void * jarg2) { + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_kill_channel_t *arg2 = (switch_io_event_hook_kill_channel_t *) 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + arg2 = (switch_io_event_hook_kill_channel_t *)jarg2; + if (arg1) (arg1)->kill_channel = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hooks_kill_channel_get(void * jarg1) { + void * jresult ; + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_kill_channel_t *result = 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + result = (switch_io_event_hook_kill_channel_t *) ((arg1)->kill_channel); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hooks_send_dtmf_set(void * jarg1, void * jarg2) { + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_send_dtmf_t *arg2 = (switch_io_event_hook_send_dtmf_t *) 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + arg2 = (switch_io_event_hook_send_dtmf_t *)jarg2; + if (arg1) (arg1)->send_dtmf = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hooks_send_dtmf_get(void * jarg1) { + void * jresult ; + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_send_dtmf_t *result = 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + result = (switch_io_event_hook_send_dtmf_t *) ((arg1)->send_dtmf); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hooks_recv_dtmf_set(void * jarg1, void * jarg2) { + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_recv_dtmf_t *arg2 = (switch_io_event_hook_recv_dtmf_t *) 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + arg2 = (switch_io_event_hook_recv_dtmf_t *)jarg2; + if (arg1) (arg1)->recv_dtmf = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hooks_recv_dtmf_get(void * jarg1) { + void * jresult ; + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_recv_dtmf_t *result = 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + result = (switch_io_event_hook_recv_dtmf_t *) ((arg1)->recv_dtmf); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hooks_state_change_set(void * jarg1, void * jarg2) { + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_state_change_t *arg2 = (switch_io_event_hook_state_change_t *) 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + arg2 = (switch_io_event_hook_state_change_t *)jarg2; + if (arg1) (arg1)->state_change = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hooks_state_change_get(void * jarg1) { + void * jresult ; + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_state_change_t *result = 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + result = (switch_io_event_hook_state_change_t *) ((arg1)->state_change); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_io_event_hooks_resurrect_session_set(void * jarg1, void * jarg2) { + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_resurrect_session_t *arg2 = (switch_io_event_hook_resurrect_session_t *) 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + arg2 = (switch_io_event_hook_resurrect_session_t *)jarg2; + if (arg1) (arg1)->resurrect_session = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_io_event_hooks_resurrect_session_get(void * jarg1) { + void * jresult ; + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + switch_io_event_hook_resurrect_session_t *result = 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + result = (switch_io_event_hook_resurrect_session_t *) ((arg1)->resurrect_session); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_io_event_hooks() { + void * jresult ; + switch_io_event_hooks *result = 0 ; + + result = (switch_io_event_hooks *)new switch_io_event_hooks(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_io_event_hooks(void * jarg1) { + switch_io_event_hooks *arg1 = (switch_io_event_hooks *) 0 ; + + arg1 = (switch_io_event_hooks *)jarg1; + delete arg1; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_add_outgoing_channel(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_outgoing_channel_hook_t arg2 = (switch_outgoing_channel_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_outgoing_channel_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_add_outgoing_channel(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_add_receive_message(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_receive_message_hook_t arg2 = (switch_receive_message_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_receive_message_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_add_receive_message(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_add_receive_event(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_receive_event_hook_t arg2 = (switch_receive_event_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_receive_event_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_add_receive_event(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_add_state_change(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_state_change_hook_t arg2 = (switch_state_change_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_state_change_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_add_state_change(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_add_read_frame(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_read_frame_hook_t arg2 = (switch_read_frame_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_read_frame_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_add_read_frame(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_add_write_frame(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_write_frame_hook_t arg2 = (switch_write_frame_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_write_frame_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_add_write_frame(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_add_video_read_frame(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_video_read_frame_hook_t arg2 = (switch_video_read_frame_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_video_read_frame_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_add_video_read_frame(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_add_video_write_frame(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_video_write_frame_hook_t arg2 = (switch_video_write_frame_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_video_write_frame_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_add_video_write_frame(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_add_kill_channel(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_kill_channel_hook_t arg2 = (switch_kill_channel_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_kill_channel_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_add_kill_channel(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_add_send_dtmf(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_send_dtmf_hook_t arg2 = (switch_send_dtmf_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_send_dtmf_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_add_send_dtmf(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_add_recv_dtmf(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_recv_dtmf_hook_t arg2 = (switch_recv_dtmf_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_recv_dtmf_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_add_recv_dtmf(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_add_resurrect_session(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_resurrect_session_hook_t arg2 = (switch_resurrect_session_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_resurrect_session_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_add_resurrect_session(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_remove_outgoing_channel(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_outgoing_channel_hook_t arg2 = (switch_outgoing_channel_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_outgoing_channel_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_remove_outgoing_channel(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_remove_receive_message(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_receive_message_hook_t arg2 = (switch_receive_message_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_receive_message_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_remove_receive_message(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_remove_receive_event(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_receive_event_hook_t arg2 = (switch_receive_event_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_receive_event_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_remove_receive_event(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_remove_state_change(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_state_change_hook_t arg2 = (switch_state_change_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_state_change_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_remove_state_change(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_remove_read_frame(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_read_frame_hook_t arg2 = (switch_read_frame_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_read_frame_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_remove_read_frame(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_remove_write_frame(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_write_frame_hook_t arg2 = (switch_write_frame_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_write_frame_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_remove_write_frame(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_remove_video_read_frame(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_video_read_frame_hook_t arg2 = (switch_video_read_frame_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_video_read_frame_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_remove_video_read_frame(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_remove_video_write_frame(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_video_write_frame_hook_t arg2 = (switch_video_write_frame_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_video_write_frame_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_remove_video_write_frame(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_remove_kill_channel(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_kill_channel_hook_t arg2 = (switch_kill_channel_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_kill_channel_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_remove_kill_channel(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_remove_send_dtmf(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_send_dtmf_hook_t arg2 = (switch_send_dtmf_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_send_dtmf_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_remove_send_dtmf(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_remove_recv_dtmf(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_recv_dtmf_hook_t arg2 = (switch_recv_dtmf_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_recv_dtmf_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_remove_recv_dtmf(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_event_hook_remove_resurrect_session(void * jarg1, void * jarg2) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_resurrect_session_hook_t arg2 = (switch_resurrect_session_hook_t) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (switch_resurrect_session_hook_t)jarg2; + result = (switch_status_t)switch_core_event_hook_remove_resurrect_session(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_scheduler_task_created_set(void * jarg1, long long jarg2) { + switch_scheduler_task *arg1 = (switch_scheduler_task *) 0 ; + int64_t arg2 ; + + arg1 = (switch_scheduler_task *)jarg1; + arg2 = (int64_t)jarg2; + if (arg1) (arg1)->created = arg2; +} + + +SWIGEXPORT long long SWIGSTDCALL CSharp_switch_scheduler_task_created_get(void * jarg1) { + long long jresult ; + switch_scheduler_task *arg1 = (switch_scheduler_task *) 0 ; + int64_t result; + + arg1 = (switch_scheduler_task *)jarg1; + result = (int64_t) ((arg1)->created); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_scheduler_task_runtime_set(void * jarg1, long long jarg2) { + switch_scheduler_task *arg1 = (switch_scheduler_task *) 0 ; + int64_t arg2 ; + + arg1 = (switch_scheduler_task *)jarg1; + arg2 = (int64_t)jarg2; + if (arg1) (arg1)->runtime = arg2; +} + + +SWIGEXPORT long long SWIGSTDCALL CSharp_switch_scheduler_task_runtime_get(void * jarg1) { + long long jresult ; + switch_scheduler_task *arg1 = (switch_scheduler_task *) 0 ; + int64_t result; + + arg1 = (switch_scheduler_task *)jarg1; + result = (int64_t) ((arg1)->runtime); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_scheduler_task_cmd_id_set(void * jarg1, unsigned long jarg2) { + switch_scheduler_task *arg1 = (switch_scheduler_task *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_scheduler_task *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->cmd_id = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_scheduler_task_cmd_id_get(void * jarg1) { + unsigned long jresult ; + switch_scheduler_task *arg1 = (switch_scheduler_task *) 0 ; + uint32_t result; + + arg1 = (switch_scheduler_task *)jarg1; + result = (uint32_t) ((arg1)->cmd_id); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_scheduler_task_group_set(void * jarg1, char * jarg2) { + switch_scheduler_task *arg1 = (switch_scheduler_task *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (switch_scheduler_task *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->group) delete [] arg1->group; + if (arg2) { + arg1->group = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->group, (const char *)arg2); + } else { + arg1->group = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_scheduler_task_group_get(void * jarg1) { + char * jresult ; + switch_scheduler_task *arg1 = (switch_scheduler_task *) 0 ; + char *result = 0 ; + + arg1 = (switch_scheduler_task *)jarg1; + result = (char *) ((arg1)->group); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_scheduler_task_cmd_arg_set(void * jarg1, void * jarg2) { + switch_scheduler_task *arg1 = (switch_scheduler_task *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (switch_scheduler_task *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->cmd_arg = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_scheduler_task_cmd_arg_get(void * jarg1) { + void * jresult ; + switch_scheduler_task *arg1 = (switch_scheduler_task *) 0 ; + void *result = 0 ; + + arg1 = (switch_scheduler_task *)jarg1; + result = (void *) ((arg1)->cmd_arg); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_scheduler_task_task_id_set(void * jarg1, unsigned long jarg2) { + switch_scheduler_task *arg1 = (switch_scheduler_task *) 0 ; + uint32_t arg2 ; + + arg1 = (switch_scheduler_task *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->task_id = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_scheduler_task_task_id_get(void * jarg1) { + unsigned long jresult ; + switch_scheduler_task *arg1 = (switch_scheduler_task *) 0 ; + uint32_t result; + + arg1 = (switch_scheduler_task *)jarg1; + result = (uint32_t) ((arg1)->task_id); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_scheduler_task() { + void * jresult ; + switch_scheduler_task *result = 0 ; + + result = (switch_scheduler_task *)new switch_scheduler_task(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_scheduler_task(void * jarg1) { + switch_scheduler_task *arg1 = (switch_scheduler_task *) 0 ; + + arg1 = (switch_scheduler_task *)jarg1; + delete arg1; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_scheduler_add_task(void * jarg1, void * jarg2, char * jarg3, char * jarg4, unsigned long jarg5, void * jarg6, unsigned long jarg7) { + unsigned long jresult ; + time_t arg1 ; + switch_scheduler_func_t arg2 = (switch_scheduler_func_t) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + uint32_t arg5 ; + void *arg6 = (void *) 0 ; + switch_scheduler_flag_t arg7 ; + time_t *argp1 ; + uint32_t result; + + argp1 = (time_t *)jarg1; + if (!argp1) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null time_t", 0); + return 0; + } + arg1 = *argp1; + arg2 = (switch_scheduler_func_t)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (uint32_t)jarg5; + arg6 = (void *)jarg6; + arg7 = (switch_scheduler_flag_t)jarg7; + result = (uint32_t)switch_scheduler_add_task(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5,arg6,arg7); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_scheduler_del_task_id(unsigned long jarg1) { + unsigned long jresult ; + uint32_t arg1 ; + uint32_t result; + + arg1 = (uint32_t)jarg1; + result = (uint32_t)switch_scheduler_del_task_id(arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_scheduler_del_task_group(char * jarg1) { + unsigned long jresult ; + char *arg1 = (char *) 0 ; + uint32_t result; + + arg1 = (char *)jarg1; + result = (uint32_t)switch_scheduler_del_task_group((char const *)arg1); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_scheduler_task_thread_start() { + switch_scheduler_task_thread_start(); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_scheduler_task_thread_stop() { + switch_scheduler_task_thread_stop(); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_config_file_set(void * jarg1, void * jarg2) { + switch_config *arg1 = (switch_config *) 0 ; + FILE *arg2 = (FILE *) 0 ; + + arg1 = (switch_config *)jarg1; + arg2 = (FILE *)jarg2; + if (arg1) (arg1)->file = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_config_file_get(void * jarg1) { + void * jresult ; + switch_config *arg1 = (switch_config *) 0 ; + FILE *result = 0 ; + + arg1 = (switch_config *)jarg1; + result = (FILE *) ((arg1)->file); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_config_path_set(void * jarg1, char * jarg2) { + switch_config *arg1 = (switch_config *) 0 ; + char *arg2 ; + + arg1 = (switch_config *)jarg1; + arg2 = (char *)jarg2; + { + if(arg2) { + strncpy((char*)arg1->path, (const char *)arg2, 512-1); + arg1->path[512-1] = 0; + } else { + arg1->path[0] = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_config_path_get(void * jarg1) { + char * jresult ; + switch_config *arg1 = (switch_config *) 0 ; + char *result = 0 ; + + arg1 = (switch_config *)jarg1; + result = (char *)(char *) ((arg1)->path); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_config_category_set(void * jarg1, char * jarg2) { + switch_config *arg1 = (switch_config *) 0 ; + char *arg2 ; + + arg1 = (switch_config *)jarg1; + arg2 = (char *)jarg2; + { + if(arg2) { + strncpy((char*)arg1->category, (const char *)arg2, 256-1); + arg1->category[256-1] = 0; + } else { + arg1->category[0] = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_config_category_get(void * jarg1) { + char * jresult ; + switch_config *arg1 = (switch_config *) 0 ; + char *result = 0 ; + + arg1 = (switch_config *)jarg1; + result = (char *)(char *) ((arg1)->category); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_config_section_set(void * jarg1, char * jarg2) { + switch_config *arg1 = (switch_config *) 0 ; + char *arg2 ; + + arg1 = (switch_config *)jarg1; + arg2 = (char *)jarg2; + { + if(arg2) { + strncpy((char*)arg1->section, (const char *)arg2, 256-1); + arg1->section[256-1] = 0; + } else { + arg1->section[0] = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_config_section_get(void * jarg1) { + char * jresult ; + switch_config *arg1 = (switch_config *) 0 ; + char *result = 0 ; + + arg1 = (switch_config *)jarg1; + result = (char *)(char *) ((arg1)->section); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_config_buf_set(void * jarg1, char * jarg2) { + switch_config *arg1 = (switch_config *) 0 ; + char *arg2 ; + + arg1 = (switch_config *)jarg1; + arg2 = (char *)jarg2; + { + if(arg2) { + strncpy((char*)arg1->buf, (const char *)arg2, 1024-1); + arg1->buf[1024-1] = 0; + } else { + arg1->buf[0] = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_switch_config_buf_get(void * jarg1) { + char * jresult ; + switch_config *arg1 = (switch_config *) 0 ; + char *result = 0 ; + + arg1 = (switch_config *)jarg1; + result = (char *)(char *) ((arg1)->buf); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_config_lineno_set(void * jarg1, int jarg2) { + switch_config *arg1 = (switch_config *) 0 ; + int arg2 ; + + arg1 = (switch_config *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->lineno = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_config_lineno_get(void * jarg1) { + int jresult ; + switch_config *arg1 = (switch_config *) 0 ; + int result; + + arg1 = (switch_config *)jarg1; + result = (int) ((arg1)->lineno); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_config_catno_set(void * jarg1, int jarg2) { + switch_config *arg1 = (switch_config *) 0 ; + int arg2 ; + + arg1 = (switch_config *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->catno = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_config_catno_get(void * jarg1) { + int jresult ; + switch_config *arg1 = (switch_config *) 0 ; + int result; + + arg1 = (switch_config *)jarg1; + result = (int) ((arg1)->catno); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_config_sectno_set(void * jarg1, int jarg2) { + switch_config *arg1 = (switch_config *) 0 ; + int arg2 ; + + arg1 = (switch_config *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->sectno = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_config_sectno_get(void * jarg1) { + int jresult ; + switch_config *arg1 = (switch_config *) 0 ; + int result; + + arg1 = (switch_config *)jarg1; + result = (int) ((arg1)->sectno); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_config_lockto_set(void * jarg1, int jarg2) { + switch_config *arg1 = (switch_config *) 0 ; + int arg2 ; + + arg1 = (switch_config *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->lockto = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_config_lockto_get(void * jarg1) { + int jresult ; + switch_config *arg1 = (switch_config *) 0 ; + int result; + + arg1 = (switch_config *)jarg1; + result = (int) ((arg1)->lockto); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_switch_config() { + void * jresult ; + switch_config *result = 0 ; + + result = (switch_config *)new switch_config(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_switch_config(void * jarg1) { + switch_config *arg1 = (switch_config *) 0 ; + + arg1 = (switch_config *)jarg1; + delete arg1; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_config_open_file(void * jarg1, char * jarg2) { + int jresult ; + switch_config_t *arg1 = (switch_config_t *) 0 ; + char *arg2 = (char *) 0 ; + int result; + + arg1 = (switch_config_t *)jarg1; + arg2 = (char *)jarg2; + result = (int)switch_config_open_file(arg1,arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_switch_config_close_file(void * jarg1) { + switch_config_t *arg1 = (switch_config_t *) 0 ; + + arg1 = (switch_config_t *)jarg1; + switch_config_close_file(arg1); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_switch_config_next_pair(void * jarg1, void * jarg2, void * jarg3) { + int jresult ; + switch_config_t *arg1 = (switch_config_t *) 0 ; + char **arg2 = (char **) 0 ; + char **arg3 = (char **) 0 ; + int result; + + arg1 = (switch_config_t *)jarg1; + arg2 = (char **)jarg2; + arg3 = (char **)jarg3; + result = (int)switch_config_next_pair(arg1,arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_consoleLog(char * jarg1, char * jarg2) { + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + consoleLog(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_consoleCleanLog(char * jarg1) { + char *arg1 = (char *) 0 ; + + arg1 = (char *)jarg1; + consoleCleanLog(arg1); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_IvrMenu(void * jarg1, char * jarg2, char * jarg3, char * jarg4, char * jarg5, char * jarg6, char * jarg7, char * jarg8, char * jarg9, char * jarg10, int jarg11, int jarg12, int jarg13, int jarg14, int jarg15, int jarg16) { + void * jresult ; + IVRMenu *arg1 = (IVRMenu *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + char *arg6 = (char *) 0 ; + char *arg7 = (char *) 0 ; + char *arg8 = (char *) 0 ; + char *arg9 = (char *) 0 ; + char *arg10 = (char *) 0 ; + int arg11 ; + int arg12 ; + int arg13 ; + int arg14 ; + int arg15 ; + int arg16 ; + IVRMenu *result = 0 ; + + arg1 = (IVRMenu *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + arg6 = (char *)jarg6; + arg7 = (char *)jarg7; + arg8 = (char *)jarg8; + arg9 = (char *)jarg9; + arg10 = (char *)jarg10; + arg11 = (int)jarg11; + arg12 = (int)jarg12; + arg13 = (int)jarg13; + arg14 = (int)jarg14; + arg15 = (int)jarg15; + arg16 = (int)jarg16; + result = (IVRMenu *)new IVRMenu(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,(char const *)arg9,(char const *)arg10,arg11,arg12,arg13,arg14,arg15,arg16); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_IvrMenu(void * jarg1) { + IVRMenu *arg1 = (IVRMenu *) 0 ; + + arg1 = (IVRMenu *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_IvrMenu_bindAction(void * jarg1, char * jarg2, char * jarg3, char * jarg4) { + IVRMenu *arg1 = (IVRMenu *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + + arg1 = (IVRMenu *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + (arg1)->bindAction(arg2,(char const *)arg3,(char const *)arg4); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_IvrMenu_Execute(void * jarg1, void * jarg2, char * jarg3) { + IVRMenu *arg1 = (IVRMenu *) 0 ; + CoreSession *arg2 = (CoreSession *) 0 ; + char *arg3 = (char *) 0 ; + + arg1 = (IVRMenu *)jarg1; + arg2 = (CoreSession *)jarg2; + arg3 = (char *)jarg3; + (arg1)->execute(arg2,(char const *)arg3); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_Api() { + void * jresult ; + API *result = 0 ; + + result = (API *)new API(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_Api(void * jarg1) { + API *arg1 = (API *) 0 ; + + arg1 = (API *)jarg1; + delete arg1; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_Api_Execute(void * jarg1, char * jarg2, char * jarg3) { + char * jresult ; + API *arg1 = (API *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) NULL ; + char *result = 0 ; + + arg1 = (API *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (char *)(arg1)->execute((char const *)arg2,(char const *)arg3); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_Api_ExecuteString(void * jarg1, char * jarg2) { + char * jresult ; + API *arg1 = (API *) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + arg1 = (API *)jarg1; + arg2 = (char *)jarg2; + result = (char *)(arg1)->executeString((char const *)arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_Api_getTime(void * jarg1) { + char * jresult ; + API *arg1 = (API *) 0 ; + char *result = 0 ; + + arg1 = (API *)jarg1; + result = (char *)(arg1)->getTime(); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_input_callback_state_t_function_set(void * jarg1, void * jarg2) { + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (input_callback_state_t *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->function = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_input_callback_state_t_function_get(void * jarg1) { + void * jresult ; + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + void *result = 0 ; + + arg1 = (input_callback_state_t *)jarg1; + result = (void *) ((arg1)->function); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_input_callback_state_t_threadState_set(void * jarg1, void * jarg2) { + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (input_callback_state_t *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->threadState = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_input_callback_state_t_threadState_get(void * jarg1) { + void * jresult ; + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + void *result = 0 ; + + arg1 = (input_callback_state_t *)jarg1; + result = (void *) ((arg1)->threadState); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_input_callback_state_t_extra_set(void * jarg1, void * jarg2) { + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (input_callback_state_t *)jarg1; + arg2 = (void *)jarg2; + if (arg1) (arg1)->extra = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_input_callback_state_t_extra_get(void * jarg1) { + void * jresult ; + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + void *result = 0 ; + + arg1 = (input_callback_state_t *)jarg1; + result = (void *) ((arg1)->extra); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_input_callback_state_t_funcargs_set(void * jarg1, char * jarg2) { + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (input_callback_state_t *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->funcargs) delete [] arg1->funcargs; + if (arg2) { + arg1->funcargs = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->funcargs, (const char *)arg2); + } else { + arg1->funcargs = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_input_callback_state_t_funcargs_get(void * jarg1) { + char * jresult ; + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + char *result = 0 ; + + arg1 = (input_callback_state_t *)jarg1; + result = (char *) ((arg1)->funcargs); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_input_callback_state_t() { + void * jresult ; + input_callback_state_t *result = 0 ; + + result = (input_callback_state_t *)new input_callback_state_t(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_input_callback_state_t(void * jarg1) { + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + + arg1 = (input_callback_state_t *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_DTMF_digit_set(void * jarg1, char jarg2) { + DTMF *arg1 = (DTMF *) 0 ; + char arg2 ; + + arg1 = (DTMF *)jarg1; + arg2 = (char)jarg2; + if (arg1) (arg1)->digit = arg2; +} + + +SWIGEXPORT char SWIGSTDCALL CSharp_DTMF_digit_get(void * jarg1) { + char jresult ; + DTMF *arg1 = (DTMF *) 0 ; + char result; + + arg1 = (DTMF *)jarg1; + result = (char) ((arg1)->digit); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_DTMF_duration_set(void * jarg1, unsigned long jarg2) { + DTMF *arg1 = (DTMF *) 0 ; + uint32_t arg2 ; + + arg1 = (DTMF *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->duration = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_DTMF_duration_get(void * jarg1) { + unsigned long jresult ; + DTMF *arg1 = (DTMF *) 0 ; + uint32_t result; + + arg1 = (DTMF *)jarg1; + result = (uint32_t) ((arg1)->duration); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_DTMF(char jarg1, unsigned long jarg2) { + void * jresult ; + char arg1 ; + uint32_t arg2 = (uint32_t) 2000 ; + DTMF *result = 0 ; + + arg1 = (char)jarg1; + arg2 = (uint32_t)jarg2; + result = (DTMF *)new DTMF(arg1,arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_DTMF(void * jarg1) { + DTMF *arg1 = (DTMF *) 0 ; + + arg1 = (DTMF *)jarg1; + delete arg1; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_Stream__SWIG_0() { + void * jresult ; + Stream *result = 0 ; + + result = (Stream *)new Stream(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_Stream__SWIG_1(void * jarg1) { + void * jresult ; + switch_stream_handle_t *arg1 = (switch_stream_handle_t *) 0 ; + Stream *result = 0 ; + + arg1 = (switch_stream_handle_t *)jarg1; + result = (Stream *)new Stream(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_Stream(void * jarg1) { + Stream *arg1 = (Stream *) 0 ; + + arg1 = (Stream *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_Stream_Write(void * jarg1, char * jarg2) { + Stream *arg1 = (Stream *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (Stream *)jarg1; + arg2 = (char *)jarg2; + (arg1)->write((char const *)arg2); +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_Stream_get_data(void * jarg1) { + char * jresult ; + Stream *arg1 = (Stream *) 0 ; + char *result = 0 ; + + arg1 = (Stream *)jarg1; + result = (char *)(arg1)->get_data(); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_Event_InternalEvent_set(void * jarg1, void * jarg2) { + Event *arg1 = (Event *) 0 ; + switch_event_t *arg2 = (switch_event_t *) 0 ; + + arg1 = (Event *)jarg1; + arg2 = (switch_event_t *)jarg2; + if (arg1) (arg1)->event = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_Event_InternalEvent_get(void * jarg1) { + void * jresult ; + Event *arg1 = (Event *) 0 ; + switch_event_t *result = 0 ; + + arg1 = (Event *)jarg1; + result = (switch_event_t *) ((arg1)->event); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_Event_serialized_string_set(void * jarg1, char * jarg2) { + Event *arg1 = (Event *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (Event *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->serialized_string) delete [] arg1->serialized_string; + if (arg2) { + arg1->serialized_string = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->serialized_string, (const char *)arg2); + } else { + arg1->serialized_string = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_Event_serialized_string_get(void * jarg1) { + char * jresult ; + Event *arg1 = (Event *) 0 ; + char *result = 0 ; + + arg1 = (Event *)jarg1; + result = (char *) ((arg1)->serialized_string); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_Event_mine_set(void * jarg1, int jarg2) { + Event *arg1 = (Event *) 0 ; + int arg2 ; + + arg1 = (Event *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->mine = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_Event_mine_get(void * jarg1) { + int jresult ; + Event *arg1 = (Event *) 0 ; + int result; + + arg1 = (Event *)jarg1; + result = (int) ((arg1)->mine); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_Event__SWIG_0(char * jarg1, char * jarg2) { + void * jresult ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) NULL ; + Event *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + result = (Event *)new Event((char const *)arg1,(char const *)arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_Event__SWIG_1(void * jarg1, int jarg2) { + void * jresult ; + switch_event_t *arg1 = (switch_event_t *) 0 ; + int arg2 = (int) 0 ; + Event *result = 0 ; + + arg1 = (switch_event_t *)jarg1; + arg2 = (int)jarg2; + result = (Event *)new Event(arg1,arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_Event(void * jarg1) { + Event *arg1 = (Event *) 0 ; + + arg1 = (Event *)jarg1; + delete arg1; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_Event_Serialize(void * jarg1, char * jarg2) { + char * jresult ; + Event *arg1 = (Event *) 0 ; + char *arg2 = (char *) NULL ; + char *result = 0 ; + + arg1 = (Event *)jarg1; + arg2 = (char *)jarg2; + result = (char *)(arg1)->serialize((char const *)arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Event_SetPriority(void * jarg1, int jarg2) { + unsigned int jresult ; + Event *arg1 = (Event *) 0 ; + switch_priority_t arg2 = (switch_priority_t) SWITCH_PRIORITY_NORMAL ; + bool result; + + arg1 = (Event *)jarg1; + arg2 = (switch_priority_t)jarg2; + result = (bool)(arg1)->setPriority(arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_Event_GetHeader(void * jarg1, char * jarg2) { + char * jresult ; + Event *arg1 = (Event *) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + arg1 = (Event *)jarg1; + arg2 = (char *)jarg2; + result = (char *)(arg1)->getHeader((char const *)arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_Event_GetBody(void * jarg1) { + char * jresult ; + Event *arg1 = (Event *) 0 ; + char *result = 0 ; + + arg1 = (Event *)jarg1; + result = (char *)(arg1)->getBody(); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_Event_GetEventType(void * jarg1) { + char * jresult ; + Event *arg1 = (Event *) 0 ; + char *result = 0 ; + + arg1 = (Event *)jarg1; + result = (char *)(arg1)->getType(); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Event_AddBody(void * jarg1, char * jarg2) { + unsigned int jresult ; + Event *arg1 = (Event *) 0 ; + char *arg2 = (char *) 0 ; + bool result; + + arg1 = (Event *)jarg1; + arg2 = (char *)jarg2; + result = (bool)(arg1)->addBody((char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Event_AddHeader(void * jarg1, char * jarg2, char * jarg3) { + unsigned int jresult ; + Event *arg1 = (Event *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + + arg1 = (Event *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (bool)(arg1)->addHeader((char const *)arg2,(char const *)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Event_DeleteHeader(void * jarg1, char * jarg2) { + unsigned int jresult ; + Event *arg1 = (Event *) 0 ; + char *arg2 = (char *) 0 ; + bool result; + + arg1 = (Event *)jarg1; + arg2 = (char *)jarg2; + result = (bool)(arg1)->delHeader((char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Event_Fire(void * jarg1) { + unsigned int jresult ; + Event *arg1 = (Event *) 0 ; + bool result; + + arg1 = (Event *)jarg1; + result = (bool)(arg1)->fire(); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_EventConsumer_events_set(void * jarg1, void * jarg2) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_queue_t *arg2 = (switch_queue_t *) 0 ; + + arg1 = (EventConsumer *)jarg1; + arg2 = (switch_queue_t *)jarg2; + if (arg1) (arg1)->events = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_EventConsumer_events_get(void * jarg1) { + void * jresult ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_queue_t *result = 0 ; + + arg1 = (EventConsumer *)jarg1; + result = (switch_queue_t *) ((arg1)->events); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_EventConsumer_e_event_id_set(void * jarg1, int jarg2) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_event_types_t arg2 ; + + arg1 = (EventConsumer *)jarg1; + arg2 = (switch_event_types_t)jarg2; + if (arg1) (arg1)->e_event_id = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_EventConsumer_e_event_id_get(void * jarg1) { + int jresult ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_event_types_t result; + + arg1 = (EventConsumer *)jarg1; + result = (switch_event_types_t) ((arg1)->e_event_id); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_EventConsumer_e_callback_set(void * jarg1, char * jarg2) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (EventConsumer *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->e_callback) delete [] arg1->e_callback; + if (arg2) { + arg1->e_callback = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->e_callback, (const char *)arg2); + } else { + arg1->e_callback = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_EventConsumer_e_callback_get(void * jarg1) { + char * jresult ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *result = 0 ; + + arg1 = (EventConsumer *)jarg1; + result = (char *) ((arg1)->e_callback); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_EventConsumer_e_subclass_name_set(void * jarg1, char * jarg2) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (EventConsumer *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->e_subclass_name) delete [] arg1->e_subclass_name; + if (arg2) { + arg1->e_subclass_name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->e_subclass_name, (const char *)arg2); + } else { + arg1->e_subclass_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_EventConsumer_e_subclass_name_get(void * jarg1) { + char * jresult ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *result = 0 ; + + arg1 = (EventConsumer *)jarg1; + result = (char *) ((arg1)->e_subclass_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_EventConsumer_e_cb_arg_set(void * jarg1, char * jarg2) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (EventConsumer *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->e_cb_arg) delete [] arg1->e_cb_arg; + if (arg2) { + arg1->e_cb_arg = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->e_cb_arg, (const char *)arg2); + } else { + arg1->e_cb_arg = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_EventConsumer_e_cb_arg_get(void * jarg1) { + char * jresult ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *result = 0 ; + + arg1 = (EventConsumer *)jarg1; + result = (char *) ((arg1)->e_cb_arg); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_EventConsumer_enodes_set(void * jarg1, void * jarg2) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_event_node_t **arg2 ; + + arg1 = (EventConsumer *)jarg1; + arg2 = (switch_event_node_t **)jarg2; + { + size_t ii; + switch_event_node_t * *b = (switch_event_node_t * *) arg1->enodes; + for (ii = 0; ii < (size_t)SWITCH_EVENT_ALL+1; ii++) b[ii] = *((switch_event_node_t * *) arg2 + ii); + } +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_EventConsumer_enodes_get(void * jarg1) { + void * jresult ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_event_node_t **result = 0 ; + + arg1 = (EventConsumer *)jarg1; + result = (switch_event_node_t **)(switch_event_node_t **) ((arg1)->enodes); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_EventConsumer_node_index_set(void * jarg1, unsigned long jarg2) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + uint32_t arg2 ; + + arg1 = (EventConsumer *)jarg1; + arg2 = (uint32_t)jarg2; + if (arg1) (arg1)->node_index = arg2; +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_EventConsumer_node_index_get(void * jarg1) { + unsigned long jresult ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + uint32_t result; + + arg1 = (EventConsumer *)jarg1; + result = (uint32_t) ((arg1)->node_index); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_EventConsumer(char * jarg1, char * jarg2) { + void * jresult ; + char *arg1 = (char *) NULL ; + char *arg2 = (char *) "" ; + EventConsumer *result = 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + result = (EventConsumer *)new EventConsumer((char const *)arg1,(char const *)arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_EventConsumer(void * jarg1) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + + arg1 = (EventConsumer *)jarg1; + delete arg1; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_EventConsumer_bind(void * jarg1, char * jarg2, char * jarg3) { + int jresult ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) "" ; + int result; + + arg1 = (EventConsumer *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (int)(arg1)->bind((char const *)arg2,(char const *)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_EventConsumer_pop(void * jarg1, int jarg2) { + void * jresult ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + int arg2 = (int) 0 ; + Event *result = 0 ; + + arg1 = (EventConsumer *)jarg1; + arg2 = (int)jarg2; + result = (Event *)(arg1)->pop(arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_CoreSession(void * jarg1) { + CoreSession *arg1 = (CoreSession *) 0 ; + + arg1 = (CoreSession *)jarg1; + delete arg1; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_InternalSession_set(void * jarg1, void * jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + switch_core_session_t *arg2 = (switch_core_session_t *) 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (switch_core_session_t *)jarg2; + if (arg1) (arg1)->session = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_CoreSession_InternalSession_get(void * jarg1) { + void * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + switch_core_session_t *result = 0 ; + + arg1 = (CoreSession *)jarg1; + result = (switch_core_session_t *) ((arg1)->session); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_channel_set(void * jarg1, void * jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + switch_channel_t *arg2 = (switch_channel_t *) 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (switch_channel_t *)jarg2; + if (arg1) (arg1)->channel = arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_CoreSession_channel_get(void * jarg1) { + void * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + switch_channel_t *result = 0 ; + + arg1 = (CoreSession *)jarg1; + result = (switch_channel_t *) ((arg1)->channel); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_flags_set(void * jarg1, unsigned int jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + unsigned int arg2 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (unsigned int)jarg2; + if (arg1) (arg1)->flags = arg2; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_CoreSession_flags_get(void * jarg1) { + unsigned int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + unsigned int result; + + arg1 = (CoreSession *)jarg1; + result = (unsigned int) ((arg1)->flags); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_allocated_set(void * jarg1, int jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->allocated = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_allocated_get(void * jarg1) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + int result; + + arg1 = (CoreSession *)jarg1; + result = (int) ((arg1)->allocated); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_cb_state_set(void * jarg1, void * jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + input_callback_state *arg2 = (input_callback_state *) 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (input_callback_state *)jarg2; + if (arg1) (arg1)->cb_state = *arg2; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_CoreSession_cb_state_get(void * jarg1) { + void * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + input_callback_state *result = 0 ; + + arg1 = (CoreSession *)jarg1; + result = (input_callback_state *)& ((arg1)->cb_state); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_HookState_set(void * jarg1, int jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + switch_channel_state_t arg2 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (switch_channel_state_t)jarg2; + if (arg1) (arg1)->hook_state = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_HookState_get(void * jarg1) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + switch_channel_state_t result; + + arg1 = (CoreSession *)jarg1; + result = (switch_channel_state_t) ((arg1)->hook_state); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_cause_set(void * jarg1, int jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + switch_call_cause_t arg2 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (switch_call_cause_t)jarg2; + if (arg1) (arg1)->cause = arg2; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_cause_get(void * jarg1) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + switch_call_cause_t result; + + arg1 = (CoreSession *)jarg1; + result = (switch_call_cause_t) ((arg1)->cause); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_uuid_set(void * jarg1, char * jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->uuid) delete [] arg1->uuid; + if (arg2) { + arg1->uuid = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->uuid, (const char *)arg2); + } else { + arg1->uuid = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_CoreSession_uuid_get(void * jarg1) { + char * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + arg1 = (CoreSession *)jarg1; + result = (char *) ((arg1)->uuid); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_tts_name_set(void * jarg1, char * jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->tts_name) delete [] arg1->tts_name; + if (arg2) { + arg1->tts_name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->tts_name, (const char *)arg2); + } else { + arg1->tts_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_CoreSession_tts_name_get(void * jarg1) { + char * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + arg1 = (CoreSession *)jarg1; + result = (char *) ((arg1)->tts_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_voice_name_set(void * jarg1, char * jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + { + if (arg1->voice_name) delete [] arg1->voice_name; + if (arg2) { + arg1->voice_name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->voice_name, (const char *)arg2); + } else { + arg1->voice_name = 0; + } + } +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_CoreSession_voice_name_get(void * jarg1) { + char * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + arg1 = (CoreSession *)jarg1; + result = (char *) ((arg1)->voice_name); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_Answer(void * jarg1) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + int result; + + arg1 = (CoreSession *)jarg1; + result = (int)(arg1)->answer(); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_preAnswer(void * jarg1) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + int result; + + arg1 = (CoreSession *)jarg1; + result = (int)(arg1)->preAnswer(); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_Hangup(void * jarg1, char * jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) "normal_clearing" ; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + (arg1)->hangup((char const *)arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_hangupState(void * jarg1) { + CoreSession *arg1 = (CoreSession *) 0 ; + + arg1 = (CoreSession *)jarg1; + (arg1)->hangupState(); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_SetVariable(void * jarg1, char * jarg2, char * jarg3) { + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + (arg1)->setVariable(arg2,arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_SetPrivate(void * jarg1, char * jarg2, void * jarg3) { + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + void *arg3 = (void *) 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + arg3 = (void *)jarg3; + (arg1)->setPrivate(arg2,arg3); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_CoreSession_GetPrivate(void * jarg1, char * jarg2) { + void * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + void *result = 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + result = (void *)(arg1)->getPrivate(arg2); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_CoreSession_GetVariable(void * jarg1, char * jarg2) { + char * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + result = (char *)(arg1)->getVariable(arg2); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_Say(void * jarg1, char * jarg2, char * jarg3, char * jarg4, char * jarg5, char * jarg6) { + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + char *arg6 = (char *) NULL ; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + arg5 = (char *)jarg5; + arg6 = (char *)jarg6; + (arg1)->say((char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_SayPhrase(void * jarg1, char * jarg2, char * jarg3, char * jarg4) { + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) "" ; + char *arg4 = (char *) NULL ; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + (arg1)->sayPhrase((char const *)arg2,(char const *)arg3,(char const *)arg4); +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_CoreSession_hangupCause(void * jarg1) { + char * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + arg1 = (CoreSession *)jarg1; + result = (char *)(arg1)->hangupCause(); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_CoreSession_getState(void * jarg1) { + char * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + arg1 = (CoreSession *)jarg1; + result = (char *)(arg1)->getState(); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_RecordFile(void * jarg1, char * jarg2, int jarg3, int jarg4, int jarg5) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 = (int) 0 ; + int arg4 = (int) 0 ; + int arg5 = (int) 0 ; + int result; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int)jarg3; + arg4 = (int)jarg4; + arg5 = (int)jarg5; + result = (int)(arg1)->recordFile(arg2,arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_originate(void * jarg1, void * jarg2, char * jarg3, int jarg4, void * jarg5) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + CoreSession *arg2 = (CoreSession *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 = (int) 60 ; + switch_state_handler_table_t *arg5 = (switch_state_handler_table_t *) NULL ; + int result; + + arg1 = (CoreSession *)jarg1; + arg2 = (CoreSession *)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + arg5 = (switch_state_handler_table_t *)jarg5; + result = (int)(arg1)->originate(arg2,arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_destroy(void * jarg1) { + CoreSession *arg1 = (CoreSession *) 0 ; + + arg1 = (CoreSession *)jarg1; + (arg1)->destroy(); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_Speak(void * jarg1, char * jarg2) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + int result; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + result = (int)(arg1)->speak(arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_SetTtsParameters(void * jarg1, char * jarg2, char * jarg3) { + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + (arg1)->set_tts_parms(arg2,arg3); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_CollectDigits__SWIG_0(void * jarg1, int jarg2) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int result; + + arg1 = (CoreSession *)jarg1; + arg2 = (int)jarg2; + result = (int)(arg1)->collectDigits(arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_CollectDigits__SWIG_1(void * jarg1, int jarg2, int jarg3) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int arg3 ; + int result; + + arg1 = (CoreSession *)jarg1; + arg2 = (int)jarg2; + arg3 = (int)jarg3; + result = (int)(arg1)->collectDigits(arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_CoreSession_GetDigits__SWIG_0(void * jarg1, int jarg2, char * jarg3, int jarg4) { + char * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + char *arg3 = (char *) 0 ; + int arg4 ; + char *result = 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (int)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + result = (char *)(arg1)->getDigits(arg2,arg3,arg4); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_CoreSession_GetDigits__SWIG_1(void * jarg1, int jarg2, char * jarg3, int jarg4, int jarg5) { + char * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + char *arg3 = (char *) 0 ; + int arg4 ; + int arg5 ; + char *result = 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (int)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + arg5 = (int)jarg5; + result = (char *)(arg1)->getDigits(arg2,arg3,arg4,arg5); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_Transfer(void * jarg1, char * jarg2, char * jarg3, char * jarg4) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) NULL ; + char *arg4 = (char *) NULL ; + int result; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + arg4 = (char *)jarg4; + result = (int)(arg1)->transfer(arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_CoreSession_read(void * jarg1, int jarg2, int jarg3, char * jarg4, int jarg5, char * jarg6) { + char * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int arg3 ; + char *arg4 = (char *) 0 ; + int arg5 ; + char *arg6 = (char *) 0 ; + char *result = 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (int)jarg2; + arg3 = (int)jarg3; + arg4 = (char *)jarg4; + arg5 = (int)jarg5; + arg6 = (char *)jarg6; + result = (char *)(arg1)->read(arg2,arg3,(char const *)arg4,arg5,(char const *)arg6); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_CoreSession_PlayAndGetDigits(void * jarg1, int jarg2, int jarg3, int jarg4, int jarg5, char * jarg6, char * jarg7, char * jarg8, char * jarg9, char * jarg10) { + char * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int arg3 ; + int arg4 ; + int arg5 ; + char *arg6 = (char *) 0 ; + char *arg7 = (char *) 0 ; + char *arg8 = (char *) 0 ; + char *arg9 = (char *) 0 ; + char *arg10 = (char *) NULL ; + char *result = 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (int)jarg2; + arg3 = (int)jarg3; + arg4 = (int)jarg4; + arg5 = (int)jarg5; + arg6 = (char *)jarg6; + arg7 = (char *)jarg7; + arg8 = (char *)jarg8; + arg9 = (char *)jarg9; + arg10 = (char *)jarg10; + result = (char *)(arg1)->playAndGetDigits(arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,(char const *)arg10); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_StreamFile(void * jarg1, char * jarg2, int jarg3) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 = (int) 0 ; + int result; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int)jarg3; + result = (int)(arg1)->streamFile(arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_sleep(void * jarg1, int jarg2, int jarg3) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int arg3 = (int) 0 ; + int result; + + arg1 = (CoreSession *)jarg1; + arg2 = (int)jarg2; + arg3 = (int)jarg3; + result = (int)(arg1)->sleep(arg2,arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_flushEvents(void * jarg1) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + int result; + + arg1 = (CoreSession *)jarg1; + result = (int)(arg1)->flushEvents(); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_flushDigits(void * jarg1) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + int result; + + arg1 = (CoreSession *)jarg1; + result = (int)(arg1)->flushDigits(); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_SetAutoHangup(void * jarg1, unsigned int jarg2) { + int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + bool arg2 ; + int result; + + arg1 = (CoreSession *)jarg1; + arg2 = jarg2 ? true : false; + result = (int)(arg1)->setAutoHangup(arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_CoreSession_Ready(void * jarg1) { + unsigned int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + arg1 = (CoreSession *)jarg1; + result = (bool)(arg1)->ready(); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_CoreSession_bridged(void * jarg1) { + unsigned int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + arg1 = (CoreSession *)jarg1; + result = (bool)(arg1)->bridged(); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_CoreSession_answered(void * jarg1) { + unsigned int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + arg1 = (CoreSession *)jarg1; + result = (bool)(arg1)->answered(); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_CoreSession_mediaReady(void * jarg1) { + unsigned int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + arg1 = (CoreSession *)jarg1; + result = (bool)(arg1)->mediaReady(); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_waitForAnswer(void * jarg1, void * jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + CoreSession *arg2 = (CoreSession *) 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (CoreSession *)jarg2; + (arg1)->waitForAnswer(arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_Execute(void * jarg1, char * jarg2, char * jarg3) { + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) NULL ; + + arg1 = (CoreSession *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + (arg1)->execute((char const *)arg2,(char const *)arg3); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_sendEvent(void * jarg1, void * jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + Event *arg2 = (Event *) 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (Event *)jarg2; + (arg1)->sendEvent(arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_setEventData(void * jarg1, void * jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + Event *arg2 = (Event *) 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (Event *)jarg2; + (arg1)->setEventData(arg2); +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_CoreSession_getXMLCDR(void * jarg1) { + char * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + arg1 = (CoreSession *)jarg1; + result = (char *)(arg1)->getXMLCDR(); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_CoreSession_begin_allow_threads(void * jarg1) { + unsigned int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + arg1 = (CoreSession *)jarg1; + result = (bool)(arg1)->begin_allow_threads(); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_CoreSession_end_allow_threads(void * jarg1) { + unsigned int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + arg1 = (CoreSession *)jarg1; + result = (bool)(arg1)->end_allow_threads(); + jresult = result; + return jresult; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_CoreSession_GetUuid(void * jarg1) { + char * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + arg1 = (CoreSession *)jarg1; + result = (char *)((CoreSession const *)arg1)->get_uuid(); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_CoreSession_get_cb_args(void * jarg1) { + void * jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + switch_input_args_t *result = 0 ; + + arg1 = (CoreSession *)jarg1; + result = (switch_input_args_t *) &((CoreSession const *)arg1)->get_cb_args(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_check_hangup_hook(void * jarg1) { + CoreSession *arg1 = (CoreSession *) 0 ; + + arg1 = (CoreSession *)jarg1; + (arg1)->check_hangup_hook(); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_console_log(char * jarg1, char * jarg2) { + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (char *)jarg1; + arg2 = (char *)jarg2; + console_log(arg1,arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_console_clean_log(char * jarg1) { + char *arg1 = (char *) 0 ; + + arg1 = (char *)jarg1; + console_clean_log(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_msleep(unsigned int jarg1) { + unsigned int arg1 ; + + arg1 = (unsigned int)jarg1; + msleep(arg1); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_bridge(void * jarg1, void * jarg2) { + CoreSession *arg1 = 0 ; + CoreSession *arg2 = 0 ; + + arg1 = (CoreSession *)jarg1; + if (!arg1) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "CoreSession & type is null", 0); + return ; + } + arg2 = (CoreSession *)jarg2; + if (!arg2) { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "CoreSession & type is null", 0); + return ; + } + bridge(*arg1,*arg2); +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_hanguphook(void * jarg1) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + result = (switch_status_t)hanguphook(arg1); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_dtmf_callback(void * jarg1, void * jarg2, int jarg3, void * jarg4, unsigned int jarg5) { + int jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + void *arg2 = (void *) 0 ; + switch_input_type_t arg3 ; + void *arg4 = (void *) 0 ; + unsigned int arg5 ; + switch_status_t result; + + arg1 = (switch_core_session_t *)jarg1; + arg2 = (void *)jarg2; + arg3 = (switch_input_type_t)jarg3; + arg4 = (void *)jarg4; + arg5 = (unsigned int)jarg5; + result = (switch_status_t)dtmf_callback(arg1,arg2,arg3,arg4,arg5); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_ManagedSession__SWIG_0() { + void * jresult ; + ManagedSession *result = 0 ; + + result = (ManagedSession *)new ManagedSession(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_ManagedSession__SWIG_1(char * jarg1) { + void * jresult ; + char *arg1 = (char *) 0 ; + ManagedSession *result = 0 ; + + arg1 = (char *)jarg1; + result = (ManagedSession *)new ManagedSession(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_new_ManagedSession__SWIG_2(void * jarg1) { + void * jresult ; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + ManagedSession *result = 0 ; + + arg1 = (switch_core_session_t *)jarg1; + result = (ManagedSession *)new ManagedSession(arg1); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_ManagedSession(void * jarg1) { + ManagedSession *arg1 = (ManagedSession *) 0 ; + + arg1 = (ManagedSession *)jarg1; + delete arg1; +} + + +SWIGEXPORT CoreSession * SWIGSTDCALL CSharp_ManagedSession_SWIGUpcast(ManagedSession *jarg1) { + return (CoreSession *)jarg1; +} + +#ifdef __cplusplus +} +#endif + diff --git a/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.2010.csproj b/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.2010.csproj index 10c0d89723..3e9d2519db 100644 --- a/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.2010.csproj +++ b/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.2010.csproj @@ -10,7 +10,7 @@ Properties FreeSWITCH.Managed FreeSWITCH.Managed - v3.5 + v4.0 512 @@ -18,6 +18,7 @@ 3.5 + true @@ -62,7 +63,7 @@ - + diff --git a/src/mod/languages/mod_managed/managed/swig.2010.cs b/src/mod/languages/mod_managed/managed/swig.2010.cs new file mode 100644 index 0000000000..c720c10b99 --- /dev/null +++ b/src/mod/languages/mod_managed/managed/swig.2010.cs @@ -0,0 +1,29767 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 Api : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal Api(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(Api obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~Api() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_Api(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public Api() : this(freeswitchPINVOKE.new_Api(), true) { + } + + public string Execute(string command, string data) { + string ret = freeswitchPINVOKE.Api_Execute(swigCPtr, command, data); + return ret; + } + + public string ExecuteString(string command) { + string ret = freeswitchPINVOKE.Api_ExecuteString(swigCPtr, command); + return ret; + } + + public string getTime() { + string ret = freeswitchPINVOKE.Api_getTime(swigCPtr); + return ret; + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum cache_db_flag_t { + CDF_INUSE = (1 << 0), + CDF_PRUNE = (1 << 1) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 CoreSession : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal CoreSession(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(CoreSession obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~CoreSession() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_CoreSession(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_switch_core_session InternalSession { + set { + freeswitchPINVOKE.CoreSession_InternalSession_set(swigCPtr, SWIGTYPE_p_switch_core_session.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.CoreSession_InternalSession_get(swigCPtr); + SWIGTYPE_p_switch_core_session ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_core_session(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_channel channel { + set { + freeswitchPINVOKE.CoreSession_channel_set(swigCPtr, SWIGTYPE_p_switch_channel.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.CoreSession_channel_get(swigCPtr); + SWIGTYPE_p_switch_channel ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_channel(cPtr, false); + return ret; + } + } + + public uint flags { + set { + freeswitchPINVOKE.CoreSession_flags_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.CoreSession_flags_get(swigCPtr); + return ret; + } + } + + public int allocated { + set { + freeswitchPINVOKE.CoreSession_allocated_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.CoreSession_allocated_get(swigCPtr); + return ret; + } + } + + public input_callback_state_t cb_state { + set { + freeswitchPINVOKE.CoreSession_cb_state_set(swigCPtr, input_callback_state_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.CoreSession_cb_state_get(swigCPtr); + input_callback_state_t ret = (cPtr == IntPtr.Zero) ? null : new input_callback_state_t(cPtr, false); + return ret; + } + } + + public switch_channel_state_t HookState { + set { + freeswitchPINVOKE.CoreSession_HookState_set(swigCPtr, (int)value); + } + get { + switch_channel_state_t ret = (switch_channel_state_t)freeswitchPINVOKE.CoreSession_HookState_get(swigCPtr); + return ret; + } + } + + public switch_call_cause_t cause { + set { + freeswitchPINVOKE.CoreSession_cause_set(swigCPtr, (int)value); + } + get { + switch_call_cause_t ret = (switch_call_cause_t)freeswitchPINVOKE.CoreSession_cause_get(swigCPtr); + return ret; + } + } + + public string uuid { + set { + freeswitchPINVOKE.CoreSession_uuid_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.CoreSession_uuid_get(swigCPtr); + return ret; + } + } + + public string tts_name { + set { + freeswitchPINVOKE.CoreSession_tts_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.CoreSession_tts_name_get(swigCPtr); + return ret; + } + } + + public string voice_name { + set { + freeswitchPINVOKE.CoreSession_voice_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.CoreSession_voice_name_get(swigCPtr); + return ret; + } + } + + public int Answer() { + int ret = freeswitchPINVOKE.CoreSession_Answer(swigCPtr); + return ret; + } + + public int preAnswer() { + int ret = freeswitchPINVOKE.CoreSession_preAnswer(swigCPtr); + return ret; + } + + public void Hangup(string cause) { + freeswitchPINVOKE.CoreSession_Hangup(swigCPtr, cause); + } + + public void hangupState() { + freeswitchPINVOKE.CoreSession_hangupState(swigCPtr); + } + + public void SetVariable(string var, string val) { + freeswitchPINVOKE.CoreSession_SetVariable(swigCPtr, var, val); + } + + public void SetPrivate(string var, SWIGTYPE_p_void val) { + freeswitchPINVOKE.CoreSession_SetPrivate(swigCPtr, var, SWIGTYPE_p_void.getCPtr(val)); + } + + public SWIGTYPE_p_void GetPrivate(string var) { + IntPtr cPtr = freeswitchPINVOKE.CoreSession_GetPrivate(swigCPtr, var); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + + public string GetVariable(string var) { + string ret = freeswitchPINVOKE.CoreSession_GetVariable(swigCPtr, var); + return ret; + } + + public void Say(string tosay, string module_name, string say_type, string say_method, string say_gender) { + freeswitchPINVOKE.CoreSession_Say(swigCPtr, tosay, module_name, say_type, say_method, say_gender); + } + + public void SayPhrase(string phrase_name, string phrase_data, string phrase_lang) { + freeswitchPINVOKE.CoreSession_SayPhrase(swigCPtr, phrase_name, phrase_data, phrase_lang); + } + + public string hangupCause() { + string ret = freeswitchPINVOKE.CoreSession_hangupCause(swigCPtr); + return ret; + } + + public string getState() { + string ret = freeswitchPINVOKE.CoreSession_getState(swigCPtr); + return ret; + } + + public int RecordFile(string file_name, int time_limit, int silence_threshold, int silence_hits) { + int ret = freeswitchPINVOKE.CoreSession_RecordFile(swigCPtr, file_name, time_limit, silence_threshold, silence_hits); + return ret; + } + + protected int originate(CoreSession a_leg_session, string dest, int timeout, switch_state_handler_table handlers) { + int ret = freeswitchPINVOKE.CoreSession_originate(swigCPtr, CoreSession.getCPtr(a_leg_session), dest, timeout, switch_state_handler_table.getCPtr(handlers)); + return ret; + } + + public virtual void destroy() { + freeswitchPINVOKE.CoreSession_destroy(swigCPtr); + } + + public int Speak(string text) { + int ret = freeswitchPINVOKE.CoreSession_Speak(swigCPtr, text); + return ret; + } + + public void SetTtsParameters(string tts_name, string voice_name) { + freeswitchPINVOKE.CoreSession_SetTtsParameters(swigCPtr, tts_name, voice_name); + } + + public int CollectDigits(int abs_timeout) { + int ret = freeswitchPINVOKE.CoreSession_CollectDigits__SWIG_0(swigCPtr, abs_timeout); + return ret; + } + + public int CollectDigits(int digit_timeout, int abs_timeout) { + int ret = freeswitchPINVOKE.CoreSession_CollectDigits__SWIG_1(swigCPtr, digit_timeout, abs_timeout); + return ret; + } + + public string GetDigits(int maxdigits, string terminators, int timeout) { + string ret = freeswitchPINVOKE.CoreSession_GetDigits__SWIG_0(swigCPtr, maxdigits, terminators, timeout); + return ret; + } + + public string GetDigits(int maxdigits, string terminators, int timeout, int interdigit) { + string ret = freeswitchPINVOKE.CoreSession_GetDigits__SWIG_1(swigCPtr, maxdigits, terminators, timeout, interdigit); + return ret; + } + + public int Transfer(string extension, string dialplan, string context) { + int ret = freeswitchPINVOKE.CoreSession_Transfer(swigCPtr, extension, dialplan, context); + return ret; + } + + public string read(int min_digits, int max_digits, string prompt_audio_file, int timeout, string valid_terminators) { + string ret = freeswitchPINVOKE.CoreSession_read(swigCPtr, min_digits, max_digits, prompt_audio_file, timeout, valid_terminators); + return ret; + } + + public string PlayAndGetDigits(int min_digits, int max_digits, int max_tries, int timeout, string terminators, string audio_files, string bad_input_audio_files, string digits_regex, string var_name) { + string ret = freeswitchPINVOKE.CoreSession_PlayAndGetDigits(swigCPtr, min_digits, max_digits, max_tries, timeout, terminators, audio_files, bad_input_audio_files, digits_regex, var_name); + return ret; + } + + public int StreamFile(string file, int starting_sample_count) { + int ret = freeswitchPINVOKE.CoreSession_StreamFile(swigCPtr, file, starting_sample_count); + return ret; + } + + public int sleep(int ms, int sync) { + int ret = freeswitchPINVOKE.CoreSession_sleep(swigCPtr, ms, sync); + return ret; + } + + public int flushEvents() { + int ret = freeswitchPINVOKE.CoreSession_flushEvents(swigCPtr); + return ret; + } + + public int flushDigits() { + int ret = freeswitchPINVOKE.CoreSession_flushDigits(swigCPtr); + return ret; + } + + public int SetAutoHangup(bool val) { + int ret = freeswitchPINVOKE.CoreSession_SetAutoHangup(swigCPtr, val); + return ret; + } + + public bool Ready() { + bool ret = freeswitchPINVOKE.CoreSession_Ready(swigCPtr); + return ret; + } + + public bool bridged() { + bool ret = freeswitchPINVOKE.CoreSession_bridged(swigCPtr); + return ret; + } + + public bool answered() { + bool ret = freeswitchPINVOKE.CoreSession_answered(swigCPtr); + return ret; + } + + public bool mediaReady() { + bool ret = freeswitchPINVOKE.CoreSession_mediaReady(swigCPtr); + return ret; + } + + public void waitForAnswer(CoreSession calling_session) { + freeswitchPINVOKE.CoreSession_waitForAnswer(swigCPtr, CoreSession.getCPtr(calling_session)); + } + + public void Execute(string app, string data) { + freeswitchPINVOKE.CoreSession_Execute(swigCPtr, app, data); + } + + public void sendEvent(Event sendME) { + freeswitchPINVOKE.CoreSession_sendEvent(swigCPtr, Event.getCPtr(sendME)); + } + + public void setEventData(Event e) { + freeswitchPINVOKE.CoreSession_setEventData(swigCPtr, Event.getCPtr(e)); + } + + public string getXMLCDR() { + string ret = freeswitchPINVOKE.CoreSession_getXMLCDR(swigCPtr); + return ret; + } + + public virtual bool begin_allow_threads() { + bool ret = freeswitchPINVOKE.CoreSession_begin_allow_threads(swigCPtr); + return ret; + } + + public virtual bool end_allow_threads() { + bool ret = freeswitchPINVOKE.CoreSession_end_allow_threads(swigCPtr); + return ret; + } + + public string GetUuid() { + string ret = freeswitchPINVOKE.CoreSession_GetUuid(swigCPtr); + return ret; + } + + public switch_input_args_t get_cb_args() { + switch_input_args_t ret = new switch_input_args_t(freeswitchPINVOKE.CoreSession_get_cb_args(swigCPtr), false); + return ret; + } + + public virtual void check_hangup_hook() { + freeswitchPINVOKE.CoreSession_check_hangup_hook(swigCPtr); + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 DTMF : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal DTMF(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(DTMF obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~DTMF() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_DTMF(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public char digit { + set { + freeswitchPINVOKE.DTMF_digit_set(swigCPtr, value); + } + get { + char ret = freeswitchPINVOKE.DTMF_digit_get(swigCPtr); + return ret; + } + } + + public uint duration { + set { + freeswitchPINVOKE.DTMF_duration_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.DTMF_duration_get(swigCPtr); + return ret; + } + } + + public DTMF(char idigit, uint iduration) : this(freeswitchPINVOKE.new_DTMF(idigit, iduration), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 partial class Event : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal Event(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(Event obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~Event() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_Event(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public switch_event InternalEvent { + set { + freeswitchPINVOKE.Event_InternalEvent_set(swigCPtr, switch_event.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.Event_InternalEvent_get(swigCPtr); + switch_event ret = (cPtr == IntPtr.Zero) ? null : new switch_event(cPtr, false); + return ret; + } + } + + public string serialized_string { + set { + freeswitchPINVOKE.Event_serialized_string_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.Event_serialized_string_get(swigCPtr); + return ret; + } + } + + public int mine { + set { + freeswitchPINVOKE.Event_mine_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.Event_mine_get(swigCPtr); + return ret; + } + } + + public Event(string type, string subclass_name) : this(freeswitchPINVOKE.new_Event__SWIG_0(type, subclass_name), true) { + } + + public Event(switch_event wrap_me, int free_me) : this(freeswitchPINVOKE.new_Event__SWIG_1(switch_event.getCPtr(wrap_me), free_me), true) { + } + + public string Serialize(string format) { + string ret = freeswitchPINVOKE.Event_Serialize(swigCPtr, format); + return ret; + } + + public bool SetPriority(switch_priority_t priority) { + bool ret = freeswitchPINVOKE.Event_SetPriority(swigCPtr, (int)priority); + return ret; + } + + public string GetHeader(string header_name) { + string ret = freeswitchPINVOKE.Event_GetHeader(swigCPtr, header_name); + return ret; + } + + public string GetBody() { + string ret = freeswitchPINVOKE.Event_GetBody(swigCPtr); + return ret; + } + + public string GetEventType() { + string ret = freeswitchPINVOKE.Event_GetEventType(swigCPtr); + return ret; + } + + public bool AddBody(string value) { + bool ret = freeswitchPINVOKE.Event_AddBody(swigCPtr, value); + return ret; + } + + public bool AddHeader(string header_name, string value) { + bool ret = freeswitchPINVOKE.Event_AddHeader(swigCPtr, header_name, value); + return ret; + } + + public bool DeleteHeader(string header_name) { + bool ret = freeswitchPINVOKE.Event_DeleteHeader(swigCPtr, header_name); + return ret; + } + + public bool Fire() { + bool ret = freeswitchPINVOKE.Event_Fire(swigCPtr); + return ret; + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 EventConsumer : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal EventConsumer(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(EventConsumer obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~EventConsumer() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_EventConsumer(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_switch_queue_t events { + set { + freeswitchPINVOKE.EventConsumer_events_set(swigCPtr, SWIGTYPE_p_switch_queue_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.EventConsumer_events_get(swigCPtr); + SWIGTYPE_p_switch_queue_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_queue_t(cPtr, false); + return ret; + } + } + + public switch_event_types_t e_event_id { + set { + freeswitchPINVOKE.EventConsumer_e_event_id_set(swigCPtr, (int)value); + } + get { + switch_event_types_t ret = (switch_event_types_t)freeswitchPINVOKE.EventConsumer_e_event_id_get(swigCPtr); + return ret; + } + } + + public string e_callback { + set { + freeswitchPINVOKE.EventConsumer_e_callback_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.EventConsumer_e_callback_get(swigCPtr); + return ret; + } + } + + public string e_subclass_name { + set { + freeswitchPINVOKE.EventConsumer_e_subclass_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.EventConsumer_e_subclass_name_get(swigCPtr); + return ret; + } + } + + public string e_cb_arg { + set { + freeswitchPINVOKE.EventConsumer_e_cb_arg_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.EventConsumer_e_cb_arg_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_p_switch_event_node enodes { + set { + freeswitchPINVOKE.EventConsumer_enodes_set(swigCPtr, SWIGTYPE_p_p_switch_event_node.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.EventConsumer_enodes_get(swigCPtr); + SWIGTYPE_p_p_switch_event_node ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_p_switch_event_node(cPtr, false); + return ret; + } + } + + public uint node_index { + set { + freeswitchPINVOKE.EventConsumer_node_index_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.EventConsumer_node_index_get(swigCPtr); + return ret; + } + } + + public EventConsumer(string event_name, string subclass_name) : this(freeswitchPINVOKE.new_EventConsumer(event_name, subclass_name), true) { + } + + public int bind(string event_name, string subclass_name) { + int ret = freeswitchPINVOKE.EventConsumer_bind(swigCPtr, event_name, subclass_name); + return ret; + } + + public Event pop(int block) { + IntPtr cPtr = freeswitchPINVOKE.EventConsumer_pop(swigCPtr, block); + Event ret = (cPtr == IntPtr.Zero) ? null : new Event(cPtr, true); + return ret; + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 freeswitch { + public static switch_directories SWITCH_GLOBAL_dirs { + set { + freeswitchPINVOKE.SWITCH_GLOBAL_dirs_set(switch_directories.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.SWITCH_GLOBAL_dirs_get(); + switch_directories ret = (cPtr == IntPtr.Zero) ? null : new switch_directories(cPtr, false); + return ret; + } + } + + public static int switch_core_db_close(SWIGTYPE_p_sqlite3 db) { + int ret = freeswitchPINVOKE.switch_core_db_close(SWIGTYPE_p_sqlite3.getCPtr(db)); + return ret; + } + + public static int switch_core_db_open(string filename, SWIGTYPE_p_p_sqlite3 ppDb) { + int ret = freeswitchPINVOKE.switch_core_db_open(filename, SWIGTYPE_p_p_sqlite3.getCPtr(ppDb)); + return ret; + } + + public static SWIGTYPE_p_unsigned_char switch_core_db_column_text(SWIGTYPE_p_sqlite3_stmt stmt, int iCol) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_db_column_text(SWIGTYPE_p_sqlite3_stmt.getCPtr(stmt), iCol); + SWIGTYPE_p_unsigned_char ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_char(cPtr, false); + return ret; + } + + public static string switch_core_db_column_name(SWIGTYPE_p_sqlite3_stmt stmt, int N) { + string ret = freeswitchPINVOKE.switch_core_db_column_name(SWIGTYPE_p_sqlite3_stmt.getCPtr(stmt), N); + return ret; + } + + public static int switch_core_db_column_count(SWIGTYPE_p_sqlite3_stmt pStmt) { + int ret = freeswitchPINVOKE.switch_core_db_column_count(SWIGTYPE_p_sqlite3_stmt.getCPtr(pStmt)); + return ret; + } + + public static string switch_core_db_errmsg(SWIGTYPE_p_sqlite3 db) { + string ret = freeswitchPINVOKE.switch_core_db_errmsg(SWIGTYPE_p_sqlite3.getCPtr(db)); + return ret; + } + + public static int switch_core_db_exec(SWIGTYPE_p_sqlite3 db, string sql, SWIGTYPE_p_f_p_void_int_p_p_char_p_p_char__int callback, SWIGTYPE_p_void data, ref string errmsg) { + int ret = freeswitchPINVOKE.switch_core_db_exec(SWIGTYPE_p_sqlite3.getCPtr(db), sql, SWIGTYPE_p_f_p_void_int_p_p_char_p_p_char__int.getCPtr(callback), SWIGTYPE_p_void.getCPtr(data), ref errmsg); + return ret; + } + + public static int switch_core_db_finalize(SWIGTYPE_p_sqlite3_stmt pStmt) { + int ret = freeswitchPINVOKE.switch_core_db_finalize(SWIGTYPE_p_sqlite3_stmt.getCPtr(pStmt)); + return ret; + } + + public static int switch_core_db_prepare(SWIGTYPE_p_sqlite3 db, string zSql, int nBytes, SWIGTYPE_p_p_sqlite3_stmt ppStmt, ref string pzTail) { + int ret = freeswitchPINVOKE.switch_core_db_prepare(SWIGTYPE_p_sqlite3.getCPtr(db), zSql, nBytes, SWIGTYPE_p_p_sqlite3_stmt.getCPtr(ppStmt), ref pzTail); + return ret; + } + + public static int switch_core_db_step(SWIGTYPE_p_sqlite3_stmt stmt) { + int ret = freeswitchPINVOKE.switch_core_db_step(SWIGTYPE_p_sqlite3_stmt.getCPtr(stmt)); + return ret; + } + + public static int switch_core_db_reset(SWIGTYPE_p_sqlite3_stmt pStmt) { + int ret = freeswitchPINVOKE.switch_core_db_reset(SWIGTYPE_p_sqlite3_stmt.getCPtr(pStmt)); + return ret; + } + + public static int switch_core_db_bind_int(SWIGTYPE_p_sqlite3_stmt pStmt, int i, int iValue) { + int ret = freeswitchPINVOKE.switch_core_db_bind_int(SWIGTYPE_p_sqlite3_stmt.getCPtr(pStmt), i, iValue); + return ret; + } + + public static int switch_core_db_bind_int64(SWIGTYPE_p_sqlite3_stmt pStmt, int i, long iValue) { + int ret = freeswitchPINVOKE.switch_core_db_bind_int64(SWIGTYPE_p_sqlite3_stmt.getCPtr(pStmt), i, iValue); + return ret; + } + + public static int switch_core_db_bind_text(SWIGTYPE_p_sqlite3_stmt pStmt, int i, string zData, int nData, SWIGTYPE_p_f_p_void__void xDel) { + int ret = freeswitchPINVOKE.switch_core_db_bind_text(SWIGTYPE_p_sqlite3_stmt.getCPtr(pStmt), i, zData, nData, SWIGTYPE_p_f_p_void__void.getCPtr(xDel)); + return ret; + } + + public static int switch_core_db_bind_double(SWIGTYPE_p_sqlite3_stmt pStmt, int i, double dValue) { + int ret = freeswitchPINVOKE.switch_core_db_bind_double(SWIGTYPE_p_sqlite3_stmt.getCPtr(pStmt), i, dValue); + return ret; + } + + public static long switch_core_db_last_insert_rowid(SWIGTYPE_p_sqlite3 db) { + long ret = freeswitchPINVOKE.switch_core_db_last_insert_rowid(SWIGTYPE_p_sqlite3.getCPtr(db)); + return ret; + } + + public static int switch_core_db_get_table(SWIGTYPE_p_sqlite3 db, string sql, SWIGTYPE_p_p_p_char resultp, SWIGTYPE_p_int nrow, SWIGTYPE_p_int ncolumn, ref string errmsg) { + int ret = freeswitchPINVOKE.switch_core_db_get_table(SWIGTYPE_p_sqlite3.getCPtr(db), sql, SWIGTYPE_p_p_p_char.getCPtr(resultp), SWIGTYPE_p_int.getCPtr(nrow), SWIGTYPE_p_int.getCPtr(ncolumn), ref errmsg); + return ret; + } + + public static void switch_core_db_free_table(ref string result) { + freeswitchPINVOKE.switch_core_db_free_table(ref result); + } + + public static void switch_core_db_free(string z) { + freeswitchPINVOKE.switch_core_db_free(z); + } + + public static int switch_core_db_changes(SWIGTYPE_p_sqlite3 db) { + int ret = freeswitchPINVOKE.switch_core_db_changes(SWIGTYPE_p_sqlite3.getCPtr(db)); + return ret; + } + + public static SWIGTYPE_p_real_pcre switch_regex_compile(string pattern, int options, ref string errorptr, SWIGTYPE_p_int erroroffset, SWIGTYPE_p_unsigned_char tables) { + IntPtr cPtr = freeswitchPINVOKE.switch_regex_compile(pattern, options, ref errorptr, SWIGTYPE_p_int.getCPtr(erroroffset), SWIGTYPE_p_unsigned_char.getCPtr(tables)); + SWIGTYPE_p_real_pcre ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_real_pcre(cPtr, false); + return ret; + } + + public static int switch_regex_copy_substring(string subject, SWIGTYPE_p_int ovector, int stringcount, int stringnumber, string buffer, int size) { + int ret = freeswitchPINVOKE.switch_regex_copy_substring(subject, SWIGTYPE_p_int.getCPtr(ovector), stringcount, stringnumber, buffer, size); + return ret; + } + + public static void switch_regex_free(SWIGTYPE_p_void data) { + freeswitchPINVOKE.switch_regex_free(SWIGTYPE_p_void.getCPtr(data)); + } + + public static int switch_regex_perform(string field, string expression, SWIGTYPE_p_p_real_pcre new_re, SWIGTYPE_p_int ovector, uint olen) { + int ret = freeswitchPINVOKE.switch_regex_perform(field, expression, SWIGTYPE_p_p_real_pcre.getCPtr(new_re), SWIGTYPE_p_int.getCPtr(ovector), olen); + return ret; + } + + public static void switch_perform_substitution(SWIGTYPE_p_real_pcre re, int match_count, string data, string field_data, string substituted, SWIGTYPE_p_switch_size_t len, SWIGTYPE_p_int ovector) { + freeswitchPINVOKE.switch_perform_substitution(SWIGTYPE_p_real_pcre.getCPtr(re), match_count, data, field_data, substituted, SWIGTYPE_p_switch_size_t.getCPtr(len), SWIGTYPE_p_int.getCPtr(ovector)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + } + + public static switch_status_t switch_regex_match(string target, string expression) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_regex_match(target, expression); + return ret; + } + + public static switch_status_t switch_regex_match_partial(string target, string expression, SWIGTYPE_p_int partial_match) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_regex_match_partial(target, expression, SWIGTYPE_p_int.getCPtr(partial_match)); + return ret; + } + + 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); + } + + public static void switch_core_session_unsched_heartbeat(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_unsched_heartbeat(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_session_enable_heartbeat(SWIGTYPE_p_switch_core_session session, uint seconds) { + freeswitchPINVOKE.switch_core_session_enable_heartbeat(SWIGTYPE_p_switch_core_session.getCPtr(session), seconds); + } + + public static void switch_core_session_disable_heartbeat(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_disable_heartbeat(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static switch_status_t switch_core_media_bug_add(SWIGTYPE_p_switch_core_session session, string function, string target, SWIGTYPE_p_f_p_switch_media_bug_p_void_enum_switch_abc_type_t__switch_bool_t callback, SWIGTYPE_p_void user_data, SWIGTYPE_p_time_t stop_time, uint flags, SWIGTYPE_p_p_switch_media_bug new_bug) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_media_bug_add(SWIGTYPE_p_switch_core_session.getCPtr(session), function, target, SWIGTYPE_p_f_p_switch_media_bug_p_void_enum_switch_abc_type_t__switch_bool_t.getCPtr(callback), SWIGTYPE_p_void.getCPtr(user_data), SWIGTYPE_p_time_t.getCPtr(stop_time), flags, SWIGTYPE_p_p_switch_media_bug.getCPtr(new_bug)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static void switch_core_media_bug_pause(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_media_bug_pause(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_media_bug_resume(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_media_bug_resume(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_media_bug_inuse(SWIGTYPE_p_switch_media_bug bug, SWIGTYPE_p_switch_size_t readp, SWIGTYPE_p_switch_size_t writep) { + freeswitchPINVOKE.switch_core_media_bug_inuse(SWIGTYPE_p_switch_media_bug.getCPtr(bug), SWIGTYPE_p_switch_size_t.getCPtr(readp), SWIGTYPE_p_switch_size_t.getCPtr(writep)); + } + + public static SWIGTYPE_p_void switch_core_media_bug_get_user_data(SWIGTYPE_p_switch_media_bug bug) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_media_bug_get_user_data(SWIGTYPE_p_switch_media_bug.getCPtr(bug)); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + + public static switch_frame switch_core_media_bug_get_write_replace_frame(SWIGTYPE_p_switch_media_bug bug) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_media_bug_get_write_replace_frame(SWIGTYPE_p_switch_media_bug.getCPtr(bug)); + switch_frame ret = (cPtr == IntPtr.Zero) ? null : new switch_frame(cPtr, false); + return ret; + } + + public static void switch_core_media_bug_set_write_replace_frame(SWIGTYPE_p_switch_media_bug bug, switch_frame frame) { + freeswitchPINVOKE.switch_core_media_bug_set_write_replace_frame(SWIGTYPE_p_switch_media_bug.getCPtr(bug), switch_frame.getCPtr(frame)); + } + + public static switch_frame switch_core_media_bug_get_read_replace_frame(SWIGTYPE_p_switch_media_bug bug) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_media_bug_get_read_replace_frame(SWIGTYPE_p_switch_media_bug.getCPtr(bug)); + switch_frame ret = (cPtr == IntPtr.Zero) ? null : new switch_frame(cPtr, false); + return ret; + } + + public static SWIGTYPE_p_switch_core_session switch_core_media_bug_get_session(SWIGTYPE_p_switch_media_bug bug) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_media_bug_get_session(SWIGTYPE_p_switch_media_bug.getCPtr(bug)); + SWIGTYPE_p_switch_core_session ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_core_session(cPtr, false); + return ret; + } + + public static uint switch_core_media_bug_test_flag(SWIGTYPE_p_switch_media_bug bug, uint flag) { + uint ret = freeswitchPINVOKE.switch_core_media_bug_test_flag(SWIGTYPE_p_switch_media_bug.getCPtr(bug), flag); + return ret; + } + + public static uint switch_core_media_bug_set_flag(SWIGTYPE_p_switch_media_bug bug, uint flag) { + uint ret = freeswitchPINVOKE.switch_core_media_bug_set_flag(SWIGTYPE_p_switch_media_bug.getCPtr(bug), flag); + return ret; + } + + public static uint switch_core_media_bug_clear_flag(SWIGTYPE_p_switch_media_bug bug, uint flag) { + uint ret = freeswitchPINVOKE.switch_core_media_bug_clear_flag(SWIGTYPE_p_switch_media_bug.getCPtr(bug), flag); + return ret; + } + + public static void switch_core_media_bug_set_read_replace_frame(SWIGTYPE_p_switch_media_bug bug, switch_frame frame) { + freeswitchPINVOKE.switch_core_media_bug_set_read_replace_frame(SWIGTYPE_p_switch_media_bug.getCPtr(bug), switch_frame.getCPtr(frame)); + } + + public static switch_status_t switch_core_media_bug_remove(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_media_bug bug) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_media_bug_remove(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_media_bug.getCPtr(bug)); + return ret; + } + + public static uint switch_core_media_bug_prune(SWIGTYPE_p_switch_core_session session) { + uint ret = freeswitchPINVOKE.switch_core_media_bug_prune(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_core_media_bug_remove_callback(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_media_bug_p_void_enum_switch_abc_type_t__switch_bool_t callback) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_media_bug_remove_callback(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_media_bug_p_void_enum_switch_abc_type_t__switch_bool_t.getCPtr(callback)); + return ret; + } + + public static switch_status_t switch_core_media_bug_close(SWIGTYPE_p_p_switch_media_bug bug) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_media_bug_close(SWIGTYPE_p_p_switch_media_bug.getCPtr(bug)); + return ret; + } + + public static switch_status_t switch_core_media_bug_remove_all(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_media_bug_remove_all(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_core_media_bug_read(SWIGTYPE_p_switch_media_bug bug, switch_frame frame, switch_bool_t fill) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_media_bug_read(SWIGTYPE_p_switch_media_bug.getCPtr(bug), switch_frame.getCPtr(frame), (int)fill); + return ret; + } + + public static void switch_core_media_bug_flush(SWIGTYPE_p_switch_media_bug bug) { + freeswitchPINVOKE.switch_core_media_bug_flush(SWIGTYPE_p_switch_media_bug.getCPtr(bug)); + } + + public static switch_status_t switch_core_media_bug_flush_all(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_media_bug_flush_all(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_core_port_allocator_new(ushort start, ushort end, uint flags, SWIGTYPE_p_p_switch_core_port_allocator new_allocator) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_port_allocator_new(start, end, flags, SWIGTYPE_p_p_switch_core_port_allocator.getCPtr(new_allocator)); + return ret; + } + + public static switch_status_t switch_core_port_allocator_request_port(SWIGTYPE_p_switch_core_port_allocator alloc, SWIGTYPE_p_unsigned_short port_ptr) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_port_allocator_request_port(SWIGTYPE_p_switch_core_port_allocator.getCPtr(alloc), SWIGTYPE_p_unsigned_short.getCPtr(port_ptr)); + return ret; + } + + public static switch_status_t switch_core_port_allocator_free_port(SWIGTYPE_p_switch_core_port_allocator alloc, ushort port) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_port_allocator_free_port(SWIGTYPE_p_switch_core_port_allocator.getCPtr(alloc), port); + return ret; + } + + public static void switch_core_port_allocator_destroy(SWIGTYPE_p_p_switch_core_port_allocator alloc) { + freeswitchPINVOKE.switch_core_port_allocator_destroy(SWIGTYPE_p_p_switch_core_port_allocator.getCPtr(alloc)); + } + + public static switch_status_t switch_core_init(uint flags, switch_bool_t console, ref string err) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_init(flags, (int)console, ref err); + return ret; + } + + public static switch_status_t switch_core_init_and_modload(uint flags, switch_bool_t console, ref string err) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_init_and_modload(flags, (int)console, ref err); + return ret; + } + + public static uint switch_core_session_limit(uint new_limit) { + uint ret = freeswitchPINVOKE.switch_core_session_limit(new_limit); + return ret; + } + + public static uint switch_core_sessions_per_second(uint new_limit) { + uint ret = freeswitchPINVOKE.switch_core_sessions_per_second(new_limit); + return ret; + } + + public static switch_status_t switch_core_destroy() { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_destroy(); + return ret; + } + + public static switch_status_t switch_core_session_read_lock(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_read_lock(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_core_session_read_lock_hangup(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_read_lock_hangup(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static void switch_core_session_write_lock(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_write_lock(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_session_rwunlock(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_rwunlock(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static int switch_core_add_state_handler(switch_state_handler_table state_handler) { + int ret = freeswitchPINVOKE.switch_core_add_state_handler(switch_state_handler_table.getCPtr(state_handler)); + 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)); + } + + public static switch_state_handler_table switch_core_get_state_handler(int index) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_get_state_handler(index); + switch_state_handler_table ret = (cPtr == IntPtr.Zero) ? null : new switch_state_handler_table(cPtr, false); + return ret; + } + + public static void switch_core_memory_pool_tag(SWIGTYPE_p_apr_pool_t pool, string tag) { + freeswitchPINVOKE.switch_core_memory_pool_tag(SWIGTYPE_p_apr_pool_t.getCPtr(pool), tag); + } + + public static switch_status_t switch_core_perform_new_memory_pool(SWIGTYPE_p_p_apr_pool_t pool, string file, string func, int line) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_perform_new_memory_pool(SWIGTYPE_p_p_apr_pool_t.getCPtr(pool), file, func, line); + return ret; + } + + public static switch_status_t switch_core_perform_destroy_memory_pool(SWIGTYPE_p_p_apr_pool_t pool, string file, string func, int line) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_perform_destroy_memory_pool(SWIGTYPE_p_p_apr_pool_t.getCPtr(pool), file, func, line); + return ret; + } + + public static void switch_core_memory_pool_set_data(SWIGTYPE_p_apr_pool_t pool, string key, SWIGTYPE_p_void data) { + freeswitchPINVOKE.switch_core_memory_pool_set_data(SWIGTYPE_p_apr_pool_t.getCPtr(pool), key, SWIGTYPE_p_void.getCPtr(data)); + } + + public static SWIGTYPE_p_void switch_core_memory_pool_get_data(SWIGTYPE_p_apr_pool_t pool, string key) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_memory_pool_get_data(SWIGTYPE_p_apr_pool_t.getCPtr(pool), key); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + + public static void switch_core_session_run(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_run(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static uint switch_core_session_running(SWIGTYPE_p_switch_core_session session) { + uint ret = freeswitchPINVOKE.switch_core_session_running(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static uint switch_core_session_started(SWIGTYPE_p_switch_core_session session) { + uint ret = freeswitchPINVOKE.switch_core_session_started(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static SWIGTYPE_p_void switch_core_perform_permanent_alloc(SWIGTYPE_p_switch_size_t memory, string file, string func, int line) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_perform_permanent_alloc(SWIGTYPE_p_switch_size_t.getCPtr(memory), file, func, line); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static SWIGTYPE_p_void switch_core_perform_alloc(SWIGTYPE_p_apr_pool_t pool, SWIGTYPE_p_switch_size_t memory, string file, string func, int line) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_perform_alloc(SWIGTYPE_p_apr_pool_t.getCPtr(pool), SWIGTYPE_p_switch_size_t.getCPtr(memory), file, func, line); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static SWIGTYPE_p_void switch_core_perform_session_alloc(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_switch_size_t memory, string file, string func, int line) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_perform_session_alloc(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_switch_size_t.getCPtr(memory), file, func, line); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static string switch_core_perform_permanent_strdup(string todup, string file, string func, int line) { + string ret = freeswitchPINVOKE.switch_core_perform_permanent_strdup(todup, file, func, line); + return ret; + } + + public static string switch_core_perform_session_strdup(SWIGTYPE_p_switch_core_session session, string todup, string file, string func, int line) { + string ret = freeswitchPINVOKE.switch_core_perform_session_strdup(SWIGTYPE_p_switch_core_session.getCPtr(session), todup, file, func, line); + return ret; + } + + public static string switch_core_perform_strdup(SWIGTYPE_p_apr_pool_t pool, string todup, string file, string func, int line) { + string ret = freeswitchPINVOKE.switch_core_perform_strdup(SWIGTYPE_p_apr_pool_t.getCPtr(pool), todup, file, func, line); + return ret; + } + + public static string switch_core_session_sprintf(SWIGTYPE_p_switch_core_session session, string fmt) { + string ret = freeswitchPINVOKE.switch_core_session_sprintf(SWIGTYPE_p_switch_core_session.getCPtr(session), fmt); + return ret; + } + + public static string switch_core_sprintf(SWIGTYPE_p_apr_pool_t pool, string fmt) { + string ret = freeswitchPINVOKE.switch_core_sprintf(SWIGTYPE_p_apr_pool_t.getCPtr(pool), fmt); + return ret; + } + + public static SWIGTYPE_p_apr_pool_t switch_core_session_get_pool(SWIGTYPE_p_switch_core_session session) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_get_pool(SWIGTYPE_p_switch_core_session.getCPtr(session)); + SWIGTYPE_p_apr_pool_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_apr_pool_t(cPtr, false); + return ret; + } + + public static SWIGTYPE_p_switch_core_session switch_core_session_request_xml(switch_endpoint_interface endpoint_interface, SWIGTYPE_p_p_apr_pool_t pool, switch_xml xml) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_request_xml(switch_endpoint_interface.getCPtr(endpoint_interface), SWIGTYPE_p_p_apr_pool_t.getCPtr(pool), switch_xml.getCPtr(xml)); + SWIGTYPE_p_switch_core_session ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_core_session(cPtr, false); + return ret; + } + + public static SWIGTYPE_p_switch_core_session switch_core_session_request_uuid(switch_endpoint_interface endpoint_interface, switch_call_direction_t direction, SWIGTYPE_p_p_apr_pool_t pool, string use_uuid) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_request_uuid(switch_endpoint_interface.getCPtr(endpoint_interface), (int)direction, SWIGTYPE_p_p_apr_pool_t.getCPtr(pool), use_uuid); + SWIGTYPE_p_switch_core_session ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_core_session(cPtr, false); + return ret; + } + + public static switch_status_t switch_core_session_set_uuid(SWIGTYPE_p_switch_core_session session, string use_uuid) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_uuid(SWIGTYPE_p_switch_core_session.getCPtr(session), use_uuid); + return ret; + } + + public static void switch_core_session_perform_destroy(SWIGTYPE_p_p_switch_core_session session, string file, string func, int line) { + freeswitchPINVOKE.switch_core_session_perform_destroy(SWIGTYPE_p_p_switch_core_session.getCPtr(session), file, func, line); + } + + public static void switch_core_session_destroy_state(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_destroy_state(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_session_reporting_state(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_reporting_state(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_session_hangup_state(SWIGTYPE_p_switch_core_session session, switch_bool_t force) { + freeswitchPINVOKE.switch_core_session_hangup_state(SWIGTYPE_p_switch_core_session.getCPtr(session), (int)force); + } + + public static uint switch_core_session_count() { + uint ret = freeswitchPINVOKE.switch_core_session_count(); + return ret; + } + + public static SWIGTYPE_p_switch_size_t switch_core_session_get_id(SWIGTYPE_p_switch_core_session session) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_core_session_get_id(SWIGTYPE_p_switch_core_session.getCPtr(session)), true); + return ret; + } + + public static SWIGTYPE_p_switch_size_t switch_core_session_id() { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_core_session_id(), true); + return ret; + } + + public static SWIGTYPE_p_switch_core_session switch_core_session_request_by_name(string endpoint_name, switch_call_direction_t direction, SWIGTYPE_p_p_apr_pool_t pool) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_request_by_name(endpoint_name, (int)direction, SWIGTYPE_p_p_apr_pool_t.getCPtr(pool)); + SWIGTYPE_p_switch_core_session ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_core_session(cPtr, false); + return ret; + } + + public static switch_status_t switch_core_session_thread_launch(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_thread_launch(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static SWIGTYPE_p_switch_channel switch_core_session_get_channel(SWIGTYPE_p_switch_core_session session) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_get_channel(SWIGTYPE_p_switch_core_session.getCPtr(session)); + SWIGTYPE_p_switch_channel ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_channel(cPtr, false); + return ret; + } + + public static void switch_core_session_wake_session_thread(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_wake_session_thread(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_session_signal_state_change(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_signal_state_change(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static string switch_core_session_get_uuid(SWIGTYPE_p_switch_core_session session) { + string ret = freeswitchPINVOKE.switch_core_session_get_uuid(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_core_session_set_loglevel(SWIGTYPE_p_switch_core_session session, switch_log_level_t loglevel) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_loglevel(SWIGTYPE_p_switch_core_session.getCPtr(session), (int)loglevel); + return ret; + } + + public static switch_log_level_t switch_core_session_get_loglevel(SWIGTYPE_p_switch_core_session session) { + switch_log_level_t ret = (switch_log_level_t)freeswitchPINVOKE.switch_core_session_get_loglevel(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static void switch_core_session_soft_lock(SWIGTYPE_p_switch_core_session session, uint sec) { + freeswitchPINVOKE.switch_core_session_soft_lock(SWIGTYPE_p_switch_core_session.getCPtr(session), sec); + } + + public static void switch_core_session_soft_unlock(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_soft_unlock(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static string switch_core_get_uuid() { + string ret = freeswitchPINVOKE.switch_core_get_uuid(); + return ret; + } + + public static SWIGTYPE_p_switch_core_session switch_core_session_locate(string uuid_str) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_locate(uuid_str); + SWIGTYPE_p_switch_core_session ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_core_session(cPtr, false); + return ret; + } + + public static SWIGTYPE_p_switch_core_session switch_core_session_force_locate(string uuid_str) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_force_locate(uuid_str); + SWIGTYPE_p_switch_core_session ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_core_session(cPtr, false); + return ret; + } + + public static string switch_core_get_variable(string varname) { + string ret = freeswitchPINVOKE.switch_core_get_variable(varname); + return ret; + } + + public static void switch_core_set_variable(string varname, string value) { + freeswitchPINVOKE.switch_core_set_variable(varname, value); + } + + public static switch_bool_t switch_core_set_var_conditional(string varname, string value, string val2) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_core_set_var_conditional(varname, value, val2); + return ret; + } + + public static void switch_core_dump_variables(switch_stream_handle stream) { + freeswitchPINVOKE.switch_core_dump_variables(switch_stream_handle.getCPtr(stream)); + } + + public static void switch_core_session_hupall(switch_call_cause_t cause) { + freeswitchPINVOKE.switch_core_session_hupall((int)cause); + } + + public static void switch_core_session_hupall_matching_var(string var_name, string var_val, switch_call_cause_t cause) { + freeswitchPINVOKE.switch_core_session_hupall_matching_var(var_name, var_val, (int)cause); + } + + public static void switch_core_session_hupall_endpoint(switch_endpoint_interface endpoint_interface, switch_call_cause_t cause) { + freeswitchPINVOKE.switch_core_session_hupall_endpoint(switch_endpoint_interface.getCPtr(endpoint_interface), (int)cause); + } + + public static switch_status_t switch_core_session_get_partner(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_core_session partner) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_get_partner(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_core_session.getCPtr(partner)); + return ret; + } + + public static switch_status_t switch_core_session_message_send(string uuid_str, switch_core_session_message message) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_message_send(uuid_str, switch_core_session_message.getCPtr(message)); + return ret; + } + + public static switch_status_t switch_core_session_queue_message(SWIGTYPE_p_switch_core_session session, switch_core_session_message message) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_queue_message(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_core_session_message.getCPtr(message)); + return ret; + } + + public static void switch_core_session_free_message(SWIGTYPE_p_p_switch_core_session_message message) { + freeswitchPINVOKE.switch_core_session_free_message(SWIGTYPE_p_p_switch_core_session_message.getCPtr(message)); + } + + public static switch_status_t switch_core_session_pass_indication(SWIGTYPE_p_switch_core_session session, switch_core_session_message_types_t indication) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_pass_indication(SWIGTYPE_p_switch_core_session.getCPtr(session), (int)indication); + return ret; + } + + public static switch_status_t switch_core_session_queue_indication(SWIGTYPE_p_switch_core_session session, switch_core_session_message_types_t indication) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_queue_indication(SWIGTYPE_p_switch_core_session.getCPtr(session), (int)indication); + return ret; + } + + public static switch_status_t switch_core_session_dequeue_message(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_core_session_message message) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_dequeue_message(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_core_session_message.getCPtr(message)); + return ret; + } + + public static switch_status_t switch_core_session_flush_message(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_flush_message(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_core_session_event_send(string uuid_str, SWIGTYPE_p_p_switch_event arg1) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_event_send(uuid_str, SWIGTYPE_p_p_switch_event.getCPtr(arg1)); + return ret; + } + + public static switch_app_log switch_core_session_get_app_log(SWIGTYPE_p_switch_core_session session) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_get_app_log(SWIGTYPE_p_switch_core_session.getCPtr(session)); + switch_app_log ret = (cPtr == IntPtr.Zero) ? null : new switch_app_log(cPtr, false); + return ret; + } + + public static switch_status_t switch_core_session_exec(SWIGTYPE_p_switch_core_session session, switch_application_interface application_interface, string arg) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_exec(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_application_interface.getCPtr(application_interface), arg); + return ret; + } + + public static switch_status_t switch_core_session_execute_application_get_flags(SWIGTYPE_p_switch_core_session session, string app, string arg, SWIGTYPE_p_int flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_execute_application_get_flags(SWIGTYPE_p_switch_core_session.getCPtr(session), app, arg, SWIGTYPE_p_int.getCPtr(flags)); + return ret; + } + + public static switch_status_t switch_core_session_get_app_flags(string app, SWIGTYPE_p_int flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_get_app_flags(app, SWIGTYPE_p_int.getCPtr(flags)); + return ret; + } + + public static switch_status_t switch_core_session_execute_exten(SWIGTYPE_p_switch_core_session session, string exten, string dialplan, string context) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_execute_exten(SWIGTYPE_p_switch_core_session.getCPtr(session), exten, dialplan, context); + return ret; + } + + public static switch_status_t switch_core_session_receive_event(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_event arg1) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_receive_event(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_event.getCPtr(arg1)); + return ret; + } + + public static SWIGTYPE_p_void switch_core_session_get_private(SWIGTYPE_p_switch_core_session session) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_get_private(SWIGTYPE_p_switch_core_session.getCPtr(session)); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + + public static switch_status_t switch_core_session_set_private(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_void private_info) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_private(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_void.getCPtr(private_info)); + return ret; + } + + public static int switch_core_session_add_stream(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_void private_info) { + int ret = freeswitchPINVOKE.switch_core_session_add_stream(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_void.getCPtr(private_info)); + return ret; + } + + public static SWIGTYPE_p_void switch_core_session_get_stream(SWIGTYPE_p_switch_core_session session, int index) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_get_stream(SWIGTYPE_p_switch_core_session.getCPtr(session), index); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + + public static int switch_core_session_get_stream_count(SWIGTYPE_p_switch_core_session session) { + int ret = freeswitchPINVOKE.switch_core_session_get_stream_count(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static void switch_core_session_launch_thread(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_thread_t_p_void__p_void func, SWIGTYPE_p_void obj) { + freeswitchPINVOKE.switch_core_session_launch_thread(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_thread_t_p_void__p_void.getCPtr(func), SWIGTYPE_p_void.getCPtr(obj)); + } + + public static void switch_core_thread_session_end(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_thread_session_end(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_service_session(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_service_session(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static switch_call_cause_t switch_core_session_outgoing_channel(SWIGTYPE_p_switch_core_session session, switch_event var_event, string endpoint_name, switch_caller_profile caller_profile, SWIGTYPE_p_p_switch_core_session new_session, SWIGTYPE_p_p_apr_pool_t pool, uint flags, SWIGTYPE_p_switch_call_cause_t cancel_cause) { + switch_call_cause_t ret = (switch_call_cause_t)freeswitchPINVOKE.switch_core_session_outgoing_channel(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_event.getCPtr(var_event), endpoint_name, switch_caller_profile.getCPtr(caller_profile), SWIGTYPE_p_p_switch_core_session.getCPtr(new_session), SWIGTYPE_p_p_apr_pool_t.getCPtr(pool), flags, SWIGTYPE_p_switch_call_cause_t.getCPtr(cancel_cause)); + return ret; + } + + public static switch_call_cause_t switch_core_session_resurrect_channel(string endpoint_name, SWIGTYPE_p_p_switch_core_session new_session, SWIGTYPE_p_p_apr_pool_t pool, SWIGTYPE_p_void data) { + switch_call_cause_t ret = (switch_call_cause_t)freeswitchPINVOKE.switch_core_session_resurrect_channel(endpoint_name, SWIGTYPE_p_p_switch_core_session.getCPtr(new_session), SWIGTYPE_p_p_apr_pool_t.getCPtr(pool), SWIGTYPE_p_void.getCPtr(data)); + return ret; + } + + public static switch_status_t switch_core_session_perform_receive_message(SWIGTYPE_p_switch_core_session session, switch_core_session_message message, string file, string func, int line) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_perform_receive_message(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_core_session_message.getCPtr(message), file, func, line); + return ret; + } + + public static switch_status_t switch_core_session_queue_event(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_event arg1) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_queue_event(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_event.getCPtr(arg1)); + return ret; + } + + public static uint switch_core_session_event_count(SWIGTYPE_p_switch_core_session session) { + uint ret = freeswitchPINVOKE.switch_core_session_event_count(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_core_session_dequeue_event(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_event arg1, switch_bool_t force) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_dequeue_event(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_event.getCPtr(arg1), (int)force); + return ret; + } + + public static switch_status_t switch_core_session_queue_private_event(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_event arg1, switch_bool_t priority) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_queue_private_event(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_event.getCPtr(arg1), (int)priority); + return ret; + } + + public static uint switch_core_session_private_event_count(SWIGTYPE_p_switch_core_session session) { + uint ret = freeswitchPINVOKE.switch_core_session_private_event_count(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_core_session_dequeue_private_event(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_event arg1) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_dequeue_private_event(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_event.getCPtr(arg1)); + return ret; + } + + public static uint switch_core_session_flush_private_events(SWIGTYPE_p_switch_core_session session) { + uint ret = freeswitchPINVOKE.switch_core_session_flush_private_events(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_core_session_read_frame(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_frame frame, uint flags, int stream_id) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_read_frame(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_frame.getCPtr(frame), flags, stream_id); + return ret; + } + + public static switch_status_t switch_core_session_read_video_frame(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_frame frame, uint flags, int stream_id) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_read_video_frame(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_frame.getCPtr(frame), flags, stream_id); + return ret; + } + + public static switch_status_t switch_core_session_write_video_frame(SWIGTYPE_p_switch_core_session session, switch_frame frame, uint flags, int stream_id) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_write_video_frame(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_frame.getCPtr(frame), flags, stream_id); + return ret; + } + + public static switch_status_t switch_core_session_set_read_impl(SWIGTYPE_p_switch_core_session session, switch_codec_implementation impp) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_read_impl(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec_implementation.getCPtr(impp)); + return ret; + } + + public static switch_status_t switch_core_session_set_write_impl(SWIGTYPE_p_switch_core_session session, switch_codec_implementation impp) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_write_impl(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec_implementation.getCPtr(impp)); + return ret; + } + + public static switch_status_t switch_core_session_set_video_read_impl(SWIGTYPE_p_switch_core_session session, switch_codec_implementation impp) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_video_read_impl(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec_implementation.getCPtr(impp)); + return ret; + } + + public static switch_status_t switch_core_session_set_video_write_impl(SWIGTYPE_p_switch_core_session session, switch_codec_implementation impp) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_video_write_impl(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec_implementation.getCPtr(impp)); + return ret; + } + + public static void switch_core_session_reset(SWIGTYPE_p_switch_core_session session, switch_bool_t flush_dtmf, switch_bool_t reset_read_codec) { + freeswitchPINVOKE.switch_core_session_reset(SWIGTYPE_p_switch_core_session.getCPtr(session), (int)flush_dtmf, (int)reset_read_codec); + } + + public static switch_status_t switch_core_session_write_frame(SWIGTYPE_p_switch_core_session session, switch_frame frame, uint flags, int stream_id) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_write_frame(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_frame.getCPtr(frame), flags, stream_id); + return ret; + } + + public static switch_status_t switch_core_session_perform_kill_channel(SWIGTYPE_p_switch_core_session session, string file, string func, int line, switch_signal_t sig) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_perform_kill_channel(SWIGTYPE_p_switch_core_session.getCPtr(session), file, func, line, (int)sig); + return ret; + } + + public static switch_status_t switch_core_session_send_dtmf(SWIGTYPE_p_switch_core_session session, switch_dtmf_t dtmf) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_send_dtmf(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_dtmf_t.getCPtr(dtmf)); + return ret; + } + + public static switch_status_t switch_core_session_send_dtmf_string(SWIGTYPE_p_switch_core_session session, string dtmf_string) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_send_dtmf_string(SWIGTYPE_p_switch_core_session.getCPtr(session), dtmf_string); + return ret; + } + + public static switch_status_t switch_core_session_recv_dtmf(SWIGTYPE_p_switch_core_session session, switch_dtmf_t dtmf) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_recv_dtmf(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_dtmf_t.getCPtr(dtmf)); + return ret; + } + + public static switch_status_t switch_core_hash_init_case(SWIGTYPE_p_p_switch_hash hash, SWIGTYPE_p_apr_pool_t pool, switch_bool_t case_sensitive) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_hash_init_case(SWIGTYPE_p_p_switch_hash.getCPtr(hash), SWIGTYPE_p_apr_pool_t.getCPtr(pool), (int)case_sensitive); + return ret; + } + + public static switch_status_t switch_core_hash_destroy(SWIGTYPE_p_p_switch_hash hash) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_hash_destroy(SWIGTYPE_p_p_switch_hash.getCPtr(hash)); + return ret; + } + + public static switch_status_t switch_core_hash_insert(SWIGTYPE_p_switch_hash hash, string key, SWIGTYPE_p_void data) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_hash_insert(SWIGTYPE_p_switch_hash.getCPtr(hash), key, SWIGTYPE_p_void.getCPtr(data)); + return ret; + } + + public static switch_status_t switch_core_hash_insert_locked(SWIGTYPE_p_switch_hash hash, string key, SWIGTYPE_p_void data, SWIGTYPE_p_switch_mutex_t mutex) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_hash_insert_locked(SWIGTYPE_p_switch_hash.getCPtr(hash), key, SWIGTYPE_p_void.getCPtr(data), SWIGTYPE_p_switch_mutex_t.getCPtr(mutex)); + return ret; + } + + public static switch_status_t switch_core_hash_delete(SWIGTYPE_p_switch_hash hash, string key) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_hash_delete(SWIGTYPE_p_switch_hash.getCPtr(hash), key); + return ret; + } + + public static switch_status_t switch_core_hash_delete_locked(SWIGTYPE_p_switch_hash hash, string key, SWIGTYPE_p_switch_mutex_t mutex) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_hash_delete_locked(SWIGTYPE_p_switch_hash.getCPtr(hash), key, SWIGTYPE_p_switch_mutex_t.getCPtr(mutex)); + return ret; + } + + public static switch_status_t switch_core_hash_delete_multi(SWIGTYPE_p_switch_hash hash, SWIGTYPE_p_f_p_q_const__void_p_q_const__void_p_void__switch_bool_t callback, SWIGTYPE_p_void pData) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_hash_delete_multi(SWIGTYPE_p_switch_hash.getCPtr(hash), SWIGTYPE_p_f_p_q_const__void_p_q_const__void_p_void__switch_bool_t.getCPtr(callback), SWIGTYPE_p_void.getCPtr(pData)); + return ret; + } + + public static SWIGTYPE_p_void switch_core_hash_find(SWIGTYPE_p_switch_hash hash, string key) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_hash_find(SWIGTYPE_p_switch_hash.getCPtr(hash), key); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + + public static SWIGTYPE_p_void switch_core_hash_find_locked(SWIGTYPE_p_switch_hash hash, string key, SWIGTYPE_p_switch_mutex_t mutex) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_hash_find_locked(SWIGTYPE_p_switch_hash.getCPtr(hash), key, SWIGTYPE_p_switch_mutex_t.getCPtr(mutex)); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + + public static SWIGTYPE_p_HashElem switch_hash_first(string depricate_me, SWIGTYPE_p_switch_hash hash) { + IntPtr cPtr = freeswitchPINVOKE.switch_hash_first(depricate_me, SWIGTYPE_p_switch_hash.getCPtr(hash)); + SWIGTYPE_p_HashElem ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_HashElem(cPtr, false); + return ret; + } + + public static SWIGTYPE_p_HashElem switch_hash_next(SWIGTYPE_p_HashElem hi) { + IntPtr cPtr = freeswitchPINVOKE.switch_hash_next(SWIGTYPE_p_HashElem.getCPtr(hi)); + SWIGTYPE_p_HashElem ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_HashElem(cPtr, false); + return ret; + } + + public static void switch_hash_this(SWIGTYPE_p_HashElem hi, SWIGTYPE_p_p_void key, SWIGTYPE_p_switch_ssize_t klen, SWIGTYPE_p_p_void val) { + freeswitchPINVOKE.switch_hash_this(SWIGTYPE_p_HashElem.getCPtr(hi), SWIGTYPE_p_p_void.getCPtr(key), SWIGTYPE_p_switch_ssize_t.getCPtr(klen), SWIGTYPE_p_p_void.getCPtr(val)); + } + + public static switch_status_t switch_core_timer_init(switch_timer timer, string timer_name, int interval, int samples, SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_timer_init(switch_timer.getCPtr(timer), timer_name, interval, samples, SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static void switch_time_calibrate_clock() { + freeswitchPINVOKE.switch_time_calibrate_clock(); + } + + public static switch_status_t switch_core_timer_next(switch_timer timer) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_timer_next(switch_timer.getCPtr(timer)); + return ret; + } + + public static switch_status_t switch_core_timer_step(switch_timer timer) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_timer_step(switch_timer.getCPtr(timer)); + return ret; + } + + public static switch_status_t switch_core_timer_sync(switch_timer timer) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_timer_sync(switch_timer.getCPtr(timer)); + return ret; + } + + public static switch_status_t switch_core_timer_check(switch_timer timer, switch_bool_t step) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_timer_check(switch_timer.getCPtr(timer), (int)step); + return ret; + } + + public static switch_status_t switch_core_timer_destroy(switch_timer timer) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_timer_destroy(switch_timer.getCPtr(timer)); + return ret; + } + + public static switch_status_t switch_core_codec_init(switch_codec codec, string codec_name, string fmtp, uint rate, int ms, int channels, uint flags, switch_codec_settings codec_settings, SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_codec_init(switch_codec.getCPtr(codec), codec_name, fmtp, rate, ms, channels, flags, switch_codec_settings.getCPtr(codec_settings), SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static switch_status_t switch_core_codec_copy(switch_codec codec, switch_codec new_codec, SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_codec_copy(switch_codec.getCPtr(codec), switch_codec.getCPtr(new_codec), SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static switch_status_t switch_core_codec_reset(switch_codec codec) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_codec_reset(switch_codec.getCPtr(codec)); + return ret; + } + + public static switch_status_t switch_core_codec_encode(switch_codec codec, switch_codec other_codec, SWIGTYPE_p_void decoded_data, uint decoded_data_len, uint decoded_rate, SWIGTYPE_p_void encoded_data, SWIGTYPE_p_unsigned_long encoded_data_len, SWIGTYPE_p_unsigned_long encoded_rate, SWIGTYPE_p_unsigned_int flag) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_codec_encode(switch_codec.getCPtr(codec), switch_codec.getCPtr(other_codec), SWIGTYPE_p_void.getCPtr(decoded_data), decoded_data_len, decoded_rate, SWIGTYPE_p_void.getCPtr(encoded_data), SWIGTYPE_p_unsigned_long.getCPtr(encoded_data_len), SWIGTYPE_p_unsigned_long.getCPtr(encoded_rate), SWIGTYPE_p_unsigned_int.getCPtr(flag)); + return ret; + } + + public static switch_status_t switch_core_codec_decode(switch_codec codec, switch_codec other_codec, SWIGTYPE_p_void encoded_data, uint encoded_data_len, uint encoded_rate, SWIGTYPE_p_void decoded_data, SWIGTYPE_p_unsigned_long decoded_data_len, SWIGTYPE_p_unsigned_long decoded_rate, SWIGTYPE_p_unsigned_int flag) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_codec_decode(switch_codec.getCPtr(codec), switch_codec.getCPtr(other_codec), SWIGTYPE_p_void.getCPtr(encoded_data), encoded_data_len, encoded_rate, SWIGTYPE_p_void.getCPtr(decoded_data), SWIGTYPE_p_unsigned_long.getCPtr(decoded_data_len), SWIGTYPE_p_unsigned_long.getCPtr(decoded_rate), SWIGTYPE_p_unsigned_int.getCPtr(flag)); + return ret; + } + + public static switch_status_t switch_core_codec_destroy(switch_codec codec) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_codec_destroy(switch_codec.getCPtr(codec)); + return ret; + } + + public static switch_status_t switch_core_session_set_read_codec(SWIGTYPE_p_switch_core_session session, switch_codec codec) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_read_codec(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec.getCPtr(codec)); + return ret; + } + + public static void switch_core_session_unset_read_codec(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_unset_read_codec(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_session_unset_write_codec(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_unset_write_codec(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_session_lock_codec_write(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_lock_codec_write(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_session_unlock_codec_write(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_unlock_codec_write(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_session_lock_codec_read(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_lock_codec_read(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static void switch_core_session_unlock_codec_read(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_core_session_unlock_codec_read(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static switch_status_t switch_core_session_get_read_impl(SWIGTYPE_p_switch_core_session session, switch_codec_implementation impp) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_get_read_impl(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec_implementation.getCPtr(impp)); + return ret; + } + + public static switch_status_t switch_core_session_get_write_impl(SWIGTYPE_p_switch_core_session session, switch_codec_implementation impp) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_get_write_impl(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec_implementation.getCPtr(impp)); + return ret; + } + + public static switch_status_t switch_core_session_get_video_read_impl(SWIGTYPE_p_switch_core_session session, switch_codec_implementation impp) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_get_video_read_impl(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec_implementation.getCPtr(impp)); + return ret; + } + + public static switch_status_t switch_core_session_get_video_write_impl(SWIGTYPE_p_switch_core_session session, switch_codec_implementation impp) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_get_video_write_impl(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec_implementation.getCPtr(impp)); + return ret; + } + + public static switch_codec switch_core_session_get_read_codec(SWIGTYPE_p_switch_core_session session) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_get_read_codec(SWIGTYPE_p_switch_core_session.getCPtr(session)); + switch_codec ret = (cPtr == IntPtr.Zero) ? null : new switch_codec(cPtr, false); + return ret; + } + + public static switch_codec switch_core_session_get_effective_read_codec(SWIGTYPE_p_switch_core_session session) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_get_effective_read_codec(SWIGTYPE_p_switch_core_session.getCPtr(session)); + switch_codec ret = (cPtr == IntPtr.Zero) ? null : new switch_codec(cPtr, false); + return ret; + } + + public static switch_status_t switch_core_session_set_write_codec(SWIGTYPE_p_switch_core_session session, switch_codec codec) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_write_codec(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec.getCPtr(codec)); + return ret; + } + + public static switch_codec switch_core_session_get_write_codec(SWIGTYPE_p_switch_core_session session) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_get_write_codec(SWIGTYPE_p_switch_core_session.getCPtr(session)); + switch_codec ret = (cPtr == IntPtr.Zero) ? null : new switch_codec(cPtr, false); + return ret; + } + + public static switch_codec switch_core_session_get_effective_write_codec(SWIGTYPE_p_switch_core_session session) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_get_effective_write_codec(SWIGTYPE_p_switch_core_session.getCPtr(session)); + switch_codec ret = (cPtr == IntPtr.Zero) ? null : new switch_codec(cPtr, false); + return ret; + } + + public static switch_status_t switch_core_session_set_video_read_codec(SWIGTYPE_p_switch_core_session session, switch_codec codec) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_video_read_codec(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec.getCPtr(codec)); + return ret; + } + + public static switch_codec switch_core_session_get_video_read_codec(SWIGTYPE_p_switch_core_session session) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_get_video_read_codec(SWIGTYPE_p_switch_core_session.getCPtr(session)); + switch_codec ret = (cPtr == IntPtr.Zero) ? null : new switch_codec(cPtr, false); + return ret; + } + + public static switch_status_t switch_core_session_set_video_write_codec(SWIGTYPE_p_switch_core_session session, switch_codec codec) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_video_write_codec(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec.getCPtr(codec)); + return ret; + } + + public static switch_codec switch_core_session_get_video_write_codec(SWIGTYPE_p_switch_core_session session) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_get_video_write_codec(SWIGTYPE_p_switch_core_session.getCPtr(session)); + switch_codec ret = (cPtr == IntPtr.Zero) ? null : new switch_codec(cPtr, false); + return ret; + } + + public static SWIGTYPE_p_sqlite3 switch_core_db_open_file(string filename) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_db_open_file(filename); + SWIGTYPE_p_sqlite3 ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_sqlite3(cPtr, false); + return ret; + } + + public static switch_status_t switch_core_db_persistant_execute(SWIGTYPE_p_sqlite3 db, string sql, uint retries) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_db_persistant_execute(SWIGTYPE_p_sqlite3.getCPtr(db), sql, retries); + return ret; + } + + public static switch_status_t switch_core_db_persistant_execute_trans(SWIGTYPE_p_sqlite3 db, string sql, uint retries) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_db_persistant_execute_trans(SWIGTYPE_p_sqlite3.getCPtr(db), sql, retries); + return ret; + } + + public static void switch_core_db_test_reactive(SWIGTYPE_p_sqlite3 db, string test_sql, string drop_sql, string reactive_sql) { + freeswitchPINVOKE.switch_core_db_test_reactive(SWIGTYPE_p_sqlite3.getCPtr(db), test_sql, drop_sql, reactive_sql); + } + + public static switch_status_t switch_core_perform_file_open(string file, string func, int line, switch_file_handle fh, string file_path, byte channels, uint rate, uint flags, SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_perform_file_open(file, func, line, switch_file_handle.getCPtr(fh), file_path, channels, rate, flags, SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static switch_status_t switch_core_file_read(switch_file_handle fh, SWIGTYPE_p_void data, SWIGTYPE_p_switch_size_t len) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_file_read(switch_file_handle.getCPtr(fh), SWIGTYPE_p_void.getCPtr(data), SWIGTYPE_p_switch_size_t.getCPtr(len)); + return ret; + } + + public static switch_status_t switch_core_file_write(switch_file_handle fh, SWIGTYPE_p_void data, SWIGTYPE_p_switch_size_t len) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_file_write(switch_file_handle.getCPtr(fh), SWIGTYPE_p_void.getCPtr(data), SWIGTYPE_p_switch_size_t.getCPtr(len)); + return ret; + } + + public static switch_status_t switch_core_file_seek(switch_file_handle fh, SWIGTYPE_p_unsigned_int cur_pos, long samples, int whence) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_file_seek(switch_file_handle.getCPtr(fh), SWIGTYPE_p_unsigned_int.getCPtr(cur_pos), samples, whence); + return ret; + } + + public static switch_status_t switch_core_file_set_string(switch_file_handle fh, switch_audio_col_t col, string arg2) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_file_set_string(switch_file_handle.getCPtr(fh), (int)col, arg2); + return ret; + } + + public static switch_status_t switch_core_file_get_string(switch_file_handle fh, switch_audio_col_t col, ref string arg2) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_file_get_string(switch_file_handle.getCPtr(fh), (int)col, ref arg2); + return ret; + } + + public static switch_status_t switch_core_file_close(switch_file_handle fh) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_file_close(switch_file_handle.getCPtr(fh)); + return ret; + } + + public static switch_status_t switch_core_file_truncate(switch_file_handle fh, long offset) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_file_truncate(switch_file_handle.getCPtr(fh), offset); + return ret; + } + + public static switch_status_t switch_core_speech_open(switch_speech_handle sh, string module_name, string voice_name, uint rate, uint interval, SWIGTYPE_p_unsigned_long flags, SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_speech_open(switch_speech_handle.getCPtr(sh), module_name, voice_name, rate, interval, SWIGTYPE_p_unsigned_long.getCPtr(flags), SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static switch_status_t switch_core_speech_feed_tts(switch_speech_handle sh, string text, SWIGTYPE_p_unsigned_long flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_speech_feed_tts(switch_speech_handle.getCPtr(sh), text, SWIGTYPE_p_unsigned_long.getCPtr(flags)); + return ret; + } + + public static void switch_core_speech_flush_tts(switch_speech_handle sh) { + freeswitchPINVOKE.switch_core_speech_flush_tts(switch_speech_handle.getCPtr(sh)); + } + + public static void switch_core_speech_text_param_tts(switch_speech_handle sh, string param, string val) { + freeswitchPINVOKE.switch_core_speech_text_param_tts(switch_speech_handle.getCPtr(sh), param, val); + } + + public static void switch_core_speech_numeric_param_tts(switch_speech_handle sh, string param, int val) { + freeswitchPINVOKE.switch_core_speech_numeric_param_tts(switch_speech_handle.getCPtr(sh), param, val); + } + + public static void switch_core_speech_float_param_tts(switch_speech_handle sh, string param, double val) { + freeswitchPINVOKE.switch_core_speech_float_param_tts(switch_speech_handle.getCPtr(sh), param, val); + } + + public static switch_status_t switch_core_speech_read_tts(switch_speech_handle sh, SWIGTYPE_p_void data, SWIGTYPE_p_switch_size_t datalen, SWIGTYPE_p_unsigned_long flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_speech_read_tts(switch_speech_handle.getCPtr(sh), SWIGTYPE_p_void.getCPtr(data), SWIGTYPE_p_switch_size_t.getCPtr(datalen), SWIGTYPE_p_unsigned_long.getCPtr(flags)); + return ret; + } + + public static switch_status_t switch_core_speech_close(switch_speech_handle sh, SWIGTYPE_p_unsigned_long flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_speech_close(switch_speech_handle.getCPtr(sh), SWIGTYPE_p_unsigned_long.getCPtr(flags)); + return ret; + } + + public static switch_status_t switch_core_asr_open(switch_asr_handle ah, string module_name, string codec, int rate, string dest, SWIGTYPE_p_unsigned_long flags, SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_open(switch_asr_handle.getCPtr(ah), module_name, codec, rate, dest, SWIGTYPE_p_unsigned_long.getCPtr(flags), SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static switch_status_t switch_core_asr_close(switch_asr_handle ah, SWIGTYPE_p_unsigned_long flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_close(switch_asr_handle.getCPtr(ah), SWIGTYPE_p_unsigned_long.getCPtr(flags)); + return ret; + } + + public static switch_status_t switch_core_asr_feed(switch_asr_handle ah, SWIGTYPE_p_void data, uint len, SWIGTYPE_p_unsigned_long flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_feed(switch_asr_handle.getCPtr(ah), SWIGTYPE_p_void.getCPtr(data), len, SWIGTYPE_p_unsigned_long.getCPtr(flags)); + return ret; + } + + public static switch_status_t switch_core_asr_check_results(switch_asr_handle ah, SWIGTYPE_p_unsigned_long flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_check_results(switch_asr_handle.getCPtr(ah), SWIGTYPE_p_unsigned_long.getCPtr(flags)); + return ret; + } + + public static switch_status_t switch_core_asr_get_results(switch_asr_handle ah, ref string xmlstr, SWIGTYPE_p_unsigned_long flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_get_results(switch_asr_handle.getCPtr(ah), ref xmlstr, SWIGTYPE_p_unsigned_long.getCPtr(flags)); + return ret; + } + + public static switch_status_t switch_core_asr_load_grammar(switch_asr_handle ah, string grammar, string name) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_load_grammar(switch_asr_handle.getCPtr(ah), grammar, name); + return ret; + } + + public static switch_status_t switch_core_asr_unload_grammar(switch_asr_handle ah, string name) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_unload_grammar(switch_asr_handle.getCPtr(ah), name); + return ret; + } + + public static switch_status_t switch_core_asr_pause(switch_asr_handle ah) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_pause(switch_asr_handle.getCPtr(ah)); + return ret; + } + + public static switch_status_t switch_core_asr_resume(switch_asr_handle ah) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_resume(switch_asr_handle.getCPtr(ah)); + return ret; + } + + public static switch_status_t switch_core_asr_start_input_timers(switch_asr_handle ah) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_asr_start_input_timers(switch_asr_handle.getCPtr(ah)); + return ret; + } + + public static void switch_core_asr_text_param(switch_asr_handle ah, string param, string val) { + freeswitchPINVOKE.switch_core_asr_text_param(switch_asr_handle.getCPtr(ah), param, val); + } + + public static void switch_core_asr_numeric_param(switch_asr_handle ah, string param, int val) { + freeswitchPINVOKE.switch_core_asr_numeric_param(switch_asr_handle.getCPtr(ah), param, val); + } + + public static void switch_core_asr_float_param(switch_asr_handle ah, string param, double val) { + freeswitchPINVOKE.switch_core_asr_float_param(switch_asr_handle.getCPtr(ah), param, val); + } + + public static switch_status_t switch_core_directory_open(switch_directory_handle dh, string module_name, string source, string dsn, string passwd, SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_directory_open(switch_directory_handle.getCPtr(dh), module_name, source, dsn, passwd, SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static switch_status_t switch_core_directory_query(switch_directory_handle dh, string arg1, string query) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_directory_query(switch_directory_handle.getCPtr(dh), arg1, query); + return ret; + } + + public static switch_status_t switch_core_directory_next(switch_directory_handle dh) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_directory_next(switch_directory_handle.getCPtr(dh)); + return ret; + } + + public static switch_status_t switch_core_directory_next_pair(switch_directory_handle dh, ref string var, ref string val) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_directory_next_pair(switch_directory_handle.getCPtr(dh), ref var, ref val); + return ret; + } + + public static switch_status_t switch_core_directory_close(switch_directory_handle dh) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_directory_close(switch_directory_handle.getCPtr(dh)); + return ret; + } + + public static SWIGTYPE_p_FILE switch_core_data_channel(switch_text_channel_t channel) { + IntPtr cPtr = freeswitchPINVOKE.switch_core_data_channel((int)channel); + SWIGTYPE_p_FILE ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_FILE(cPtr, false); + return ret; + } + + public static switch_bool_t switch_core_ready() { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_core_ready(); + return ret; + } + + public static uint switch_core_flags() { + uint ret = freeswitchPINVOKE.switch_core_flags(); + return ret; + } + + public static switch_status_t switch_core_management_exec(string relative_oid, switch_management_action_t action, string data, SWIGTYPE_p_switch_size_t datalen) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_management_exec(relative_oid, (int)action, data, SWIGTYPE_p_switch_size_t.getCPtr(datalen)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static int set_high_priority() { + int ret = freeswitchPINVOKE.set_high_priority(); + return ret; + } + + public static int change_user_group(string user, string group) { + int ret = freeswitchPINVOKE.change_user_group(user, group); + return ret; + } + + public static void switch_core_runtime_loop(int bg) { + freeswitchPINVOKE.switch_core_runtime_loop(bg); + } + + public static switch_status_t switch_core_set_console(string console) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_set_console(console); + return ret; + } + + public static void switch_core_measure_time(SWIGTYPE_p_switch_time_t total_ms, switch_core_time_duration duration) { + freeswitchPINVOKE.switch_core_measure_time(SWIGTYPE_p_switch_time_t.getCPtr(total_ms), switch_core_time_duration.getCPtr(duration)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + } + + public static SWIGTYPE_p_switch_time_t switch_core_uptime() { + SWIGTYPE_p_switch_time_t ret = new SWIGTYPE_p_switch_time_t(freeswitchPINVOKE.switch_core_uptime(), true); + return ret; + } + + public static int switch_core_session_ctl(switch_session_ctl_t cmd, SWIGTYPE_p_void val) { + int ret = freeswitchPINVOKE.switch_core_session_ctl((int)cmd, SWIGTYPE_p_void.getCPtr(val)); + return ret; + } + + public static SWIGTYPE_p_FILE switch_core_get_console() { + IntPtr cPtr = freeswitchPINVOKE.switch_core_get_console(); + SWIGTYPE_p_FILE ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_FILE(cPtr, false); + return ret; + } + + public static void switch_core_set_globals() { + freeswitchPINVOKE.switch_core_set_globals(); + } + + public static byte switch_core_session_compare(SWIGTYPE_p_switch_core_session a, SWIGTYPE_p_switch_core_session b) { + byte ret = freeswitchPINVOKE.switch_core_session_compare(SWIGTYPE_p_switch_core_session.getCPtr(a), SWIGTYPE_p_switch_core_session.getCPtr(b)); + return ret; + } + + public static byte switch_core_session_check_interface(SWIGTYPE_p_switch_core_session session, switch_endpoint_interface endpoint_interface) { + byte ret = freeswitchPINVOKE.switch_core_session_check_interface(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_endpoint_interface.getCPtr(endpoint_interface)); + return ret; + } + + public static SWIGTYPE_p_HashElem switch_core_mime_index() { + IntPtr cPtr = freeswitchPINVOKE.switch_core_mime_index(); + SWIGTYPE_p_HashElem ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_HashElem(cPtr, false); + return ret; + } + + public static string switch_core_mime_ext2type(string ext) { + string ret = freeswitchPINVOKE.switch_core_mime_ext2type(ext); + return ret; + } + + public static switch_status_t switch_core_mime_add_type(string type, string ext) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_mime_add_type(type, ext); + return ret; + } + + public static SWIGTYPE_p_switch_loadable_module_interface switch_loadable_module_create_module_interface(SWIGTYPE_p_apr_pool_t pool, string name) { + IntPtr cPtr = freeswitchPINVOKE.switch_loadable_module_create_module_interface(SWIGTYPE_p_apr_pool_t.getCPtr(pool), name); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + + public static SWIGTYPE_p_void switch_loadable_module_create_interface(SWIGTYPE_p_switch_loadable_module_interface mod, switch_module_interface_name_t iname) { + IntPtr cPtr = freeswitchPINVOKE.switch_loadable_module_create_interface(SWIGTYPE_p_switch_loadable_module_interface.getCPtr(mod), (int)iname); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + + public static SWIGTYPE_p_switch_time_t switch_micro_time_now() { + SWIGTYPE_p_switch_time_t ret = new SWIGTYPE_p_switch_time_t(freeswitchPINVOKE.switch_micro_time_now(), true); + return ret; + } + + public static void switch_core_memory_reclaim() { + freeswitchPINVOKE.switch_core_memory_reclaim(); + } + + public static void switch_core_memory_reclaim_events() { + freeswitchPINVOKE.switch_core_memory_reclaim_events(); + } + + public static void switch_core_memory_reclaim_logger() { + freeswitchPINVOKE.switch_core_memory_reclaim_logger(); + } + + public static void switch_core_memory_reclaim_all() { + freeswitchPINVOKE.switch_core_memory_reclaim_all(); + } + + public static void switch_core_setrlimits() { + freeswitchPINVOKE.switch_core_setrlimits(); + } + + public static SWIGTYPE_p_switch_time_t switch_time_ref() { + SWIGTYPE_p_switch_time_t ret = new SWIGTYPE_p_switch_time_t(freeswitchPINVOKE.switch_time_ref(), true); + return ret; + } + + public static void switch_time_sync() { + freeswitchPINVOKE.switch_time_sync(); + } + + public static SWIGTYPE_p_time_t switch_epoch_time_now(SWIGTYPE_p_time_t t) { + SWIGTYPE_p_time_t ret = new SWIGTYPE_p_time_t(freeswitchPINVOKE.switch_epoch_time_now(SWIGTYPE_p_time_t.getCPtr(t)), true); + return ret; + } + + public static switch_status_t switch_strftime_tz(string tz, string format, string date, uint len, SWIGTYPE_p_switch_time_t thetime) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_strftime_tz(tz, format, date, len, SWIGTYPE_p_switch_time_t.getCPtr(thetime)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_status_t switch_time_exp_tz_name(string tz, SWIGTYPE_p_switch_time_exp_t tm, SWIGTYPE_p_switch_time_t thetime) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_time_exp_tz_name(tz, SWIGTYPE_p_switch_time_exp_t.getCPtr(tm), SWIGTYPE_p_switch_time_t.getCPtr(thetime)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static void switch_load_network_lists(switch_bool_t reload) { + freeswitchPINVOKE.switch_load_network_lists((int)reload); + } + + public static switch_bool_t switch_check_network_list_ip_token(string ip_str, string list_name, ref string token) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_check_network_list_ip_token(ip_str, list_name, ref token); + return ret; + } + + public static void switch_time_set_monotonic(switch_bool_t enable) { + freeswitchPINVOKE.switch_time_set_monotonic((int)enable); + } + + public static void switch_time_set_nanosleep(switch_bool_t enable) { + freeswitchPINVOKE.switch_time_set_nanosleep((int)enable); + } + + public static void switch_time_set_matrix(switch_bool_t enable) { + freeswitchPINVOKE.switch_time_set_matrix((int)enable); + } + + public static void switch_time_set_cond_yield(switch_bool_t enable) { + freeswitchPINVOKE.switch_time_set_cond_yield((int)enable); + } + + public static uint switch_core_min_dtmf_duration(uint duration) { + uint ret = freeswitchPINVOKE.switch_core_min_dtmf_duration(duration); + return ret; + } + + public static uint switch_core_max_dtmf_duration(uint duration) { + uint ret = freeswitchPINVOKE.switch_core_max_dtmf_duration(duration); + return ret; + } + + public static double switch_core_min_idle_cpu(double new_limit) { + double ret = freeswitchPINVOKE.switch_core_min_idle_cpu(new_limit); + return ret; + } + + public static double switch_core_idle_cpu() { + double ret = freeswitchPINVOKE.switch_core_idle_cpu(); + return ret; + } + + public static uint switch_core_default_dtmf_duration(uint duration) { + uint ret = freeswitchPINVOKE.switch_core_default_dtmf_duration(duration); + return ret; + } + + public static switch_status_t switch_console_set_complete(string arg0) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_console_set_complete(arg0); + return ret; + } + + public static switch_status_t switch_console_set_alias(string arg0) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_console_set_alias(arg0); + return ret; + } + + public static int switch_system(string cmd, switch_bool_t wait) { + int ret = freeswitchPINVOKE.switch_system(cmd, (int)wait); + return ret; + } + + public static void switch_cond_yield(SWIGTYPE_p_switch_interval_time_t t) { + freeswitchPINVOKE.switch_cond_yield(SWIGTYPE_p_switch_interval_time_t.getCPtr(t)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + } + + public static void switch_cond_next() { + freeswitchPINVOKE.switch_cond_next(); + } + + public static switch_status_t switch_core_chat_send(string name, string proto, string from, string to, string subject, string body, string type, string hint) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_chat_send(name, proto, from, to, subject, body, type, hint); + return ret; + } + + public static switch_status_t switch_ivr_preprocess_session(SWIGTYPE_p_switch_core_session session, string cmds) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_preprocess_session(SWIGTYPE_p_switch_core_session.getCPtr(session), cmds); + return ret; + } + + public static string switch_cache_db_type_name(switch_cache_db_handle_type_t type) { + string ret = freeswitchPINVOKE.switch_cache_db_type_name((int)type); + return ret; + } + + public static void switch_cache_db_dismiss_db_handle(SWIGTYPE_p_p_switch_cache_db_handle_t dbh) { + freeswitchPINVOKE.switch_cache_db_dismiss_db_handle(SWIGTYPE_p_p_switch_cache_db_handle_t.getCPtr(dbh)); + } + + public static void switch_cache_db_release_db_handle(SWIGTYPE_p_p_switch_cache_db_handle_t dbh) { + freeswitchPINVOKE.switch_cache_db_release_db_handle(SWIGTYPE_p_p_switch_cache_db_handle_t.getCPtr(dbh)); + } + + public static void switch_cache_db_destroy_db_handle(SWIGTYPE_p_p_switch_cache_db_handle_t dbh) { + freeswitchPINVOKE.switch_cache_db_destroy_db_handle(SWIGTYPE_p_p_switch_cache_db_handle_t.getCPtr(dbh)); + } + + public static switch_status_t _switch_cache_db_get_db_handle(SWIGTYPE_p_p_switch_cache_db_handle_t dbh, switch_cache_db_handle_type_t type, switch_cache_db_connection_options_t connection_options, string file, string func, int line) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE._switch_cache_db_get_db_handle(SWIGTYPE_p_p_switch_cache_db_handle_t.getCPtr(dbh), (int)type, switch_cache_db_connection_options_t.getCPtr(connection_options), file, func, line); + return ret; + } + + public static string switch_cache_db_execute_sql2str(switch_cache_db_handle_t dbh, string sql, string str, uint len, ref string err) { + string ret = freeswitchPINVOKE.switch_cache_db_execute_sql2str(switch_cache_db_handle_t.getCPtr(dbh), sql, str, len, ref err); + return ret; + } + + public static switch_status_t switch_cache_db_execute_sql(switch_cache_db_handle_t dbh, string sql, ref string err) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_cache_db_execute_sql(switch_cache_db_handle_t.getCPtr(dbh), sql, ref err); + return ret; + } + + public static switch_status_t switch_cache_db_execute_sql_callback(switch_cache_db_handle_t dbh, string sql, SWIGTYPE_p_f_p_void_int_p_p_char_p_p_char__int callback, SWIGTYPE_p_void pdata, ref string err) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_cache_db_execute_sql_callback(switch_cache_db_handle_t.getCPtr(dbh), sql, SWIGTYPE_p_f_p_void_int_p_p_char_p_p_char__int.getCPtr(callback), SWIGTYPE_p_void.getCPtr(pdata), ref err); + return ret; + } + + public static void switch_cache_db_status(switch_stream_handle stream) { + freeswitchPINVOKE.switch_cache_db_status(switch_stream_handle.getCPtr(stream)); + } + + public static switch_status_t _switch_core_db_handle(SWIGTYPE_p_p_switch_cache_db_handle_t dbh, string file, string func, int line) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE._switch_core_db_handle(SWIGTYPE_p_p_switch_cache_db_handle_t.getCPtr(dbh), file, func, line); + return ret; + } + + public static switch_bool_t switch_cache_db_test_reactive(switch_cache_db_handle_t db, string test_sql, string drop_sql, string reactive_sql) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_cache_db_test_reactive(switch_cache_db_handle_t.getCPtr(db), test_sql, drop_sql, reactive_sql); + return ret; + } + + public static switch_status_t switch_cache_db_persistant_execute(switch_cache_db_handle_t dbh, string sql, uint retries) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_cache_db_persistant_execute(switch_cache_db_handle_t.getCPtr(dbh), sql, retries); + return ret; + } + + public static switch_status_t switch_cache_db_persistant_execute_trans(switch_cache_db_handle_t dbh, string sql, uint retries) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_cache_db_persistant_execute_trans(switch_cache_db_handle_t.getCPtr(dbh), sql, retries); + return ret; + } + + public static void switch_cache_db_detach() { + freeswitchPINVOKE.switch_cache_db_detach(); + } + + public static uint switch_core_debug_level() { + uint ret = freeswitchPINVOKE.switch_core_debug_level(); + return ret; + } + + public static void switch_cache_db_flush_handles() { + freeswitchPINVOKE.switch_cache_db_flush_handles(); + } + + public static string switch_core_banner() { + string ret = freeswitchPINVOKE.switch_core_banner(); + return ret; + } + + public static switch_bool_t switch_core_session_in_thread(SWIGTYPE_p_switch_core_session session) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_core_session_in_thread(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static void switch_console_loop() { + freeswitchPINVOKE.switch_console_loop(); + } + + public static switch_status_t switch_console_stream_raw_write(switch_stream_handle handle, SWIGTYPE_p_unsigned_char data, SWIGTYPE_p_switch_size_t datalen) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_console_stream_raw_write(switch_stream_handle.getCPtr(handle), SWIGTYPE_p_unsigned_char.getCPtr(data), SWIGTYPE_p_switch_size_t.getCPtr(datalen)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_status_t switch_stream_write_file_contents(switch_stream_handle stream, string path) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_stream_write_file_contents(switch_stream_handle.getCPtr(stream), path); + return ret; + } + + public static switch_status_t switch_console_init(SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_console_init(SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static switch_status_t switch_console_shutdown() { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_console_shutdown(); + return ret; + } + + public static switch_status_t switch_console_add_complete_func(string name, SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_p_switch_console_callback_match__switch_status_t cb) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_console_add_complete_func(name, SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_p_switch_console_callback_match__switch_status_t.getCPtr(cb)); + return ret; + } + + public static switch_status_t switch_console_del_complete_func(string name) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_console_del_complete_func(name); + return ret; + } + + public static switch_status_t switch_console_run_complete_func(string func, string line, string last_word, SWIGTYPE_p_p_switch_console_callback_match matches) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_console_run_complete_func(func, line, last_word, SWIGTYPE_p_p_switch_console_callback_match.getCPtr(matches)); + return ret; + } + + public static void switch_console_push_match(SWIGTYPE_p_p_switch_console_callback_match matches, string new_val) { + freeswitchPINVOKE.switch_console_push_match(SWIGTYPE_p_p_switch_console_callback_match.getCPtr(matches), new_val); + } + + public static void switch_console_free_matches(SWIGTYPE_p_p_switch_console_callback_match matches) { + freeswitchPINVOKE.switch_console_free_matches(SWIGTYPE_p_p_switch_console_callback_match.getCPtr(matches)); + } + + public static byte switch_console_complete(string line, string last_word, SWIGTYPE_p_FILE console_out, switch_stream_handle stream, switch_xml xml) { + byte ret = freeswitchPINVOKE.switch_console_complete(line, last_word, SWIGTYPE_p_FILE.getCPtr(console_out), switch_stream_handle.getCPtr(stream), switch_xml.getCPtr(xml)); + return ret; + } + + public static void switch_console_sort_matches(switch_console_callback_match matches) { + freeswitchPINVOKE.switch_console_sort_matches(switch_console_callback_match.getCPtr(matches)); + } + + public static void switch_console_save_history() { + freeswitchPINVOKE.switch_console_save_history(); + } + + public static string switch_console_expand_alias(string cmd, string arg) { + string ret = freeswitchPINVOKE.switch_console_expand_alias(cmd, arg); + return ret; + } + + public static switch_status_t switch_console_execute(string xcmd, int rec, switch_stream_handle istream) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_console_execute(xcmd, rec, switch_stream_handle.getCPtr(istream)); + return ret; + } + + public static int switch_toupper(int c) { + int ret = freeswitchPINVOKE.switch_toupper(c); + return ret; + } + + public static int switch_tolower(int c) { + int ret = freeswitchPINVOKE.switch_tolower(c); + return ret; + } + + public static int switch_isalnum(int c) { + int ret = freeswitchPINVOKE.switch_isalnum(c); + return ret; + } + + public static int switch_isalpha(int c) { + int ret = freeswitchPINVOKE.switch_isalpha(c); + return ret; + } + + public static int switch_iscntrl(int c) { + int ret = freeswitchPINVOKE.switch_iscntrl(c); + return ret; + } + + public static int switch_isdigit(int c) { + int ret = freeswitchPINVOKE.switch_isdigit(c); + return ret; + } + + public static int switch_isgraph(int c) { + int ret = freeswitchPINVOKE.switch_isgraph(c); + return ret; + } + + public static int switch_islower(int c) { + int ret = freeswitchPINVOKE.switch_islower(c); + return ret; + } + + public static int switch_isprint(int c) { + int ret = freeswitchPINVOKE.switch_isprint(c); + return ret; + } + + public static int switch_ispunct(int c) { + int ret = freeswitchPINVOKE.switch_ispunct(c); + return ret; + } + + public static int switch_isspace(int c) { + int ret = freeswitchPINVOKE.switch_isspace(c); + return ret; + } + + public static int switch_isupper(int c) { + int ret = freeswitchPINVOKE.switch_isupper(c); + return ret; + } + + public static int switch_isxdigit(int c) { + int ret = freeswitchPINVOKE.switch_isxdigit(c); + return ret; + } + + public static int _zstr(string s) { + int ret = freeswitchPINVOKE._zstr(s); + return ret; + } + + public static switch_bool_t switch_is_moh(string s) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_is_moh(s); + return ret; + } + + public static string switch_strchr_strict(string arg0, char find, string allowed) { + string ret = freeswitchPINVOKE.switch_strchr_strict(arg0, find, allowed); + return ret; + } + + public static int switch_string_has_escaped_data(string arg0) { + int ret = freeswitchPINVOKE.switch_string_has_escaped_data(arg0); + return ret; + } + + public static switch_status_t switch_b64_encode(SWIGTYPE_p_unsigned_char arg0, SWIGTYPE_p_switch_size_t ilen, SWIGTYPE_p_unsigned_char arg2, SWIGTYPE_p_switch_size_t olen) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_b64_encode(SWIGTYPE_p_unsigned_char.getCPtr(arg0), SWIGTYPE_p_switch_size_t.getCPtr(ilen), SWIGTYPE_p_unsigned_char.getCPtr(arg2), SWIGTYPE_p_switch_size_t.getCPtr(olen)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static SWIGTYPE_p_switch_size_t switch_b64_decode(string arg0, string arg1, SWIGTYPE_p_switch_size_t olen) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_b64_decode(arg0, arg1, SWIGTYPE_p_switch_size_t.getCPtr(olen)), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static string switch_amp_encode(string s, string buf, SWIGTYPE_p_switch_size_t len) { + string ret = freeswitchPINVOKE.switch_amp_encode(s, buf, SWIGTYPE_p_switch_size_t.getCPtr(len)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_bool_t switch_is_digit_string(string s) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_is_digit_string(s); + return ret; + } + + public static SWIGTYPE_p_switch_size_t switch_fd_read_line(int fd, string buf, SWIGTYPE_p_switch_size_t len) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_fd_read_line(fd, buf, SWIGTYPE_p_switch_size_t.getCPtr(len)), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_status_t switch_frame_alloc(SWIGTYPE_p_p_switch_frame frame, SWIGTYPE_p_switch_size_t size) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_frame_alloc(SWIGTYPE_p_p_switch_frame.getCPtr(frame), SWIGTYPE_p_switch_size_t.getCPtr(size)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_status_t switch_frame_dup(switch_frame orig, SWIGTYPE_p_p_switch_frame clone) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_frame_dup(switch_frame.getCPtr(orig), SWIGTYPE_p_p_switch_frame.getCPtr(clone)); + return ret; + } + + public static switch_status_t switch_frame_free(SWIGTYPE_p_p_switch_frame frame) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_frame_free(SWIGTYPE_p_p_switch_frame.getCPtr(frame)); + return ret; + } + + public static switch_status_t switch_resolve_host(string host, string buf, uint buflen) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_resolve_host(host, buf, buflen); + return ret; + } + + public static switch_status_t switch_find_local_ip(string buf, int len, SWIGTYPE_p_int mask, int family) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_find_local_ip(buf, len, SWIGTYPE_p_int.getCPtr(mask), family); + return ret; + } + + public static string get_addr(string buf, SWIGTYPE_p_switch_size_t len, SWIGTYPE_p_sockaddr sa, SWIGTYPE_p_socklen_t salen) { + string ret = freeswitchPINVOKE.get_addr(buf, SWIGTYPE_p_switch_size_t.getCPtr(len), SWIGTYPE_p_sockaddr.getCPtr(sa), SWIGTYPE_p_socklen_t.getCPtr(salen)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static string get_addr6(string buf, SWIGTYPE_p_switch_size_t len, SWIGTYPE_p_sockaddr_in6 sa, SWIGTYPE_p_socklen_t salen) { + string ret = freeswitchPINVOKE.get_addr6(buf, SWIGTYPE_p_switch_size_t.getCPtr(len), SWIGTYPE_p_sockaddr_in6.getCPtr(sa), SWIGTYPE_p_socklen_t.getCPtr(salen)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static int get_addr_int(SWIGTYPE_p_switch_sockaddr_t sa) { + int ret = freeswitchPINVOKE.get_addr_int(SWIGTYPE_p_switch_sockaddr_t.getCPtr(sa)); + return ret; + } + + public static int switch_cmp_addr(SWIGTYPE_p_switch_sockaddr_t sa1, SWIGTYPE_p_switch_sockaddr_t sa2) { + int ret = freeswitchPINVOKE.switch_cmp_addr(SWIGTYPE_p_switch_sockaddr_t.getCPtr(sa1), SWIGTYPE_p_switch_sockaddr_t.getCPtr(sa2)); + return ret; + } + + public static ushort get_port(SWIGTYPE_p_sockaddr sa) { + ushort ret = freeswitchPINVOKE.get_port(SWIGTYPE_p_sockaddr.getCPtr(sa)); + return ret; + } + + public static int switch_build_uri(string uri, SWIGTYPE_p_switch_size_t size, string scheme, string user, SWIGTYPE_p_switch_sockaddr_t sa, int flags) { + int ret = freeswitchPINVOKE.switch_build_uri(uri, SWIGTYPE_p_switch_size_t.getCPtr(size), scheme, user, SWIGTYPE_p_switch_sockaddr_t.getCPtr(sa), flags); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static string switch_priority_name(switch_priority_t priority) { + string ret = freeswitchPINVOKE.switch_priority_name((int)priority); + return ret; + } + + public static char switch_rfc2833_to_char(int arg0) { + char ret = freeswitchPINVOKE.switch_rfc2833_to_char(arg0); + return ret; + } + + public static byte switch_char_to_rfc2833(char key) { + byte ret = freeswitchPINVOKE.switch_char_to_rfc2833(key); + return ret; + } + + public static string switch_sanitize_number(string number) { + string ret = freeswitchPINVOKE.switch_sanitize_number(number); + return ret; + } + + public static switch_bool_t switch_string_var_check(string s, switch_bool_t disable) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_string_var_check(s, (int)disable); + return ret; + } + + public static switch_bool_t switch_string_var_check_const(string s) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_string_var_check_const(s); + return ret; + } + + public static string switch_var_clean_string(string s) { + string ret = freeswitchPINVOKE.switch_var_clean_string(s); + return ret; + } + + public static string switch_clean_string(string s) { + string ret = freeswitchPINVOKE.switch_clean_string(s); + return ret; + } + + public static string switch_safe_strdup(string it) { + string ret = freeswitchPINVOKE.switch_safe_strdup(it); + return ret; + } + + public static string switch_lc_strdup(string it) { + string ret = freeswitchPINVOKE.switch_lc_strdup(it); + return ret; + } + + public static string switch_uc_strdup(string it) { + string ret = freeswitchPINVOKE.switch_uc_strdup(it); + return ret; + } + + public static switch_bool_t switch_strstr(string s, string q) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_strstr(s, q); + return ret; + } + + public static SWIGTYPE_p_switch_time_t switch_str_time(string arg0) { + SWIGTYPE_p_switch_time_t ret = new SWIGTYPE_p_switch_time_t(freeswitchPINVOKE.switch_str_time(arg0), true); + return ret; + } + + public static uint switch_separate_string(string buf, char delim, ref string array, uint arraylen) { + uint ret = freeswitchPINVOKE.switch_separate_string(buf, delim, ref array, arraylen); + return ret; + } + + public static uint switch_separate_string_string(string buf, string delim, ref string array, uint arraylen) { + uint ret = freeswitchPINVOKE.switch_separate_string_string(buf, delim, ref array, arraylen); + return ret; + } + + public static switch_bool_t switch_is_number(string str) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_is_number(str); + return ret; + } + + public static string switch_strip_spaces(string str) { + string ret = freeswitchPINVOKE.switch_strip_spaces(str); + return ret; + } + + public static string switch_strip_commas(string arg0, string arg1, SWIGTYPE_p_switch_size_t len) { + string ret = freeswitchPINVOKE.switch_strip_commas(arg0, arg1, SWIGTYPE_p_switch_size_t.getCPtr(len)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static string switch_strip_nonnumerics(string arg0, string arg1, SWIGTYPE_p_switch_size_t len) { + string ret = freeswitchPINVOKE.switch_strip_nonnumerics(arg0, arg1, SWIGTYPE_p_switch_size_t.getCPtr(len)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static string switch_separate_paren_args(string str) { + string ret = freeswitchPINVOKE.switch_separate_paren_args(str); + return ret; + } + + public static string switch_stristr(string instr, string str) { + string ret = freeswitchPINVOKE.switch_stristr(instr, str); + return ret; + } + + public static switch_bool_t switch_is_lan_addr(string ip) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_is_lan_addr(ip); + return ret; + } + + public static string switch_replace_char(string str, char from, char to, switch_bool_t dup) { + string ret = freeswitchPINVOKE.switch_replace_char(str, from, to, (int)dup); + return ret; + } + + public static switch_bool_t switch_ast2regex(string pat, string rbuf, uint len) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_ast2regex(pat, rbuf, len); + return ret; + } + + public static string switch_escape_char(SWIGTYPE_p_apr_pool_t pool, string arg1, string delim, char esc) { + string ret = freeswitchPINVOKE.switch_escape_char(SWIGTYPE_p_apr_pool_t.getCPtr(pool), arg1, delim, esc); + return ret; + } + + public static string switch_escape_string(string arg0, string arg1, SWIGTYPE_p_switch_size_t outlen) { + string ret = freeswitchPINVOKE.switch_escape_string(arg0, arg1, SWIGTYPE_p_switch_size_t.getCPtr(outlen)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static string switch_escape_string_pool(string arg0, SWIGTYPE_p_apr_pool_t pool) { + string ret = freeswitchPINVOKE.switch_escape_string_pool(arg0, SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static int switch_socket_waitfor(SWIGTYPE_p_switch_pollfd_t poll, int ms) { + int ret = freeswitchPINVOKE.switch_socket_waitfor(SWIGTYPE_p_switch_pollfd_t.getCPtr(poll), ms); + return ret; + } + + public static string switch_cut_path(string arg0) { + string ret = freeswitchPINVOKE.switch_cut_path(arg0); + return ret; + } + + public static string switch_string_replace(string arg0, string search, string replace) { + string ret = freeswitchPINVOKE.switch_string_replace(arg0, search, replace); + return ret; + } + + public static switch_status_t switch_string_match(string arg0, uint string_len, string search, uint search_len) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_string_match(arg0, string_len, search, search_len); + return ret; + } + + public static string switch_util_quote_shell_arg(string arg0) { + string ret = freeswitchPINVOKE.switch_util_quote_shell_arg(arg0); + return ret; + } + + public static string switch_url_encode(string url, string buf, uint len) { + string ret = freeswitchPINVOKE.switch_url_encode(url, buf, len); + return ret; + } + + public static string switch_url_decode(string s) { + string ret = freeswitchPINVOKE.switch_url_decode(s); + return ret; + } + + public static switch_bool_t switch_simple_email(string to, string from, string headers, string body, string file, string convert_cmd, string convert_ext) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_simple_email(to, from, headers, body, file, convert_cmd, convert_ext); + return ret; + } + + public static string switch_find_end_paren(string s, char open, char close) { + string ret = freeswitchPINVOKE.switch_find_end_paren(s, open, close); + return ret; + } + + public static switch_bool_t switch_is_file_path(string file) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_is_file_path(file); + return ret; + } + + public static int switch_parse_cidr(string arg0, SWIGTYPE_p_unsigned_long ip, SWIGTYPE_p_unsigned_long mask, SWIGTYPE_p_unsigned_long bitp) { + int ret = freeswitchPINVOKE.switch_parse_cidr(arg0, SWIGTYPE_p_unsigned_long.getCPtr(ip), SWIGTYPE_p_unsigned_long.getCPtr(mask), SWIGTYPE_p_unsigned_long.getCPtr(bitp)); + return ret; + } + + public static switch_status_t switch_network_list_create(SWIGTYPE_p_p_switch_network_list list, string name, switch_bool_t default_type, SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_network_list_create(SWIGTYPE_p_p_switch_network_list.getCPtr(list), name, (int)default_type, SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static switch_status_t switch_network_list_add_cidr_token(SWIGTYPE_p_switch_network_list list, string cidr_str, switch_bool_t ok, string token) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_network_list_add_cidr_token(SWIGTYPE_p_switch_network_list.getCPtr(list), cidr_str, (int)ok, token); + return ret; + } + + public static switch_status_t switch_network_list_add_host_mask(SWIGTYPE_p_switch_network_list list, string host, string mask_str, switch_bool_t ok) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_network_list_add_host_mask(SWIGTYPE_p_switch_network_list.getCPtr(list), host, mask_str, (int)ok); + return ret; + } + + public static switch_bool_t switch_network_list_validate_ip_token(SWIGTYPE_p_switch_network_list list, uint ip, ref string token) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_network_list_validate_ip_token(SWIGTYPE_p_switch_network_list.getCPtr(list), ip, ref token); + return ret; + } + + public static int switch_number_cmp(string exp, int val) { + int ret = freeswitchPINVOKE.switch_number_cmp(exp, val); + return ret; + } + + public static int switch_split_user_domain(string arg0, ref string user, ref string domain) { + int ret = freeswitchPINVOKE.switch_split_user_domain(arg0, ref user, ref domain); + return ret; + } + + public static switch_caller_extension switch_caller_extension_new(SWIGTYPE_p_switch_core_session session, string extension_name, string extension_number) { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_extension_new(SWIGTYPE_p_switch_core_session.getCPtr(session), extension_name, extension_number); + switch_caller_extension ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_extension(cPtr, false); + return ret; + } + + public static switch_status_t switch_caller_extension_clone(SWIGTYPE_p_p_switch_caller_extension new_ext, switch_caller_extension orig, SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_caller_extension_clone(SWIGTYPE_p_p_switch_caller_extension.getCPtr(new_ext), switch_caller_extension.getCPtr(orig), SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static void switch_caller_extension_add_application(SWIGTYPE_p_switch_core_session session, switch_caller_extension caller_extension, string application_name, string extra_data) { + freeswitchPINVOKE.switch_caller_extension_add_application(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_caller_extension.getCPtr(caller_extension), application_name, extra_data); + } + + public static void switch_caller_extension_add_application_printf(SWIGTYPE_p_switch_core_session session, switch_caller_extension caller_extension, string application_name, string fmt) { + freeswitchPINVOKE.switch_caller_extension_add_application_printf(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_caller_extension.getCPtr(caller_extension), application_name, fmt); + } + + public static string switch_caller_get_field_by_name(switch_caller_profile caller_profile, string name) { + string ret = freeswitchPINVOKE.switch_caller_get_field_by_name(switch_caller_profile.getCPtr(caller_profile), name); + return ret; + } + + public static switch_caller_profile switch_caller_profile_new(SWIGTYPE_p_apr_pool_t pool, string username, string dialplan, string caller_id_name, string caller_id_number, string network_addr, string ani, string aniii, string rdnis, string source, string context, string destination_number) { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_profile_new(SWIGTYPE_p_apr_pool_t.getCPtr(pool), username, dialplan, caller_id_name, caller_id_number, network_addr, ani, aniii, rdnis, source, context, destination_number); + switch_caller_profile ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_profile(cPtr, false); + return ret; + } + + public static switch_caller_profile switch_caller_profile_clone(SWIGTYPE_p_switch_core_session session, switch_caller_profile tocopy) { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_profile_clone(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_caller_profile.getCPtr(tocopy)); + switch_caller_profile ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_profile(cPtr, false); + return ret; + } + + public static switch_caller_profile switch_caller_profile_dup(SWIGTYPE_p_apr_pool_t pool, switch_caller_profile tocopy) { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_profile_dup(SWIGTYPE_p_apr_pool_t.getCPtr(pool), switch_caller_profile.getCPtr(tocopy)); + switch_caller_profile ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_profile(cPtr, false); + return ret; + } + + public static void switch_caller_profile_event_set_data(switch_caller_profile caller_profile, string prefix, switch_event arg2) { + freeswitchPINVOKE.switch_caller_profile_event_set_data(switch_caller_profile.getCPtr(caller_profile), prefix, switch_event.getCPtr(arg2)); + } + + public static switch_channel_state_t switch_channel_get_state(SWIGTYPE_p_switch_channel channel) { + switch_channel_state_t ret = (switch_channel_state_t)freeswitchPINVOKE.switch_channel_get_state(SWIGTYPE_p_switch_channel.getCPtr(channel)); + return ret; + } + + public static switch_channel_state_t switch_channel_get_running_state(SWIGTYPE_p_switch_channel channel) { + switch_channel_state_t ret = (switch_channel_state_t)freeswitchPINVOKE.switch_channel_get_running_state(SWIGTYPE_p_switch_channel.getCPtr(channel)); + return ret; + } + + public static int switch_channel_test_ready(SWIGTYPE_p_switch_channel channel, switch_bool_t check_ready, switch_bool_t check_media) { + int ret = freeswitchPINVOKE.switch_channel_test_ready(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)check_ready, (int)check_media); + return ret; + } + + public static void switch_channel_wait_for_state(SWIGTYPE_p_switch_channel channel, SWIGTYPE_p_switch_channel other_channel, switch_channel_state_t want_state) { + freeswitchPINVOKE.switch_channel_wait_for_state(SWIGTYPE_p_switch_channel.getCPtr(channel), SWIGTYPE_p_switch_channel.getCPtr(other_channel), (int)want_state); + } + + public static void switch_channel_wait_for_state_timeout(SWIGTYPE_p_switch_channel other_channel, switch_channel_state_t want_state, uint timeout) { + freeswitchPINVOKE.switch_channel_wait_for_state_timeout(SWIGTYPE_p_switch_channel.getCPtr(other_channel), (int)want_state, timeout); + } + + public static switch_status_t switch_channel_wait_for_flag(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t want_flag, switch_bool_t pres, uint to, SWIGTYPE_p_switch_channel super_channel) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_wait_for_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)want_flag, (int)pres, to, SWIGTYPE_p_switch_channel.getCPtr(super_channel)); + return ret; + } + + public static switch_channel_state_t switch_channel_perform_set_state(SWIGTYPE_p_switch_channel channel, string file, string func, int line, switch_channel_state_t state) { + switch_channel_state_t ret = (switch_channel_state_t)freeswitchPINVOKE.switch_channel_perform_set_state(SWIGTYPE_p_switch_channel.getCPtr(channel), file, func, line, (int)state); + return ret; + } + + public static switch_channel_state_t switch_channel_perform_set_running_state(SWIGTYPE_p_switch_channel channel, switch_channel_state_t state, string file, string func, int line) { + switch_channel_state_t ret = (switch_channel_state_t)freeswitchPINVOKE.switch_channel_perform_set_running_state(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)state, file, func, line); + return ret; + } + + public static switch_call_cause_t switch_channel_str2cause(string str) { + switch_call_cause_t ret = (switch_call_cause_t)freeswitchPINVOKE.switch_channel_str2cause(str); + return ret; + } + + public static switch_call_cause_t switch_channel_get_cause(SWIGTYPE_p_switch_channel channel) { + switch_call_cause_t ret = (switch_call_cause_t)freeswitchPINVOKE.switch_channel_get_cause(SWIGTYPE_p_switch_channel.getCPtr(channel)); + return ret; + } + + public static switch_call_cause_t switch_channel_cause_q850(switch_call_cause_t cause) { + switch_call_cause_t ret = (switch_call_cause_t)freeswitchPINVOKE.switch_channel_cause_q850((int)cause); + return ret; + } + + public static switch_call_cause_t switch_channel_get_cause_q850(SWIGTYPE_p_switch_channel channel) { + switch_call_cause_t ret = (switch_call_cause_t)freeswitchPINVOKE.switch_channel_get_cause_q850(SWIGTYPE_p_switch_channel.getCPtr(channel)); + return ret; + } + + public static string switch_channel_cause2str(switch_call_cause_t cause) { + string ret = freeswitchPINVOKE.switch_channel_cause2str((int)cause); + return ret; + } + + public static switch_channel_timetable switch_channel_get_timetable(SWIGTYPE_p_switch_channel channel) { + IntPtr cPtr = freeswitchPINVOKE.switch_channel_get_timetable(SWIGTYPE_p_switch_channel.getCPtr(channel)); + switch_channel_timetable ret = (cPtr == IntPtr.Zero) ? null : new switch_channel_timetable(cPtr, false); + return ret; + } + + public static switch_status_t switch_channel_alloc(SWIGTYPE_p_p_switch_channel channel, switch_call_direction_t direction, SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_alloc(SWIGTYPE_p_p_switch_channel.getCPtr(channel), (int)direction, SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static switch_status_t switch_channel_init(SWIGTYPE_p_switch_channel channel, SWIGTYPE_p_switch_core_session session, switch_channel_state_t state, switch_channel_flag_t flag) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_init(SWIGTYPE_p_switch_channel.getCPtr(channel), SWIGTYPE_p_switch_core_session.getCPtr(session), (int)state, (int)flag); + return ret; + } + + public static void switch_channel_perform_presence(SWIGTYPE_p_switch_channel channel, string rpid, string status, string id, string file, string func, int line) { + freeswitchPINVOKE.switch_channel_perform_presence(SWIGTYPE_p_switch_channel.getCPtr(channel), rpid, status, id, file, func, line); + } + + public static void switch_channel_uninit(SWIGTYPE_p_switch_channel channel) { + freeswitchPINVOKE.switch_channel_uninit(SWIGTYPE_p_switch_channel.getCPtr(channel)); + } + + public static void switch_channel_set_caller_profile(SWIGTYPE_p_switch_channel channel, switch_caller_profile caller_profile) { + freeswitchPINVOKE.switch_channel_set_caller_profile(SWIGTYPE_p_switch_channel.getCPtr(channel), switch_caller_profile.getCPtr(caller_profile)); + } + + public static switch_caller_profile switch_channel_get_caller_profile(SWIGTYPE_p_switch_channel channel) { + IntPtr cPtr = freeswitchPINVOKE.switch_channel_get_caller_profile(SWIGTYPE_p_switch_channel.getCPtr(channel)); + switch_caller_profile ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_profile(cPtr, false); + return ret; + } + + public static void switch_channel_set_originator_caller_profile(SWIGTYPE_p_switch_channel channel, switch_caller_profile caller_profile) { + freeswitchPINVOKE.switch_channel_set_originator_caller_profile(SWIGTYPE_p_switch_channel.getCPtr(channel), switch_caller_profile.getCPtr(caller_profile)); + } + + public static void switch_channel_set_hunt_caller_profile(SWIGTYPE_p_switch_channel channel, switch_caller_profile caller_profile) { + freeswitchPINVOKE.switch_channel_set_hunt_caller_profile(SWIGTYPE_p_switch_channel.getCPtr(channel), switch_caller_profile.getCPtr(caller_profile)); + } + + public static switch_caller_profile switch_channel_get_originator_caller_profile(SWIGTYPE_p_switch_channel channel) { + IntPtr cPtr = freeswitchPINVOKE.switch_channel_get_originator_caller_profile(SWIGTYPE_p_switch_channel.getCPtr(channel)); + switch_caller_profile ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_profile(cPtr, false); + return ret; + } + + public static void switch_channel_set_originatee_caller_profile(SWIGTYPE_p_switch_channel channel, switch_caller_profile caller_profile) { + freeswitchPINVOKE.switch_channel_set_originatee_caller_profile(SWIGTYPE_p_switch_channel.getCPtr(channel), switch_caller_profile.getCPtr(caller_profile)); + } + + public static switch_caller_profile switch_channel_get_originatee_caller_profile(SWIGTYPE_p_switch_channel channel) { + IntPtr cPtr = freeswitchPINVOKE.switch_channel_get_originatee_caller_profile(SWIGTYPE_p_switch_channel.getCPtr(channel)); + switch_caller_profile ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_profile(cPtr, false); + return ret; + } + + public static string switch_channel_get_uuid(SWIGTYPE_p_switch_channel channel) { + string ret = freeswitchPINVOKE.switch_channel_get_uuid(SWIGTYPE_p_switch_channel.getCPtr(channel)); + return ret; + } + + public static switch_status_t switch_channel_set_profile_var(SWIGTYPE_p_switch_channel channel, string name, string val) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_set_profile_var(SWIGTYPE_p_switch_channel.getCPtr(channel), name, val); + return ret; + } + + public static switch_status_t switch_channel_set_variable_var_check(SWIGTYPE_p_switch_channel channel, string varname, string value, switch_bool_t var_check) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_set_variable_var_check(SWIGTYPE_p_switch_channel.getCPtr(channel), varname, value, (int)var_check); + 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; + } + + public static switch_status_t switch_channel_set_variable_name_printf(SWIGTYPE_p_switch_channel channel, string val, string fmt) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_set_variable_name_printf(SWIGTYPE_p_switch_channel.getCPtr(channel), val, fmt); + return ret; + } + + public static switch_status_t switch_channel_set_variable_partner_var_check(SWIGTYPE_p_switch_channel channel, string varname, string value, switch_bool_t var_check) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_set_variable_partner_var_check(SWIGTYPE_p_switch_channel.getCPtr(channel), varname, value, (int)var_check); + return ret; + } + + public static string switch_channel_get_variable_partner(SWIGTYPE_p_switch_channel channel, string varname) { + string ret = freeswitchPINVOKE.switch_channel_get_variable_partner(SWIGTYPE_p_switch_channel.getCPtr(channel), varname); + return ret; + } + + public static switch_status_t switch_channel_export_variable_var_check(SWIGTYPE_p_switch_channel channel, string varname, string value, switch_bool_t var_check) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_export_variable_var_check(SWIGTYPE_p_switch_channel.getCPtr(channel), varname, value, (int)var_check); + return ret; + } + + public static switch_status_t switch_channel_export_variable_printf(SWIGTYPE_p_switch_channel channel, string varname, string fmt) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_export_variable_printf(SWIGTYPE_p_switch_channel.getCPtr(channel), varname, fmt); + 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); + return ret; + } + + public static switch_status_t switch_channel_get_variables(SWIGTYPE_p_switch_channel channel, SWIGTYPE_p_p_switch_event arg1) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_get_variables(SWIGTYPE_p_switch_channel.getCPtr(channel), SWIGTYPE_p_p_switch_event.getCPtr(arg1)); + return ret; + } + + public static switch_status_t switch_channel_pass_callee_id(SWIGTYPE_p_switch_channel channel, SWIGTYPE_p_switch_channel other_channel) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_pass_callee_id(SWIGTYPE_p_switch_channel.getCPtr(channel), SWIGTYPE_p_switch_channel.getCPtr(other_channel)); + return ret; + } + + public static switch_event_header switch_channel_variable_first(SWIGTYPE_p_switch_channel channel) { + IntPtr cPtr = freeswitchPINVOKE.switch_channel_variable_first(SWIGTYPE_p_switch_channel.getCPtr(channel)); + switch_event_header ret = (cPtr == IntPtr.Zero) ? null : new switch_event_header(cPtr, false); + return ret; + } + + public static void switch_channel_variable_last(SWIGTYPE_p_switch_channel channel) { + freeswitchPINVOKE.switch_channel_variable_last(SWIGTYPE_p_switch_channel.getCPtr(channel)); + } + + public static void switch_channel_restart(SWIGTYPE_p_switch_channel channel) { + freeswitchPINVOKE.switch_channel_restart(SWIGTYPE_p_switch_channel.getCPtr(channel)); + } + + public static switch_status_t switch_channel_caller_extension_masquerade(SWIGTYPE_p_switch_channel orig_channel, SWIGTYPE_p_switch_channel new_channel, uint offset) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_caller_extension_masquerade(SWIGTYPE_p_switch_channel.getCPtr(orig_channel), SWIGTYPE_p_switch_channel.getCPtr(new_channel), offset); + return ret; + } + + public static void switch_channel_set_caller_extension(SWIGTYPE_p_switch_channel channel, switch_caller_extension caller_extension) { + freeswitchPINVOKE.switch_channel_set_caller_extension(SWIGTYPE_p_switch_channel.getCPtr(channel), switch_caller_extension.getCPtr(caller_extension)); + } + + public static switch_caller_extension switch_channel_get_caller_extension(SWIGTYPE_p_switch_channel channel) { + IntPtr cPtr = freeswitchPINVOKE.switch_channel_get_caller_extension(SWIGTYPE_p_switch_channel.getCPtr(channel)); + switch_caller_extension ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_extension(cPtr, false); + return ret; + } + + public static uint switch_channel_test_flag(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag) { + uint ret = freeswitchPINVOKE.switch_channel_test_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag); + return ret; + } + + public static void switch_channel_set_flag_value(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag, uint value) { + freeswitchPINVOKE.switch_channel_set_flag_value(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag, value); + } + + public static void switch_channel_set_flag_recursive(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag) { + freeswitchPINVOKE.switch_channel_set_flag_recursive(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag); + } + + public static void switch_channel_set_cap_value(SWIGTYPE_p_switch_channel channel, switch_channel_cap_t cap, uint value) { + freeswitchPINVOKE.switch_channel_set_cap_value(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)cap, value); + } + + public static void switch_channel_clear_cap(SWIGTYPE_p_switch_channel channel, switch_channel_cap_t cap) { + freeswitchPINVOKE.switch_channel_clear_cap(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)cap); + } + + public static uint switch_channel_test_cap(SWIGTYPE_p_switch_channel channel, switch_channel_cap_t cap) { + uint ret = freeswitchPINVOKE.switch_channel_test_cap(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)cap); + return ret; + } + + public static switch_bool_t switch_channel_set_flag_partner(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_channel_set_flag_partner(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag); + return ret; + } + + public static switch_bool_t switch_channel_clear_flag_partner(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_channel_clear_flag_partner(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag); + return ret; + } + + public static uint switch_channel_test_flag_partner(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag) { + uint ret = freeswitchPINVOKE.switch_channel_test_flag_partner(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag); + return ret; + } + + public static void switch_channel_set_state_flag(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag) { + freeswitchPINVOKE.switch_channel_set_state_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag); + } + + public static void switch_channel_clear_flag(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag) { + freeswitchPINVOKE.switch_channel_clear_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag); + } + + public static void switch_channel_clear_flag_recursive(SWIGTYPE_p_switch_channel channel, switch_channel_flag_t flag) { + freeswitchPINVOKE.switch_channel_clear_flag_recursive(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)flag); + } + + public static switch_status_t switch_channel_perform_answer(SWIGTYPE_p_switch_channel channel, string file, string func, int line) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_perform_answer(SWIGTYPE_p_switch_channel.getCPtr(channel), file, func, line); + return ret; + } + + public static switch_status_t switch_channel_perform_mark_answered(SWIGTYPE_p_switch_channel channel, string file, string func, int line) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_perform_mark_answered(SWIGTYPE_p_switch_channel.getCPtr(channel), file, func, line); + return ret; + } + + public static switch_status_t switch_channel_perform_ring_ready_value(SWIGTYPE_p_switch_channel channel, switch_ring_ready_t rv, string file, string func, int line) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_perform_ring_ready_value(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)rv, file, func, line); + return ret; + } + + public static switch_status_t switch_channel_perform_pre_answer(SWIGTYPE_p_switch_channel channel, string file, string func, int line) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_perform_pre_answer(SWIGTYPE_p_switch_channel.getCPtr(channel), file, func, line); + return ret; + } + + public static switch_status_t switch_channel_perform_mark_pre_answered(SWIGTYPE_p_switch_channel channel, string file, string func, int line) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_perform_mark_pre_answered(SWIGTYPE_p_switch_channel.getCPtr(channel), file, func, line); + return ret; + } + + public static switch_status_t switch_channel_perform_mark_ring_ready_value(SWIGTYPE_p_switch_channel channel, switch_ring_ready_t rv, string file, string func, int line) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_perform_mark_ring_ready_value(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)rv, file, func, line); + return ret; + } + + public static int switch_channel_add_state_handler(SWIGTYPE_p_switch_channel channel, switch_state_handler_table state_handler) { + int ret = freeswitchPINVOKE.switch_channel_add_state_handler(SWIGTYPE_p_switch_channel.getCPtr(channel), switch_state_handler_table.getCPtr(state_handler)); + return ret; + } + + public static void switch_channel_clear_state_handler(SWIGTYPE_p_switch_channel channel, switch_state_handler_table state_handler) { + freeswitchPINVOKE.switch_channel_clear_state_handler(SWIGTYPE_p_switch_channel.getCPtr(channel), switch_state_handler_table.getCPtr(state_handler)); + } + + public static switch_state_handler_table switch_channel_get_state_handler(SWIGTYPE_p_switch_channel channel, int index) { + IntPtr cPtr = freeswitchPINVOKE.switch_channel_get_state_handler(SWIGTYPE_p_switch_channel.getCPtr(channel), index); + switch_state_handler_table ret = (cPtr == IntPtr.Zero) ? null : new switch_state_handler_table(cPtr, false); + return ret; + } + + public static switch_status_t switch_channel_set_private(SWIGTYPE_p_switch_channel channel, string key, SWIGTYPE_p_void private_info) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_set_private(SWIGTYPE_p_switch_channel.getCPtr(channel), key, SWIGTYPE_p_void.getCPtr(private_info)); + return ret; + } + + public static SWIGTYPE_p_void switch_channel_get_private(SWIGTYPE_p_switch_channel channel, string key) { + IntPtr cPtr = freeswitchPINVOKE.switch_channel_get_private(SWIGTYPE_p_switch_channel.getCPtr(channel), key); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + + public static SWIGTYPE_p_void switch_channel_get_private_partner(SWIGTYPE_p_switch_channel channel, string key) { + IntPtr cPtr = freeswitchPINVOKE.switch_channel_get_private_partner(SWIGTYPE_p_switch_channel.getCPtr(channel), key); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + + public static switch_status_t switch_channel_set_name(SWIGTYPE_p_switch_channel channel, string name) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_set_name(SWIGTYPE_p_switch_channel.getCPtr(channel), name); + return ret; + } + + public static string switch_channel_get_name(SWIGTYPE_p_switch_channel channel) { + string ret = freeswitchPINVOKE.switch_channel_get_name(SWIGTYPE_p_switch_channel.getCPtr(channel)); + return ret; + } + + public static switch_channel_state_t switch_channel_perform_hangup(SWIGTYPE_p_switch_channel channel, string file, string func, int line, switch_call_cause_t hangup_cause) { + switch_channel_state_t ret = (switch_channel_state_t)freeswitchPINVOKE.switch_channel_perform_hangup(SWIGTYPE_p_switch_channel.getCPtr(channel), file, func, line, (int)hangup_cause); + return ret; + } + + public static SWIGTYPE_p_switch_size_t switch_channel_has_dtmf(SWIGTYPE_p_switch_channel channel) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_channel_has_dtmf(SWIGTYPE_p_switch_channel.getCPtr(channel)), true); + return ret; + } + + public static switch_status_t switch_channel_queue_dtmf(SWIGTYPE_p_switch_channel channel, switch_dtmf_t dtmf) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_queue_dtmf(SWIGTYPE_p_switch_channel.getCPtr(channel), switch_dtmf_t.getCPtr(dtmf)); + return ret; + } + + public static switch_status_t switch_channel_queue_dtmf_string(SWIGTYPE_p_switch_channel channel, string dtmf_string) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_queue_dtmf_string(SWIGTYPE_p_switch_channel.getCPtr(channel), dtmf_string); + return ret; + } + + public static switch_status_t switch_channel_dequeue_dtmf(SWIGTYPE_p_switch_channel channel, switch_dtmf_t dtmf) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_dequeue_dtmf(SWIGTYPE_p_switch_channel.getCPtr(channel), switch_dtmf_t.getCPtr(dtmf)); + return ret; + } + + public static void switch_channel_flush_dtmf(SWIGTYPE_p_switch_channel channel) { + freeswitchPINVOKE.switch_channel_flush_dtmf(SWIGTYPE_p_switch_channel.getCPtr(channel)); + } + + public static SWIGTYPE_p_switch_size_t switch_channel_dequeue_dtmf_string(SWIGTYPE_p_switch_channel channel, string dtmf_str, SWIGTYPE_p_switch_size_t len) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_channel_dequeue_dtmf_string(SWIGTYPE_p_switch_channel.getCPtr(channel), dtmf_str, SWIGTYPE_p_switch_size_t.getCPtr(len)), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static string switch_channel_state_name(switch_channel_state_t state) { + string ret = freeswitchPINVOKE.switch_channel_state_name((int)state); + return ret; + } + + public static switch_channel_state_t switch_channel_name_state(string name) { + switch_channel_state_t ret = (switch_channel_state_t)freeswitchPINVOKE.switch_channel_name_state(name); + return ret; + } + + public static void switch_channel_event_set_data(SWIGTYPE_p_switch_channel channel, switch_event arg1) { + freeswitchPINVOKE.switch_channel_event_set_data(SWIGTYPE_p_switch_channel.getCPtr(channel), switch_event.getCPtr(arg1)); + } + + public static void switch_channel_event_set_basic_data(SWIGTYPE_p_switch_channel channel, switch_event arg1) { + freeswitchPINVOKE.switch_channel_event_set_basic_data(SWIGTYPE_p_switch_channel.getCPtr(channel), switch_event.getCPtr(arg1)); + } + + public static void switch_channel_event_set_extended_data(SWIGTYPE_p_switch_channel channel, switch_event arg1) { + freeswitchPINVOKE.switch_channel_event_set_extended_data(SWIGTYPE_p_switch_channel.getCPtr(channel), switch_event.getCPtr(arg1)); + } + + public static string switch_channel_expand_variables(SWIGTYPE_p_switch_channel channel, string arg1) { + string ret = freeswitchPINVOKE.switch_channel_expand_variables(SWIGTYPE_p_switch_channel.getCPtr(channel), arg1); + return ret; + } + + public static string switch_channel_build_param_string(SWIGTYPE_p_switch_channel channel, switch_caller_profile caller_profile, string prefix) { + string ret = freeswitchPINVOKE.switch_channel_build_param_string(SWIGTYPE_p_switch_channel.getCPtr(channel), switch_caller_profile.getCPtr(caller_profile), prefix); + return ret; + } + + public static switch_status_t switch_channel_set_timestamps(SWIGTYPE_p_switch_channel channel) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_channel_set_timestamps(SWIGTYPE_p_switch_channel.getCPtr(channel)); + return ret; + } + + public static void switch_channel_perform_audio_sync(SWIGTYPE_p_switch_channel channel, string file, string func, int line) { + freeswitchPINVOKE.switch_channel_perform_audio_sync(SWIGTYPE_p_switch_channel.getCPtr(channel), file, func, line); + } + + public static void switch_channel_set_private_flag(SWIGTYPE_p_switch_channel channel, uint flags) { + freeswitchPINVOKE.switch_channel_set_private_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + } + + public static void switch_channel_clear_private_flag(SWIGTYPE_p_switch_channel channel, uint flags) { + freeswitchPINVOKE.switch_channel_clear_private_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + } + + public static int switch_channel_test_private_flag(SWIGTYPE_p_switch_channel channel, uint flags) { + int ret = freeswitchPINVOKE.switch_channel_test_private_flag(SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + return ret; + } + + public static void switch_channel_set_app_flag_key(string app, SWIGTYPE_p_switch_channel channel, uint flags) { + freeswitchPINVOKE.switch_channel_set_app_flag_key(app, SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + } + + public static void switch_channel_clear_app_flag_key(string app, SWIGTYPE_p_switch_channel channel, uint flags) { + freeswitchPINVOKE.switch_channel_clear_app_flag_key(app, SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + } + + public static int switch_channel_test_app_flag_key(string app, SWIGTYPE_p_switch_channel channel, uint flags) { + int ret = freeswitchPINVOKE.switch_channel_test_app_flag_key(app, SWIGTYPE_p_switch_channel.getCPtr(channel), flags); + return ret; + } + + public static void switch_channel_set_hangup_time(SWIGTYPE_p_switch_channel channel) { + freeswitchPINVOKE.switch_channel_set_hangup_time(SWIGTYPE_p_switch_channel.getCPtr(channel)); + } + + public static switch_call_direction_t switch_channel_direction(SWIGTYPE_p_switch_channel channel) { + switch_call_direction_t ret = (switch_call_direction_t)freeswitchPINVOKE.switch_channel_direction(SWIGTYPE_p_switch_channel.getCPtr(channel)); + return ret; + } + + public static SWIGTYPE_p_switch_core_session switch_channel_get_session(SWIGTYPE_p_switch_channel channel) { + IntPtr cPtr = freeswitchPINVOKE.switch_channel_get_session(SWIGTYPE_p_switch_channel.getCPtr(channel)); + SWIGTYPE_p_switch_core_session ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_core_session(cPtr, false); + return ret; + } + + public static string switch_channel_get_flag_string(SWIGTYPE_p_switch_channel channel) { + string ret = freeswitchPINVOKE.switch_channel_get_flag_string(SWIGTYPE_p_switch_channel.getCPtr(channel)); + return ret; + } + + public static string switch_channel_get_cap_string(SWIGTYPE_p_switch_channel channel) { + string ret = freeswitchPINVOKE.switch_channel_get_cap_string(SWIGTYPE_p_switch_channel.getCPtr(channel)); + return ret; + } + + public static int switch_channel_state_change_pending(SWIGTYPE_p_switch_channel channel) { + int ret = freeswitchPINVOKE.switch_channel_state_change_pending(SWIGTYPE_p_switch_channel.getCPtr(channel)); + return ret; + } + + public static void switch_channel_perform_set_callstate(SWIGTYPE_p_switch_channel channel, switch_channel_callstate_t callstate, string file, string func, int line) { + freeswitchPINVOKE.switch_channel_perform_set_callstate(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)callstate, file, func, line); + } + + public static switch_channel_callstate_t switch_channel_get_callstate(SWIGTYPE_p_switch_channel channel) { + switch_channel_callstate_t ret = (switch_channel_callstate_t)freeswitchPINVOKE.switch_channel_get_callstate(SWIGTYPE_p_switch_channel.getCPtr(channel)); + return ret; + } + + public static string switch_channel_callstate2str(switch_channel_callstate_t callstate) { + string ret = freeswitchPINVOKE.switch_channel_callstate2str((int)callstate); + return ret; + } + + public static switch_call_cause_t switch_channel_str2callstate(string str) { + switch_call_cause_t ret = (switch_call_cause_t)freeswitchPINVOKE.switch_channel_str2callstate(str); + return ret; + } + + public static void switch_channel_mark_hold(SWIGTYPE_p_switch_channel channel, switch_bool_t on) { + freeswitchPINVOKE.switch_channel_mark_hold(SWIGTYPE_p_switch_channel.getCPtr(channel), (int)on); + } + + public static switch_status_t switch_buffer_create(SWIGTYPE_p_apr_pool_t pool, SWIGTYPE_p_p_switch_buffer buffer, SWIGTYPE_p_switch_size_t max_len) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_buffer_create(SWIGTYPE_p_apr_pool_t.getCPtr(pool), SWIGTYPE_p_p_switch_buffer.getCPtr(buffer), SWIGTYPE_p_switch_size_t.getCPtr(max_len)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_status_t switch_buffer_create_dynamic(SWIGTYPE_p_p_switch_buffer buffer, SWIGTYPE_p_switch_size_t blocksize, SWIGTYPE_p_switch_size_t start_len, SWIGTYPE_p_switch_size_t max_len) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_buffer_create_dynamic(SWIGTYPE_p_p_switch_buffer.getCPtr(buffer), SWIGTYPE_p_switch_size_t.getCPtr(blocksize), SWIGTYPE_p_switch_size_t.getCPtr(start_len), SWIGTYPE_p_switch_size_t.getCPtr(max_len)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static void switch_buffer_add_mutex(SWIGTYPE_p_switch_buffer buffer, SWIGTYPE_p_switch_mutex_t mutex) { + freeswitchPINVOKE.switch_buffer_add_mutex(SWIGTYPE_p_switch_buffer.getCPtr(buffer), SWIGTYPE_p_switch_mutex_t.getCPtr(mutex)); + } + + public static void switch_buffer_lock(SWIGTYPE_p_switch_buffer buffer) { + freeswitchPINVOKE.switch_buffer_lock(SWIGTYPE_p_switch_buffer.getCPtr(buffer)); + } + + public static switch_status_t switch_buffer_trylock(SWIGTYPE_p_switch_buffer buffer) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_buffer_trylock(SWIGTYPE_p_switch_buffer.getCPtr(buffer)); + return ret; + } + + public static void switch_buffer_unlock(SWIGTYPE_p_switch_buffer buffer) { + freeswitchPINVOKE.switch_buffer_unlock(SWIGTYPE_p_switch_buffer.getCPtr(buffer)); + } + + public static SWIGTYPE_p_switch_size_t switch_buffer_len(SWIGTYPE_p_switch_buffer buffer) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_buffer_len(SWIGTYPE_p_switch_buffer.getCPtr(buffer)), true); + return ret; + } + + public static SWIGTYPE_p_switch_size_t switch_buffer_freespace(SWIGTYPE_p_switch_buffer buffer) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_buffer_freespace(SWIGTYPE_p_switch_buffer.getCPtr(buffer)), true); + return ret; + } + + public static SWIGTYPE_p_switch_size_t switch_buffer_inuse(SWIGTYPE_p_switch_buffer buffer) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_buffer_inuse(SWIGTYPE_p_switch_buffer.getCPtr(buffer)), true); + return ret; + } + + public static SWIGTYPE_p_switch_size_t switch_buffer_read(SWIGTYPE_p_switch_buffer buffer, SWIGTYPE_p_void data, SWIGTYPE_p_switch_size_t datalen) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_buffer_read(SWIGTYPE_p_switch_buffer.getCPtr(buffer), SWIGTYPE_p_void.getCPtr(data), SWIGTYPE_p_switch_size_t.getCPtr(datalen)), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static SWIGTYPE_p_switch_size_t switch_buffer_peek(SWIGTYPE_p_switch_buffer buffer, SWIGTYPE_p_void data, SWIGTYPE_p_switch_size_t datalen) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_buffer_peek(SWIGTYPE_p_switch_buffer.getCPtr(buffer), SWIGTYPE_p_void.getCPtr(data), SWIGTYPE_p_switch_size_t.getCPtr(datalen)), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static SWIGTYPE_p_switch_size_t switch_buffer_read_loop(SWIGTYPE_p_switch_buffer buffer, SWIGTYPE_p_void data, SWIGTYPE_p_switch_size_t datalen) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_buffer_read_loop(SWIGTYPE_p_switch_buffer.getCPtr(buffer), SWIGTYPE_p_void.getCPtr(data), SWIGTYPE_p_switch_size_t.getCPtr(datalen)), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static void switch_buffer_set_loops(SWIGTYPE_p_switch_buffer buffer, int loops) { + freeswitchPINVOKE.switch_buffer_set_loops(SWIGTYPE_p_switch_buffer.getCPtr(buffer), loops); + } + + public static SWIGTYPE_p_switch_size_t switch_buffer_write(SWIGTYPE_p_switch_buffer buffer, SWIGTYPE_p_void data, SWIGTYPE_p_switch_size_t datalen) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_buffer_write(SWIGTYPE_p_switch_buffer.getCPtr(buffer), SWIGTYPE_p_void.getCPtr(data), SWIGTYPE_p_switch_size_t.getCPtr(datalen)), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static SWIGTYPE_p_switch_size_t switch_buffer_toss(SWIGTYPE_p_switch_buffer buffer, SWIGTYPE_p_switch_size_t datalen) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_buffer_toss(SWIGTYPE_p_switch_buffer.getCPtr(buffer), SWIGTYPE_p_switch_size_t.getCPtr(datalen)), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static void switch_buffer_zero(SWIGTYPE_p_switch_buffer buffer) { + freeswitchPINVOKE.switch_buffer_zero(SWIGTYPE_p_switch_buffer.getCPtr(buffer)); + } + + public static SWIGTYPE_p_switch_size_t switch_buffer_slide_write(SWIGTYPE_p_switch_buffer buffer, SWIGTYPE_p_void data, SWIGTYPE_p_switch_size_t datalen) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_buffer_slide_write(SWIGTYPE_p_switch_buffer.getCPtr(buffer), SWIGTYPE_p_void.getCPtr(data), SWIGTYPE_p_switch_size_t.getCPtr(datalen)), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static void switch_buffer_destroy(SWIGTYPE_p_p_switch_buffer buffer) { + freeswitchPINVOKE.switch_buffer_destroy(SWIGTYPE_p_p_switch_buffer.getCPtr(buffer)); + } + + public static SWIGTYPE_p_switch_size_t switch_buffer_zwrite(SWIGTYPE_p_switch_buffer buffer, SWIGTYPE_p_void data, SWIGTYPE_p_switch_size_t datalen) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_buffer_zwrite(SWIGTYPE_p_switch_buffer.getCPtr(buffer), SWIGTYPE_p_void.getCPtr(data), SWIGTYPE_p_switch_size_t.getCPtr(datalen)), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_status_t switch_event_init(SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_init(SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static switch_status_t switch_event_shutdown() { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_shutdown(); + return ret; + } + + public static switch_status_t switch_event_create_subclass_detailed(string file, string func, int line, SWIGTYPE_p_p_switch_event arg3, switch_event_types_t event_id, string subclass_name) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_create_subclass_detailed(file, func, line, SWIGTYPE_p_p_switch_event.getCPtr(arg3), (int)event_id, subclass_name); + return ret; + } + + public static switch_status_t switch_event_set_priority(switch_event arg0, switch_priority_t priority) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_set_priority(switch_event.getCPtr(arg0), (int)priority); + 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); + return ret; + } + + public static string switch_event_get_body(switch_event arg0) { + string ret = freeswitchPINVOKE.switch_event_get_body(switch_event.getCPtr(arg0)); + return ret; + } + + public static switch_status_t switch_event_set_subclass_name(switch_event arg0, string subclass_name) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_set_subclass_name(switch_event.getCPtr(arg0), subclass_name); + return ret; + } + + public static switch_status_t switch_event_add_header_string(switch_event arg0, switch_stack_t stack, string header_name, string data) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_add_header_string(switch_event.getCPtr(arg0), (int)stack, header_name, data); + return ret; + } + + public static switch_status_t switch_event_del_header_val(switch_event arg0, string header_name, string val) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_del_header_val(switch_event.getCPtr(arg0), header_name, val); + return ret; + } + + public static void switch_event_destroy(SWIGTYPE_p_p_switch_event arg0) { + freeswitchPINVOKE.switch_event_destroy(SWIGTYPE_p_p_switch_event.getCPtr(arg0)); + } + + public static switch_status_t switch_event_dup(SWIGTYPE_p_p_switch_event arg0, switch_event todup) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_dup(SWIGTYPE_p_p_switch_event.getCPtr(arg0), switch_event.getCPtr(todup)); + return ret; + } + + public static void switch_event_merge(switch_event arg0, switch_event tomerge) { + freeswitchPINVOKE.switch_event_merge(switch_event.getCPtr(arg0), switch_event.getCPtr(tomerge)); + } + + public static switch_status_t switch_event_fire_detailed(string file, string func, int line, SWIGTYPE_p_p_switch_event arg3, SWIGTYPE_p_void user_data) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_fire_detailed(file, func, line, SWIGTYPE_p_p_switch_event.getCPtr(arg3), SWIGTYPE_p_void.getCPtr(user_data)); + return ret; + } + + public static void switch_event_prep_for_delivery_detailed(string file, string func, int line, switch_event arg3) { + freeswitchPINVOKE.switch_event_prep_for_delivery_detailed(file, func, line, switch_event.getCPtr(arg3)); + } + + public static switch_status_t switch_event_bind(string id, switch_event_types_t arg1, string subclass_name, SWIGTYPE_p_f_p_switch_event__void callback, SWIGTYPE_p_void user_data) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_bind(id, (int)arg1, subclass_name, SWIGTYPE_p_f_p_switch_event__void.getCPtr(callback), SWIGTYPE_p_void.getCPtr(user_data)); + return ret; + } + + public static switch_status_t switch_event_bind_removable(string id, switch_event_types_t arg1, string subclass_name, SWIGTYPE_p_f_p_switch_event__void callback, SWIGTYPE_p_void user_data, SWIGTYPE_p_p_switch_event_node node) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_bind_removable(id, (int)arg1, subclass_name, SWIGTYPE_p_f_p_switch_event__void.getCPtr(callback), SWIGTYPE_p_void.getCPtr(user_data), SWIGTYPE_p_p_switch_event_node.getCPtr(node)); + return ret; + } + + public static switch_status_t switch_event_unbind(SWIGTYPE_p_p_switch_event_node node) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_unbind(SWIGTYPE_p_p_switch_event_node.getCPtr(node)); + return ret; + } + + public static switch_status_t switch_event_unbind_callback(SWIGTYPE_p_f_p_switch_event__void callback) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_unbind_callback(SWIGTYPE_p_f_p_switch_event__void.getCPtr(callback)); + return ret; + } + + public static string switch_event_name(switch_event_types_t arg0) { + string ret = freeswitchPINVOKE.switch_event_name((int)arg0); + return ret; + } + + public static switch_status_t switch_name_event(string name, SWIGTYPE_p_switch_event_types_t type) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_name_event(name, SWIGTYPE_p_switch_event_types_t.getCPtr(type)); + return ret; + } + + public static switch_status_t switch_event_reserve_subclass_detailed(string owner, string subclass_name) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_reserve_subclass_detailed(owner, subclass_name); + return ret; + } + + public static switch_status_t switch_event_free_subclass_detailed(string owner, string subclass_name) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_free_subclass_detailed(owner, subclass_name); + return ret; + } + + public static switch_status_t switch_event_serialize(switch_event arg0, ref string str, switch_bool_t encode) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_serialize(switch_event.getCPtr(arg0), ref str, (int)encode); + return ret; + } + + public static switch_status_t switch_event_serialize_json(switch_event arg0, ref string str) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_serialize_json(switch_event.getCPtr(arg0), ref str); + return ret; + } + + public static switch_status_t switch_event_create_json(SWIGTYPE_p_p_switch_event arg0, string json) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_create_json(SWIGTYPE_p_p_switch_event.getCPtr(arg0), json); + return ret; + } + + public static switch_status_t switch_event_create_brackets(string data, char a, char b, char c, SWIGTYPE_p_p_switch_event arg4, ref string new_data) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_create_brackets(data, a, b, c, SWIGTYPE_p_p_switch_event.getCPtr(arg4), ref new_data); + return ret; + } + + public static switch_status_t switch_event_running() { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_running(); + return ret; + } + + public static string switch_event_expand_headers(switch_event arg0, string arg1) { + string ret = freeswitchPINVOKE.switch_event_expand_headers(switch_event.getCPtr(arg0), arg1); + return ret; + } + + public static switch_status_t switch_event_create_pres_in_detailed(string file, string func, int line, string proto, string login, string from, string from_domain, string status, string event_type, string alt_event_type, int event_count, string unique_id, string channel_state, string answer_state, string call_direction) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_create_pres_in_detailed(file, func, line, proto, login, from, from_domain, status, event_type, alt_event_type, event_count, unique_id, channel_state, answer_state, call_direction); + return ret; + } + + public static switch_status_t switch_event_create_plain(SWIGTYPE_p_p_switch_event arg0, switch_event_types_t event_id) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_event_create_plain(SWIGTYPE_p_p_switch_event.getCPtr(arg0), (int)event_id); + return ret; + } + + public static void switch_event_deliver(SWIGTYPE_p_p_switch_event arg0) { + freeswitchPINVOKE.switch_event_deliver(SWIGTYPE_p_p_switch_event.getCPtr(arg0)); + } + + public static string switch_event_build_param_string(switch_event arg0, string prefix, SWIGTYPE_p_switch_hash vars_map) { + string ret = freeswitchPINVOKE.switch_event_build_param_string(switch_event.getCPtr(arg0), prefix, SWIGTYPE_p_switch_hash.getCPtr(vars_map)); + return ret; + } + + public static switch_status_t switch_resample_perform_create(SWIGTYPE_p_p_switch_audio_resampler_t new_resampler, uint from_rate, uint to_rate, uint to_size, int quality, uint channels, string file, string func, int line) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_resample_perform_create(SWIGTYPE_p_p_switch_audio_resampler_t.getCPtr(new_resampler), from_rate, to_rate, to_size, quality, channels, file, func, line); + return ret; + } + + public static void switch_resample_destroy(SWIGTYPE_p_p_switch_audio_resampler_t resampler) { + freeswitchPINVOKE.switch_resample_destroy(SWIGTYPE_p_p_switch_audio_resampler_t.getCPtr(resampler)); + } + + public static uint switch_resample_process(switch_audio_resampler_t resampler, SWIGTYPE_p_short src, uint srclen) { + uint ret = freeswitchPINVOKE.switch_resample_process(switch_audio_resampler_t.getCPtr(resampler), SWIGTYPE_p_short.getCPtr(src), srclen); + return ret; + } + + public static SWIGTYPE_p_switch_size_t switch_float_to_short(SWIGTYPE_p_float f, SWIGTYPE_p_short s, SWIGTYPE_p_switch_size_t len) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_float_to_short(SWIGTYPE_p_float.getCPtr(f), SWIGTYPE_p_short.getCPtr(s), SWIGTYPE_p_switch_size_t.getCPtr(len)), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static int switch_char_to_float(string c, SWIGTYPE_p_float f, int len) { + int ret = freeswitchPINVOKE.switch_char_to_float(c, SWIGTYPE_p_float.getCPtr(f), len); + return ret; + } + + public static int switch_float_to_char(SWIGTYPE_p_float f, string c, int len) { + int ret = freeswitchPINVOKE.switch_float_to_char(SWIGTYPE_p_float.getCPtr(f), c, len); + return ret; + } + + public static int switch_short_to_float(SWIGTYPE_p_short s, SWIGTYPE_p_float f, int len) { + int ret = freeswitchPINVOKE.switch_short_to_float(SWIGTYPE_p_short.getCPtr(s), SWIGTYPE_p_float.getCPtr(f), len); + return ret; + } + + public static void switch_swap_linear(SWIGTYPE_p_short buf, int len) { + freeswitchPINVOKE.switch_swap_linear(SWIGTYPE_p_short.getCPtr(buf), len); + } + + public static void switch_generate_sln_silence(SWIGTYPE_p_short data, uint samples, uint divisor) { + freeswitchPINVOKE.switch_generate_sln_silence(SWIGTYPE_p_short.getCPtr(data), samples, divisor); + } + + public static void switch_change_sln_volume(SWIGTYPE_p_short data, uint samples, int vol) { + freeswitchPINVOKE.switch_change_sln_volume(SWIGTYPE_p_short.getCPtr(data), samples, vol); + } + + public static uint switch_merge_sln(SWIGTYPE_p_short data, uint samples, SWIGTYPE_p_short other_data, uint other_samples) { + uint ret = freeswitchPINVOKE.switch_merge_sln(SWIGTYPE_p_short.getCPtr(data), samples, SWIGTYPE_p_short.getCPtr(other_data), other_samples); + return ret; + } + + public static void switch_mux_channels(SWIGTYPE_p_short data, SWIGTYPE_p_switch_size_t samples, uint channels) { + freeswitchPINVOKE.switch_mux_channels(SWIGTYPE_p_short.getCPtr(data), SWIGTYPE_p_switch_size_t.getCPtr(samples), channels); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + } + + public static switch_status_t switch_ivr_deactivate_unicast(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_deactivate_unicast(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_ivr_activate_unicast(SWIGTYPE_p_switch_core_session session, string local_ip, ushort local_port, string remote_ip, ushort remote_port, string transport, string flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_activate_unicast(SWIGTYPE_p_switch_core_session.getCPtr(session), local_ip, local_port, remote_ip, remote_port, transport, flags); + return ret; + } + + public static switch_status_t switch_ivr_generate_xml_cdr(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_xml xml_cdr) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_generate_xml_cdr(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_xml.getCPtr(xml_cdr)); + return ret; + } + + public static int switch_ivr_set_xml_profile_data(switch_xml xml, switch_caller_profile caller_profile, int off) { + int ret = freeswitchPINVOKE.switch_ivr_set_xml_profile_data(switch_xml.getCPtr(xml), switch_caller_profile.getCPtr(caller_profile), off); + return ret; + } + + public static int switch_ivr_set_xml_chan_vars(switch_xml xml, SWIGTYPE_p_switch_channel channel, int off) { + int ret = freeswitchPINVOKE.switch_ivr_set_xml_chan_vars(switch_xml.getCPtr(xml), SWIGTYPE_p_switch_channel.getCPtr(channel), off); + return ret; + } + + public static switch_status_t switch_ivr_parse_event(SWIGTYPE_p_switch_core_session session, switch_event arg1) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_parse_event(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_event.getCPtr(arg1)); + return ret; + } + + public static switch_status_t switch_ivr_parse_all_events(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_parse_all_events(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_ivr_parse_next_event(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_parse_next_event(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_ivr_parse_all_messages(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_parse_all_messages(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_ivr_sleep(SWIGTYPE_p_switch_core_session session, uint ms, switch_bool_t sync, switch_input_args_t args) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_sleep(SWIGTYPE_p_switch_core_session.getCPtr(session), ms, (int)sync, switch_input_args_t.getCPtr(args)); + return ret; + } + + public static switch_status_t switch_ivr_park(SWIGTYPE_p_switch_core_session session, switch_input_args_t args) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_park(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_input_args_t.getCPtr(args)); + return ret; + } + + public static switch_status_t switch_ivr_collect_digits_callback(SWIGTYPE_p_switch_core_session session, switch_input_args_t args, uint digit_timeout, uint abs_timeout) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_collect_digits_callback(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_input_args_t.getCPtr(args), digit_timeout, abs_timeout); + return ret; + } + + public static switch_status_t switch_ivr_collect_digits_count(SWIGTYPE_p_switch_core_session session, string buf, SWIGTYPE_p_switch_size_t buflen, SWIGTYPE_p_switch_size_t maxdigits, string terminators, string terminator, uint first_timeout, uint digit_timeout, uint abs_timeout) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_collect_digits_count(SWIGTYPE_p_switch_core_session.getCPtr(session), buf, SWIGTYPE_p_switch_size_t.getCPtr(buflen), SWIGTYPE_p_switch_size_t.getCPtr(maxdigits), terminators, terminator, first_timeout, digit_timeout, abs_timeout); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_status_t switch_ivr_detect_speech(SWIGTYPE_p_switch_core_session session, string mod_name, string grammar, string name, string dest, switch_asr_handle ah) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_detect_speech(SWIGTYPE_p_switch_core_session.getCPtr(session), mod_name, grammar, name, dest, switch_asr_handle.getCPtr(ah)); + return ret; + } + + public static switch_status_t switch_ivr_stop_detect_speech(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_stop_detect_speech(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_ivr_pause_detect_speech(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_pause_detect_speech(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_ivr_resume_detect_speech(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_resume_detect_speech(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_ivr_detect_speech_load_grammar(SWIGTYPE_p_switch_core_session session, string grammar, string name) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_detect_speech_load_grammar(SWIGTYPE_p_switch_core_session.getCPtr(session), grammar, name); + return ret; + } + + public static switch_status_t switch_ivr_detect_speech_unload_grammar(SWIGTYPE_p_switch_core_session session, string name) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_detect_speech_unload_grammar(SWIGTYPE_p_switch_core_session.getCPtr(session), name); + return ret; + } + + public static switch_status_t switch_ivr_set_param_detect_speech(SWIGTYPE_p_switch_core_session session, string name, string val) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_set_param_detect_speech(SWIGTYPE_p_switch_core_session.getCPtr(session), name, val); + return ret; + } + + public static switch_status_t switch_ivr_record_session(SWIGTYPE_p_switch_core_session session, string file, uint limit, switch_file_handle fh) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_record_session(SWIGTYPE_p_switch_core_session.getCPtr(session), file, limit, switch_file_handle.getCPtr(fh)); + return ret; + } + + public static switch_status_t switch_ivr_eavesdrop_session(SWIGTYPE_p_switch_core_session session, string uuid, string require_group, uint flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_eavesdrop_session(SWIGTYPE_p_switch_core_session.getCPtr(session), uuid, require_group, flags); + return ret; + } + + public static switch_status_t switch_ivr_displace_session(SWIGTYPE_p_switch_core_session session, string file, uint limit, string flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_displace_session(SWIGTYPE_p_switch_core_session.getCPtr(session), file, limit, flags); + return ret; + } + + public static switch_status_t switch_ivr_stop_displace_session(SWIGTYPE_p_switch_core_session session, string file) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_stop_displace_session(SWIGTYPE_p_switch_core_session.getCPtr(session), file); + return ret; + } + + public static switch_status_t switch_ivr_stop_record_session(SWIGTYPE_p_switch_core_session session, string file) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_stop_record_session(SWIGTYPE_p_switch_core_session.getCPtr(session), file); + return ret; + } + + public static switch_status_t switch_ivr_session_audio(SWIGTYPE_p_switch_core_session session, string cmd, string direction, int level) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_session_audio(SWIGTYPE_p_switch_core_session.getCPtr(session), cmd, direction, level); + return ret; + } + + public static switch_status_t switch_ivr_stop_session_audio(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_stop_session_audio(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_ivr_inband_dtmf_session(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_inband_dtmf_session(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_ivr_stop_inband_dtmf_session(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_stop_inband_dtmf_session(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_ivr_inband_dtmf_generate_session(SWIGTYPE_p_switch_core_session session, switch_bool_t read_stream) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_inband_dtmf_generate_session(SWIGTYPE_p_switch_core_session.getCPtr(session), (int)read_stream); + return ret; + } + + public static switch_status_t switch_ivr_stop_inband_dtmf_generate_session(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_stop_inband_dtmf_generate_session(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static void switch_ivr_session_echo(SWIGTYPE_p_switch_core_session session, switch_input_args_t args) { + freeswitchPINVOKE.switch_ivr_session_echo(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_input_args_t.getCPtr(args)); + } + + public static switch_status_t switch_ivr_stop_tone_detect_session(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_stop_tone_detect_session(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_ivr_tone_detect_session(SWIGTYPE_p_switch_core_session session, string key, string tone_spec, string flags, SWIGTYPE_p_time_t timeout, int hits, string app, string data, SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char__switch_bool_t callback) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_tone_detect_session(SWIGTYPE_p_switch_core_session.getCPtr(session), key, tone_spec, flags, SWIGTYPE_p_time_t.getCPtr(timeout), hits, app, data, SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char__switch_bool_t.getCPtr(callback)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_status_t switch_ivr_play_file(SWIGTYPE_p_switch_core_session session, switch_file_handle fh, string file, switch_input_args_t args) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_play_file(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_file_handle.getCPtr(fh), file, switch_input_args_t.getCPtr(args)); + return ret; + } + + public static switch_status_t switch_ivr_wait_for_silence(SWIGTYPE_p_switch_core_session session, uint thresh, uint silence_hits, uint listen_hits, uint timeout_ms, string file) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_wait_for_silence(SWIGTYPE_p_switch_core_session.getCPtr(session), thresh, silence_hits, listen_hits, timeout_ms, file); + return ret; + } + + public static switch_status_t switch_ivr_gentones(SWIGTYPE_p_switch_core_session session, string script, int loops, switch_input_args_t args) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_gentones(SWIGTYPE_p_switch_core_session.getCPtr(session), script, loops, switch_input_args_t.getCPtr(args)); + return ret; + } + + public static switch_status_t switch_ivr_record_file(SWIGTYPE_p_switch_core_session session, switch_file_handle fh, string file, switch_input_args_t args, uint limit) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_record_file(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_file_handle.getCPtr(fh), file, switch_input_args_t.getCPtr(args), limit); + return ret; + } + + public static switch_status_t switch_play_and_get_digits(SWIGTYPE_p_switch_core_session session, uint min_digits, uint max_digits, uint max_tries, uint timeout, string valid_terminators, string audio_file, string bad_input_audio_file, string var_name, string digit_buffer, uint digit_buffer_length, string digits_regex) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_play_and_get_digits(SWIGTYPE_p_switch_core_session.getCPtr(session), min_digits, max_digits, max_tries, timeout, valid_terminators, audio_file, bad_input_audio_file, var_name, digit_buffer, digit_buffer_length, digits_regex); + return ret; + } + + public static switch_status_t switch_ivr_speak_text_handle(SWIGTYPE_p_switch_core_session session, switch_speech_handle sh, switch_codec codec, switch_timer timer, string text, switch_input_args_t args) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_speak_text_handle(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_speech_handle.getCPtr(sh), switch_codec.getCPtr(codec), switch_timer.getCPtr(timer), text, switch_input_args_t.getCPtr(args)); + return ret; + } + + public static void switch_ivr_clear_speech_cache(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_ivr_clear_speech_cache(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static switch_status_t switch_ivr_speak_text(SWIGTYPE_p_switch_core_session session, string tts_name, string voice_name, string text, switch_input_args_t args) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_speak_text(SWIGTYPE_p_switch_core_session.getCPtr(session), tts_name, voice_name, text, switch_input_args_t.getCPtr(args)); + return ret; + } + + public static switch_status_t switch_ivr_originate(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_core_session bleg, SWIGTYPE_p_switch_call_cause_t cause, string bridgeto, uint timelimit_sec, switch_state_handler_table table, string cid_name_override, string cid_num_override, switch_caller_profile caller_profile_override, switch_event ovars, uint flags, SWIGTYPE_p_switch_call_cause_t cancel_cause) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_originate(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_core_session.getCPtr(bleg), SWIGTYPE_p_switch_call_cause_t.getCPtr(cause), bridgeto, timelimit_sec, switch_state_handler_table.getCPtr(table), cid_name_override, cid_num_override, switch_caller_profile.getCPtr(caller_profile_override), switch_event.getCPtr(ovars), flags, SWIGTYPE_p_switch_call_cause_t.getCPtr(cancel_cause)); + return ret; + } + + public static switch_status_t switch_ivr_enterprise_originate(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_p_switch_core_session bleg, SWIGTYPE_p_switch_call_cause_t cause, string bridgeto, uint timelimit_sec, switch_state_handler_table table, string cid_name_override, string cid_num_override, switch_caller_profile caller_profile_override, switch_event ovars, uint flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_enterprise_originate(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_p_switch_core_session.getCPtr(bleg), SWIGTYPE_p_switch_call_cause_t.getCPtr(cause), bridgeto, timelimit_sec, switch_state_handler_table.getCPtr(table), cid_name_override, cid_num_override, switch_caller_profile.getCPtr(caller_profile_override), switch_event.getCPtr(ovars), flags); + return ret; + } + + public static void switch_ivr_bridge_display(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_switch_core_session peer_session) { + freeswitchPINVOKE.switch_ivr_bridge_display(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_switch_core_session.getCPtr(peer_session)); + } + + public static switch_status_t switch_ivr_multi_threaded_bridge(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_switch_core_session peer_session, SWIGTYPE_p_f_p_switch_core_session_p_void_enum_switch_input_type_t_p_void_unsigned_int__switch_status_t dtmf_callback, SWIGTYPE_p_void session_data, SWIGTYPE_p_void peer_session_data) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_multi_threaded_bridge(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_switch_core_session.getCPtr(peer_session), SWIGTYPE_p_f_p_switch_core_session_p_void_enum_switch_input_type_t_p_void_unsigned_int__switch_status_t.getCPtr(dtmf_callback), SWIGTYPE_p_void.getCPtr(session_data), SWIGTYPE_p_void.getCPtr(peer_session_data)); + return ret; + } + + public static switch_status_t switch_ivr_signal_bridge(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_switch_core_session peer_session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_signal_bridge(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_switch_core_session.getCPtr(peer_session)); + return ret; + } + + public static switch_status_t switch_ivr_session_transfer(SWIGTYPE_p_switch_core_session session, string extension, string dialplan, string context) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_session_transfer(SWIGTYPE_p_switch_core_session.getCPtr(session), extension, dialplan, context); + return ret; + } + + public static uint switch_ivr_schedule_transfer(SWIGTYPE_p_time_t runtime, string uuid, string extension, string dialplan, string context) { + uint ret = freeswitchPINVOKE.switch_ivr_schedule_transfer(SWIGTYPE_p_time_t.getCPtr(runtime), uuid, extension, dialplan, context); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static uint switch_ivr_schedule_hangup(SWIGTYPE_p_time_t runtime, string uuid, switch_call_cause_t cause, switch_bool_t bleg) { + uint ret = freeswitchPINVOKE.switch_ivr_schedule_hangup(SWIGTYPE_p_time_t.getCPtr(runtime), uuid, (int)cause, (int)bleg); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_status_t switch_ivr_uuid_bridge(string originator_uuid, string originatee_uuid) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_uuid_bridge(originator_uuid, originatee_uuid); + return ret; + } + + public static switch_status_t switch_ivr_media(string uuid, uint flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_media(uuid, flags); + return ret; + } + + public static switch_status_t switch_ivr_nomedia(string uuid, uint flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_nomedia(uuid, flags); + return ret; + } + + public static switch_status_t switch_ivr_hold_uuid(string uuid, string message, switch_bool_t moh) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_hold_uuid(uuid, message, (int)moh); + return ret; + } + + public static switch_status_t switch_ivr_unhold_uuid(string uuid) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_unhold_uuid(uuid); + return ret; + } + + public static switch_status_t switch_ivr_hold(SWIGTYPE_p_switch_core_session session, string message, switch_bool_t moh) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_hold(SWIGTYPE_p_switch_core_session.getCPtr(session), message, (int)moh); + return ret; + } + + public static switch_status_t switch_ivr_unhold(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_unhold(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static uint switch_ivr_schedule_broadcast(SWIGTYPE_p_time_t runtime, string uuid, string path, uint flags) { + uint ret = freeswitchPINVOKE.switch_ivr_schedule_broadcast(SWIGTYPE_p_time_t.getCPtr(runtime), uuid, path, flags); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_status_t switch_ivr_broadcast(string uuid, string path, uint flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_broadcast(uuid, path, flags); + return ret; + } + + public static switch_status_t switch_ivr_transfer_variable(SWIGTYPE_p_switch_core_session sessa, SWIGTYPE_p_switch_core_session sessb, string var) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_transfer_variable(SWIGTYPE_p_switch_core_session.getCPtr(sessa), SWIGTYPE_p_switch_core_session.getCPtr(sessb), var); + return ret; + } + + public static switch_status_t switch_ivr_digit_stream_parser_new(SWIGTYPE_p_apr_pool_t pool, SWIGTYPE_p_p_switch_ivr_digit_stream_parser parser) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_digit_stream_parser_new(SWIGTYPE_p_apr_pool_t.getCPtr(pool), SWIGTYPE_p_p_switch_ivr_digit_stream_parser.getCPtr(parser)); + return ret; + } + + public static switch_status_t switch_ivr_digit_stream_parser_destroy(SWIGTYPE_p_switch_ivr_digit_stream_parser parser) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_digit_stream_parser_destroy(SWIGTYPE_p_switch_ivr_digit_stream_parser.getCPtr(parser)); + return ret; + } + + public static switch_status_t switch_ivr_digit_stream_new(SWIGTYPE_p_switch_ivr_digit_stream_parser parser, SWIGTYPE_p_p_switch_ivr_digit_stream stream) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_digit_stream_new(SWIGTYPE_p_switch_ivr_digit_stream_parser.getCPtr(parser), SWIGTYPE_p_p_switch_ivr_digit_stream.getCPtr(stream)); + return ret; + } + + public static switch_status_t switch_ivr_digit_stream_destroy(SWIGTYPE_p_p_switch_ivr_digit_stream stream) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_digit_stream_destroy(SWIGTYPE_p_p_switch_ivr_digit_stream.getCPtr(stream)); + return ret; + } + + public static switch_status_t switch_ivr_digit_stream_parser_set_event(SWIGTYPE_p_switch_ivr_digit_stream_parser parser, string digits, SWIGTYPE_p_void data) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_digit_stream_parser_set_event(SWIGTYPE_p_switch_ivr_digit_stream_parser.getCPtr(parser), digits, SWIGTYPE_p_void.getCPtr(data)); + return ret; + } + + public static switch_status_t switch_ivr_digit_stream_parser_del_event(SWIGTYPE_p_switch_ivr_digit_stream_parser parser, string digits) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_digit_stream_parser_del_event(SWIGTYPE_p_switch_ivr_digit_stream_parser.getCPtr(parser), digits); + return ret; + } + + public static SWIGTYPE_p_void switch_ivr_digit_stream_parser_feed(SWIGTYPE_p_switch_ivr_digit_stream_parser parser, SWIGTYPE_p_switch_ivr_digit_stream stream, char digit) { + IntPtr cPtr = freeswitchPINVOKE.switch_ivr_digit_stream_parser_feed(SWIGTYPE_p_switch_ivr_digit_stream_parser.getCPtr(parser), SWIGTYPE_p_switch_ivr_digit_stream.getCPtr(stream), digit); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + + public static switch_status_t switch_ivr_digit_stream_reset(SWIGTYPE_p_switch_ivr_digit_stream stream) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_digit_stream_reset(SWIGTYPE_p_switch_ivr_digit_stream.getCPtr(stream)); + return ret; + } + + public static switch_status_t switch_ivr_digit_stream_parser_set_terminator(SWIGTYPE_p_switch_ivr_digit_stream_parser parser, char digit) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_digit_stream_parser_set_terminator(SWIGTYPE_p_switch_ivr_digit_stream_parser.getCPtr(parser), digit); + return ret; + } + + public static switch_status_t switch_ivr_menu_init(SWIGTYPE_p_p_switch_ivr_menu new_menu, SWIGTYPE_p_switch_ivr_menu main, string name, string greeting_sound, string short_greeting_sound, string invalid_sound, string exit_sound, string confirm_macro, string confirm_key, string tts_engine, string tts_voice, int confirm_attempts, int inter_timeout, int digit_len, int timeout, int max_failures, int max_timeouts, SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_menu_init(SWIGTYPE_p_p_switch_ivr_menu.getCPtr(new_menu), SWIGTYPE_p_switch_ivr_menu.getCPtr(main), name, greeting_sound, short_greeting_sound, invalid_sound, exit_sound, confirm_macro, confirm_key, tts_engine, tts_voice, confirm_attempts, inter_timeout, digit_len, timeout, max_failures, max_timeouts, SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static switch_status_t switch_ivr_menu_bind_action(SWIGTYPE_p_switch_ivr_menu menu, switch_ivr_action_t ivr_action, string arg, string bind) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_menu_bind_action(SWIGTYPE_p_switch_ivr_menu.getCPtr(menu), (int)ivr_action, arg, bind); + return ret; + } + + public static switch_status_t switch_ivr_menu_bind_function(SWIGTYPE_p_switch_ivr_menu menu, SWIGTYPE_p_f_p_switch_ivr_menu_p_char_p_char_size_t_p_void__switch_ivr_action_t function, string arg, string bind) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_menu_bind_function(SWIGTYPE_p_switch_ivr_menu.getCPtr(menu), SWIGTYPE_p_f_p_switch_ivr_menu_p_char_p_char_size_t_p_void__switch_ivr_action_t.getCPtr(function), arg, bind); + return ret; + } + + public static switch_status_t switch_ivr_menu_execute(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_switch_ivr_menu stack, string name, SWIGTYPE_p_void obj) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_menu_execute(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_switch_ivr_menu.getCPtr(stack), name, SWIGTYPE_p_void.getCPtr(obj)); + return ret; + } + + public static switch_status_t switch_ivr_menu_stack_free(SWIGTYPE_p_switch_ivr_menu stack) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_menu_stack_free(SWIGTYPE_p_switch_ivr_menu.getCPtr(stack)); + return ret; + } + + public static switch_status_t switch_ivr_menu_stack_xml_build(SWIGTYPE_p_switch_ivr_menu_xml_ctx xml_menu_ctx, SWIGTYPE_p_p_switch_ivr_menu menu_stack, switch_xml xml_menus, switch_xml xml_menu) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_menu_stack_xml_build(SWIGTYPE_p_switch_ivr_menu_xml_ctx.getCPtr(xml_menu_ctx), SWIGTYPE_p_p_switch_ivr_menu.getCPtr(menu_stack), switch_xml.getCPtr(xml_menus), switch_xml.getCPtr(xml_menu)); + return ret; + } + + public static switch_status_t switch_ivr_menu_str2action(string action_name, SWIGTYPE_p_switch_ivr_action_t action) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_menu_str2action(action_name, SWIGTYPE_p_switch_ivr_action_t.getCPtr(action)); + return ret; + } + + public static switch_status_t switch_ivr_menu_stack_xml_add_custom(SWIGTYPE_p_switch_ivr_menu_xml_ctx xml_menu_ctx, string name, SWIGTYPE_p_f_p_switch_ivr_menu_p_char_p_char_size_t_p_void__switch_ivr_action_t function) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_menu_stack_xml_add_custom(SWIGTYPE_p_switch_ivr_menu_xml_ctx.getCPtr(xml_menu_ctx), name, SWIGTYPE_p_f_p_switch_ivr_menu_p_char_p_char_size_t_p_void__switch_ivr_action_t.getCPtr(function)); + return ret; + } + + public static switch_status_t switch_ivr_menu_stack_xml_init(SWIGTYPE_p_p_switch_ivr_menu_xml_ctx xml_menu_ctx, SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_menu_stack_xml_init(SWIGTYPE_p_p_switch_ivr_menu_xml_ctx.getCPtr(xml_menu_ctx), SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static switch_status_t switch_ivr_phrase_macro_event(SWIGTYPE_p_switch_core_session session, string macro_name, string data, switch_event arg3, string lang, switch_input_args_t args) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_phrase_macro_event(SWIGTYPE_p_switch_core_session.getCPtr(session), macro_name, data, switch_event.getCPtr(arg3), lang, switch_input_args_t.getCPtr(args)); + return ret; + } + + public static void switch_ivr_delay_echo(SWIGTYPE_p_switch_core_session session, uint delay_ms) { + freeswitchPINVOKE.switch_ivr_delay_echo(SWIGTYPE_p_switch_core_session.getCPtr(session), delay_ms); + } + + public static switch_status_t switch_ivr_find_bridged_uuid(string uuid, string b_uuid, SWIGTYPE_p_switch_size_t blen) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_find_bridged_uuid(uuid, b_uuid, SWIGTYPE_p_switch_size_t.getCPtr(blen)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static void switch_ivr_intercept_session(SWIGTYPE_p_switch_core_session session, string uuid, switch_bool_t bleg) { + freeswitchPINVOKE.switch_ivr_intercept_session(SWIGTYPE_p_switch_core_session.getCPtr(session), uuid, (int)bleg); + } + + public static void switch_ivr_park_session(SWIGTYPE_p_switch_core_session session) { + freeswitchPINVOKE.switch_ivr_park_session(SWIGTYPE_p_switch_core_session.getCPtr(session)); + } + + public static switch_status_t switch_ivr_wait_for_answer(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_switch_core_session peer_session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_wait_for_answer(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_switch_core_session.getCPtr(peer_session)); + return ret; + } + + public static switch_status_t switch_ivr_read(SWIGTYPE_p_switch_core_session session, uint min_digits, uint max_digits, string prompt_audio_file, string var_name, string digit_buffer, SWIGTYPE_p_switch_size_t digit_buffer_length, uint timeout, string valid_terminators) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_read(SWIGTYPE_p_switch_core_session.getCPtr(session), min_digits, max_digits, prompt_audio_file, var_name, digit_buffer, SWIGTYPE_p_switch_size_t.getCPtr(digit_buffer_length), timeout, valid_terminators); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_status_t switch_ivr_block_dtmf_session(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_block_dtmf_session(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_ivr_unblock_dtmf_session(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_unblock_dtmf_session(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t switch_ivr_bind_dtmf_meta_session(SWIGTYPE_p_switch_core_session session, uint key, uint bind_flags, string app) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_bind_dtmf_meta_session(SWIGTYPE_p_switch_core_session.getCPtr(session), key, bind_flags, app); + return ret; + } + + public static switch_status_t switch_ivr_unbind_dtmf_meta_session(SWIGTYPE_p_switch_core_session session, uint key) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_unbind_dtmf_meta_session(SWIGTYPE_p_switch_core_session.getCPtr(session), key); + return ret; + } + + public static switch_status_t switch_ivr_soft_hold(SWIGTYPE_p_switch_core_session session, string unhold_key, string moh_a, string moh_b) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_soft_hold(SWIGTYPE_p_switch_core_session.getCPtr(session), unhold_key, moh_a, moh_b); + return ret; + } + + public static switch_status_t switch_ivr_say(SWIGTYPE_p_switch_core_session session, string tosay, string module_name, string say_type, string say_method, string say_gender, switch_input_args_t args) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_say(SWIGTYPE_p_switch_core_session.getCPtr(session), tosay, module_name, say_type, say_method, say_gender, switch_input_args_t.getCPtr(args)); + return ret; + } + + public static switch_say_method_t switch_ivr_get_say_method_by_name(string name) { + switch_say_method_t ret = (switch_say_method_t)freeswitchPINVOKE.switch_ivr_get_say_method_by_name(name); + return ret; + } + + public static switch_say_gender_t switch_ivr_get_say_gender_by_name(string name) { + switch_say_gender_t ret = (switch_say_gender_t)freeswitchPINVOKE.switch_ivr_get_say_gender_by_name(name); + return ret; + } + + public static switch_say_type_t switch_ivr_get_say_type_by_name(string name) { + switch_say_type_t ret = (switch_say_type_t)freeswitchPINVOKE.switch_ivr_get_say_type_by_name(name); + return ret; + } + + public static switch_status_t switch_ivr_say_spell(SWIGTYPE_p_switch_core_session session, string tosay, switch_say_args_t say_args, switch_input_args_t args) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_say_spell(SWIGTYPE_p_switch_core_session.getCPtr(session), tosay, switch_say_args_t.getCPtr(say_args), switch_input_args_t.getCPtr(args)); + return ret; + } + + public static switch_status_t switch_ivr_say_ip(SWIGTYPE_p_switch_core_session session, string tosay, SWIGTYPE_p_f_p_switch_core_session_p_char_p_switch_say_args_t_p_switch_input_args_t__switch_status_t number_func, switch_say_args_t say_args, switch_input_args_t args) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_say_ip(SWIGTYPE_p_switch_core_session.getCPtr(session), tosay, SWIGTYPE_p_f_p_switch_core_session_p_char_p_switch_say_args_t_p_switch_input_args_t__switch_status_t.getCPtr(number_func), switch_say_args_t.getCPtr(say_args), switch_input_args_t.getCPtr(args)); + return ret; + } + + public static switch_status_t switch_ivr_set_user(SWIGTYPE_p_switch_core_session session, string data) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_set_user(SWIGTYPE_p_switch_core_session.getCPtr(session), data); + return ret; + } + + public static switch_status_t switch_ivr_sound_test(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_ivr_sound_test(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static void switch_process_import(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_switch_channel peer_channel, string varname) { + freeswitchPINVOKE.switch_process_import(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_switch_channel.getCPtr(peer_channel), varname); + } + + public static switch_bool_t switch_ivr_uuid_exists(string uuid) { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_ivr_uuid_exists(uuid); + return ret; + } + + public static switch_status_t switch_rtp_add_crypto_key(SWIGTYPE_p_switch_rtp rtp_session, switch_rtp_crypto_direction_t direction, uint index, switch_rtp_crypto_key_type_t type, SWIGTYPE_p_unsigned_char key, SWIGTYPE_p_switch_size_t keylen) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_add_crypto_key(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), (int)direction, index, (int)type, SWIGTYPE_p_unsigned_char.getCPtr(key), SWIGTYPE_p_switch_size_t.getCPtr(keylen)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static void switch_rtp_get_random(SWIGTYPE_p_void buf, uint len) { + freeswitchPINVOKE.switch_rtp_get_random(SWIGTYPE_p_void.getCPtr(buf), len); + } + + public static void switch_rtp_init(SWIGTYPE_p_apr_pool_t pool) { + freeswitchPINVOKE.switch_rtp_init(SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + } + + public static void switch_rtp_shutdown() { + freeswitchPINVOKE.switch_rtp_shutdown(); + } + + public static ushort switch_rtp_set_start_port(ushort port) { + ushort ret = freeswitchPINVOKE.switch_rtp_set_start_port(port); + return ret; + } + + public static switch_status_t switch_rtp_set_ssrc(SWIGTYPE_p_switch_rtp rtp_session, uint ssrc) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_set_ssrc(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), ssrc); + return ret; + } + + public static ushort switch_rtp_set_end_port(ushort port) { + ushort ret = freeswitchPINVOKE.switch_rtp_set_end_port(port); + return ret; + } + + public static ushort switch_rtp_request_port(string ip) { + ushort ret = freeswitchPINVOKE.switch_rtp_request_port(ip); + return ret; + } + + public static void switch_rtp_release_port(string ip, ushort port) { + freeswitchPINVOKE.switch_rtp_release_port(ip, port); + } + + public static switch_status_t switch_rtp_set_interval(SWIGTYPE_p_switch_rtp rtp_session, uint ms_per_packet, uint samples_per_interval) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_set_interval(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), ms_per_packet, samples_per_interval); + return ret; + } + + public static switch_status_t switch_rtp_change_interval(SWIGTYPE_p_switch_rtp rtp_session, uint ms_per_packet, uint samples_per_interval) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_change_interval(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), ms_per_packet, samples_per_interval); + return ret; + } + + public static switch_status_t switch_rtp_create(SWIGTYPE_p_p_switch_rtp new_rtp_session, byte payload, uint samples_per_interval, uint ms_per_packet, uint flags, string timer_name, ref string err, SWIGTYPE_p_apr_pool_t pool) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_create(SWIGTYPE_p_p_switch_rtp.getCPtr(new_rtp_session), payload, samples_per_interval, ms_per_packet, flags, timer_name, ref err, SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + return ret; + } + + public static SWIGTYPE_p_switch_rtp switch_rtp_new(string rx_host, ushort rx_port, string tx_host, ushort tx_port, byte payload, uint samples_per_interval, uint ms_per_packet, uint flags, string timer_name, ref string err, SWIGTYPE_p_apr_pool_t pool) { + IntPtr cPtr = freeswitchPINVOKE.switch_rtp_new(rx_host, rx_port, tx_host, tx_port, payload, samples_per_interval, ms_per_packet, flags, timer_name, ref err, SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + SWIGTYPE_p_switch_rtp ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_rtp(cPtr, false); + return ret; + } + + public static switch_status_t switch_rtp_set_remote_address(SWIGTYPE_p_switch_rtp rtp_session, string host, ushort port, ushort remote_rtcp_port, switch_bool_t change_adv_addr, ref string err) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_set_remote_address(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), host, port, remote_rtcp_port, (int)change_adv_addr, ref err); + return ret; + } + + public static string switch_rtp_get_remote_host(SWIGTYPE_p_switch_rtp rtp_session) { + string ret = freeswitchPINVOKE.switch_rtp_get_remote_host(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)); + return ret; + } + + public static ushort switch_rtp_get_remote_port(SWIGTYPE_p_switch_rtp rtp_session) { + ushort ret = freeswitchPINVOKE.switch_rtp_get_remote_port(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)); + return ret; + } + + public static void switch_rtp_reset_media_timer(SWIGTYPE_p_switch_rtp rtp_session) { + freeswitchPINVOKE.switch_rtp_reset_media_timer(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)); + } + + public static void switch_rtp_set_max_missed_packets(SWIGTYPE_p_switch_rtp rtp_session, uint max) { + freeswitchPINVOKE.switch_rtp_set_max_missed_packets(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), max); + } + + public static switch_status_t switch_rtp_udptl_mode(SWIGTYPE_p_switch_rtp rtp_session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_udptl_mode(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)); + return ret; + } + + public static switch_status_t switch_rtp_set_local_address(SWIGTYPE_p_switch_rtp rtp_session, string host, ushort port, ref string err) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_set_local_address(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), host, port, ref err); + return ret; + } + + public static void switch_rtp_kill_socket(SWIGTYPE_p_switch_rtp rtp_session) { + freeswitchPINVOKE.switch_rtp_kill_socket(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)); + } + + public static void switch_rtp_break(SWIGTYPE_p_switch_rtp rtp_session) { + freeswitchPINVOKE.switch_rtp_break(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)); + } + + public static byte switch_rtp_ready(SWIGTYPE_p_switch_rtp rtp_session) { + byte ret = freeswitchPINVOKE.switch_rtp_ready(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)); + return ret; + } + + public static void switch_rtp_destroy(SWIGTYPE_p_p_switch_rtp rtp_session) { + freeswitchPINVOKE.switch_rtp_destroy(SWIGTYPE_p_p_switch_rtp.getCPtr(rtp_session)); + } + + public static switch_status_t switch_rtp_activate_ice(SWIGTYPE_p_switch_rtp rtp_session, string login, string rlogin) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_activate_ice(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), login, rlogin); + return ret; + } + + public static switch_status_t switch_rtp_activate_rtcp(SWIGTYPE_p_switch_rtp rtp_session, int send_rate, ushort remote_port) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_activate_rtcp(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), send_rate, remote_port); + return ret; + } + + public static switch_status_t switch_rtp_activate_jitter_buffer(SWIGTYPE_p_switch_rtp rtp_session, uint queue_frames) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_activate_jitter_buffer(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), queue_frames); + return ret; + } + + public static void switch_rtp_set_flag(SWIGTYPE_p_switch_rtp rtp_session, uint flags) { + freeswitchPINVOKE.switch_rtp_set_flag(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), flags); + } + + public static uint switch_rtp_test_flag(SWIGTYPE_p_switch_rtp rtp_session, uint flags) { + uint ret = freeswitchPINVOKE.switch_rtp_test_flag(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), flags); + return ret; + } + + public static void switch_rtp_clear_flag(SWIGTYPE_p_switch_rtp rtp_session, uint flags) { + freeswitchPINVOKE.switch_rtp_clear_flag(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), flags); + } + + public static SWIGTYPE_p_switch_socket_t switch_rtp_get_rtp_socket(SWIGTYPE_p_switch_rtp rtp_session) { + IntPtr cPtr = freeswitchPINVOKE.switch_rtp_get_rtp_socket(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)); + SWIGTYPE_p_switch_socket_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_socket_t(cPtr, false); + return ret; + } + + public static uint switch_rtp_get_default_samples_per_interval(SWIGTYPE_p_switch_rtp rtp_session) { + uint ret = freeswitchPINVOKE.switch_rtp_get_default_samples_per_interval(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)); + return ret; + } + + public static void switch_rtp_set_default_payload(SWIGTYPE_p_switch_rtp rtp_session, byte payload) { + freeswitchPINVOKE.switch_rtp_set_default_payload(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), payload); + } + + public static uint switch_rtp_get_default_payload(SWIGTYPE_p_switch_rtp rtp_session) { + uint ret = freeswitchPINVOKE.switch_rtp_get_default_payload(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)); + return ret; + } + + public static void switch_rtp_set_invald_handler(SWIGTYPE_p_switch_rtp rtp_session, SWIGTYPE_p_f_p_switch_rtp_p_switch_socket_t_p_void_switch_size_t_p_switch_sockaddr_t__void on_invalid) { + freeswitchPINVOKE.switch_rtp_set_invald_handler(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), SWIGTYPE_p_f_p_switch_rtp_p_switch_socket_t_p_void_switch_size_t_p_switch_sockaddr_t__void.getCPtr(on_invalid)); + } + + public static switch_status_t switch_rtp_read(SWIGTYPE_p_switch_rtp rtp_session, SWIGTYPE_p_void data, SWIGTYPE_p_unsigned_long datalen, SWIGTYPE_p_unsigned_char payload_type, SWIGTYPE_p_unsigned_long flags, uint io_flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_read(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), SWIGTYPE_p_void.getCPtr(data), SWIGTYPE_p_unsigned_long.getCPtr(datalen), SWIGTYPE_p_unsigned_char.getCPtr(payload_type), SWIGTYPE_p_unsigned_long.getCPtr(flags), io_flags); + return ret; + } + + public static switch_status_t switch_rtp_queue_rfc2833(SWIGTYPE_p_switch_rtp rtp_session, switch_dtmf_t dtmf) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_queue_rfc2833(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), switch_dtmf_t.getCPtr(dtmf)); + return ret; + } + + public static switch_status_t switch_rtp_queue_rfc2833_in(SWIGTYPE_p_switch_rtp rtp_session, switch_dtmf_t dtmf) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_queue_rfc2833_in(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), switch_dtmf_t.getCPtr(dtmf)); + return ret; + } + + public static SWIGTYPE_p_switch_size_t switch_rtp_has_dtmf(SWIGTYPE_p_switch_rtp rtp_session) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_rtp_has_dtmf(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)), true); + return ret; + } + + public static SWIGTYPE_p_switch_size_t switch_rtp_dequeue_dtmf(SWIGTYPE_p_switch_rtp rtp_session, switch_dtmf_t dtmf) { + SWIGTYPE_p_switch_size_t ret = new SWIGTYPE_p_switch_size_t(freeswitchPINVOKE.switch_rtp_dequeue_dtmf(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), switch_dtmf_t.getCPtr(dtmf)), true); + return ret; + } + + public static switch_status_t switch_rtp_zerocopy_read(SWIGTYPE_p_switch_rtp rtp_session, SWIGTYPE_p_p_void data, SWIGTYPE_p_unsigned_long datalen, SWIGTYPE_p_unsigned_char payload_type, SWIGTYPE_p_unsigned_long flags, uint io_flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_zerocopy_read(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), SWIGTYPE_p_p_void.getCPtr(data), SWIGTYPE_p_unsigned_long.getCPtr(datalen), SWIGTYPE_p_unsigned_char.getCPtr(payload_type), SWIGTYPE_p_unsigned_long.getCPtr(flags), io_flags); + return ret; + } + + public static switch_status_t switch_rtp_zerocopy_read_frame(SWIGTYPE_p_switch_rtp rtp_session, switch_frame frame, uint io_flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_zerocopy_read_frame(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), switch_frame.getCPtr(frame), io_flags); + return ret; + } + + public static switch_status_t switch_rtcp_zerocopy_read_frame(SWIGTYPE_p_switch_rtp rtp_session, SWIGTYPE_p_switch_rtcp_frame frame) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtcp_zerocopy_read_frame(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), SWIGTYPE_p_switch_rtcp_frame.getCPtr(frame)); + return ret; + } + + public static void rtp_flush_read_buffer(SWIGTYPE_p_switch_rtp rtp_session, switch_rtp_flush_t flush) { + freeswitchPINVOKE.rtp_flush_read_buffer(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), (int)flush); + } + + public static switch_status_t switch_rtp_enable_vad(SWIGTYPE_p_switch_rtp rtp_session, SWIGTYPE_p_switch_core_session session, switch_codec codec, uint flags) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_enable_vad(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec.getCPtr(codec), flags); + return ret; + } + + public static switch_status_t switch_rtp_disable_vad(SWIGTYPE_p_switch_rtp rtp_session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_disable_vad(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)); + return ret; + } + + public static int switch_rtp_write_frame(SWIGTYPE_p_switch_rtp rtp_session, switch_frame frame) { + int ret = freeswitchPINVOKE.switch_rtp_write_frame(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), switch_frame.getCPtr(frame)); + return ret; + } + + public static int switch_rtp_write_manual(SWIGTYPE_p_switch_rtp rtp_session, SWIGTYPE_p_void data, uint datalen, byte m, byte payload, uint ts, SWIGTYPE_p_unsigned_long flags) { + int ret = freeswitchPINVOKE.switch_rtp_write_manual(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), SWIGTYPE_p_void.getCPtr(data), datalen, m, payload, ts, SWIGTYPE_p_unsigned_long.getCPtr(flags)); + return ret; + } + + public static uint switch_rtp_get_ssrc(SWIGTYPE_p_switch_rtp rtp_session) { + uint ret = freeswitchPINVOKE.switch_rtp_get_ssrc(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)); + return ret; + } + + public static void switch_rtp_set_private(SWIGTYPE_p_switch_rtp rtp_session, SWIGTYPE_p_void private_data) { + freeswitchPINVOKE.switch_rtp_set_private(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), SWIGTYPE_p_void.getCPtr(private_data)); + } + + public static void switch_rtp_set_telephony_event(SWIGTYPE_p_switch_rtp rtp_session, byte te) { + freeswitchPINVOKE.switch_rtp_set_telephony_event(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), te); + } + + public static void switch_rtp_set_telephony_recv_event(SWIGTYPE_p_switch_rtp rtp_session, byte te) { + freeswitchPINVOKE.switch_rtp_set_telephony_recv_event(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), te); + } + + public static void switch_rtp_set_cng_pt(SWIGTYPE_p_switch_rtp rtp_session, byte pt) { + freeswitchPINVOKE.switch_rtp_set_cng_pt(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), pt); + } + + public static SWIGTYPE_p_void switch_rtp_get_private(SWIGTYPE_p_switch_rtp rtp_session) { + IntPtr cPtr = freeswitchPINVOKE.switch_rtp_get_private(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session)); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + + public static switch_status_t switch_rtp_activate_stun_ping(SWIGTYPE_p_switch_rtp rtp_session, string stun_ip, ushort stun_port, uint packet_count, switch_bool_t funny) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_rtp_activate_stun_ping(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), stun_ip, stun_port, packet_count, (int)funny); + return ret; + } + + public static void switch_rtp_intentional_bugs(SWIGTYPE_p_switch_rtp rtp_session, switch_rtp_bug_flag_t bugs) { + freeswitchPINVOKE.switch_rtp_intentional_bugs(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), (int)bugs); + } + + public static switch_rtp_stats_t switch_rtp_get_stats(SWIGTYPE_p_switch_rtp rtp_session, SWIGTYPE_p_apr_pool_t pool) { + IntPtr cPtr = freeswitchPINVOKE.switch_rtp_get_stats(SWIGTYPE_p_switch_rtp.getCPtr(rtp_session), SWIGTYPE_p_apr_pool_t.getCPtr(pool)); + switch_rtp_stats_t ret = (cPtr == IntPtr.Zero) ? null : new switch_rtp_stats_t(cPtr, false); + return ret; + } + + public static switch_status_t switch_log_init(SWIGTYPE_p_apr_pool_t pool, switch_bool_t colorize) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_log_init(SWIGTYPE_p_apr_pool_t.getCPtr(pool), (int)colorize); + return ret; + } + + public static switch_status_t switch_log_shutdown() { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_log_shutdown(); + return ret; + } + + public static switch_status_t switch_log_bind_logger(SWIGTYPE_p_f_p_q_const__switch_log_node_t_enum_switch_log_level_t__switch_status_t function, switch_log_level_t level, switch_bool_t is_console) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_log_bind_logger(SWIGTYPE_p_f_p_q_const__switch_log_node_t_enum_switch_log_level_t__switch_status_t.getCPtr(function), (int)level, (int)is_console); + return ret; + } + + public static switch_status_t switch_log_unbind_logger(SWIGTYPE_p_f_p_q_const__switch_log_node_t_enum_switch_log_level_t__switch_status_t function) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_log_unbind_logger(SWIGTYPE_p_f_p_q_const__switch_log_node_t_enum_switch_log_level_t__switch_status_t.getCPtr(function)); + return ret; + } + + public static string switch_log_level2str(switch_log_level_t level) { + string ret = freeswitchPINVOKE.switch_log_level2str((int)level); + return ret; + } + + public static switch_log_level_t switch_log_str2level(string str) { + switch_log_level_t ret = (switch_log_level_t)freeswitchPINVOKE.switch_log_str2level(str); + return ret; + } + + public static uint switch_log_str2mask(string str) { + uint ret = freeswitchPINVOKE.switch_log_str2mask(str); + return ret; + } + + public static switch_log_node_t switch_log_node_dup(switch_log_node_t node) { + IntPtr cPtr = freeswitchPINVOKE.switch_log_node_dup(switch_log_node_t.getCPtr(node)); + switch_log_node_t ret = (cPtr == IntPtr.Zero) ? null : new switch_log_node_t(cPtr, false); + return ret; + } + + public static void switch_log_node_free(SWIGTYPE_p_p_switch_log_node_t pnode) { + freeswitchPINVOKE.switch_log_node_free(SWIGTYPE_p_p_switch_log_node_t.getCPtr(pnode)); + } + + public static switch_xml switch_xml_parse_str_dynamic(string s, switch_bool_t dup) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_parse_str_dynamic(s, (int)dup); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_xml switch_xml_parse_str(string s, SWIGTYPE_p_switch_size_t len) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_parse_str(s, SWIGTYPE_p_switch_size_t.getCPtr(len)); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_xml switch_xml_parse_fd(int fd) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_parse_fd(fd); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_xml switch_xml_parse_file(string file) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_parse_file(file); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_xml switch_xml_parse_file_simple(string file) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_parse_file_simple(file); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_xml switch_xml_parse_fp(SWIGTYPE_p_FILE fp) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_parse_fp(SWIGTYPE_p_FILE.getCPtr(fp)); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_xml switch_xml_child(switch_xml xml, string name) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_child(switch_xml.getCPtr(xml), name); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_xml switch_xml_find_child(switch_xml node, string childname, string attrname, string value) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_find_child(switch_xml.getCPtr(node), childname, attrname, value); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_xml switch_xml_find_child_multi(switch_xml node, string childname) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_find_child_multi(switch_xml.getCPtr(node), childname); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static string switch_xml_attr(switch_xml xml, string attr) { + string ret = freeswitchPINVOKE.switch_xml_attr(switch_xml.getCPtr(xml), attr); + return ret; + } + + public static string switch_xml_attr_soft(switch_xml xml, string attr) { + string ret = freeswitchPINVOKE.switch_xml_attr_soft(switch_xml.getCPtr(xml), attr); + return ret; + } + + public static switch_xml switch_xml_get(switch_xml xml) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_get(switch_xml.getCPtr(xml)); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static string switch_xml_toxml(switch_xml xml, switch_bool_t prn_header) { + string ret = freeswitchPINVOKE.switch_xml_toxml(switch_xml.getCPtr(xml), (int)prn_header); + return ret; + } + + public static string switch_xml_toxml_buf(switch_xml xml, string buf, SWIGTYPE_p_switch_size_t buflen, SWIGTYPE_p_switch_size_t offset, switch_bool_t prn_header) { + string ret = freeswitchPINVOKE.switch_xml_toxml_buf(switch_xml.getCPtr(xml), buf, SWIGTYPE_p_switch_size_t.getCPtr(buflen), SWIGTYPE_p_switch_size_t.getCPtr(offset), (int)prn_header); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static void switch_xml_free(switch_xml xml) { + freeswitchPINVOKE.switch_xml_free(switch_xml.getCPtr(xml)); + } + + public static void switch_xml_free_in_thread(switch_xml xml, int stacksize) { + freeswitchPINVOKE.switch_xml_free_in_thread(switch_xml.getCPtr(xml), stacksize); + } + + public static string switch_xml_error(switch_xml xml) { + string ret = freeswitchPINVOKE.switch_xml_error(switch_xml.getCPtr(xml)); + return ret; + } + + public static switch_xml switch_xml_new(string name) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_new(name); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_xml switch_xml_add_child(switch_xml xml, string name, SWIGTYPE_p_switch_size_t off) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_add_child(switch_xml.getCPtr(xml), name, SWIGTYPE_p_switch_size_t.getCPtr(off)); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_xml switch_xml_set_txt(switch_xml xml, string txt) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_set_txt(switch_xml.getCPtr(xml), txt); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_xml switch_xml_set_attr(switch_xml xml, string name, string value) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_set_attr(switch_xml.getCPtr(xml), name, value); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_xml switch_xml_set_flag(switch_xml xml, switch_xml_flag_t flag) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_set_flag(switch_xml.getCPtr(xml), (int)flag); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_xml switch_xml_cut(switch_xml xml) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_cut(switch_xml.getCPtr(xml)); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_xml switch_xml_insert(switch_xml xml, switch_xml dest, SWIGTYPE_p_switch_size_t off) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_insert(switch_xml.getCPtr(xml), switch_xml.getCPtr(dest), SWIGTYPE_p_switch_size_t.getCPtr(off)); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static switch_xml switch_xml_open_root(byte reload, ref string err) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_open_root(reload, ref err); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_status_t switch_xml_init(SWIGTYPE_p_apr_pool_t pool, ref string err) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_init(SWIGTYPE_p_apr_pool_t.getCPtr(pool), ref err); + return ret; + } + + public static switch_status_t switch_xml_destroy() { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_destroy(); + return ret; + } + + public static switch_xml switch_xml_root() { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_root(); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_status_t switch_xml_locate(string section, string tag_name, string key_name, string key_value, SWIGTYPE_p_p_switch_xml root, SWIGTYPE_p_p_switch_xml node, switch_event arg6, switch_bool_t clone) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_locate(section, tag_name, key_name, key_value, SWIGTYPE_p_p_switch_xml.getCPtr(root), SWIGTYPE_p_p_switch_xml.getCPtr(node), switch_event.getCPtr(arg6), (int)clone); + return ret; + } + + public static switch_status_t switch_xml_locate_domain(string domain_name, switch_event arg1, SWIGTYPE_p_p_switch_xml root, SWIGTYPE_p_p_switch_xml domain) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_locate_domain(domain_name, switch_event.getCPtr(arg1), SWIGTYPE_p_p_switch_xml.getCPtr(root), SWIGTYPE_p_p_switch_xml.getCPtr(domain)); + return ret; + } + + public static switch_status_t switch_xml_locate_group(string group_name, string domain_name, SWIGTYPE_p_p_switch_xml root, SWIGTYPE_p_p_switch_xml domain, SWIGTYPE_p_p_switch_xml group, switch_event arg5) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_locate_group(group_name, domain_name, SWIGTYPE_p_p_switch_xml.getCPtr(root), SWIGTYPE_p_p_switch_xml.getCPtr(domain), SWIGTYPE_p_p_switch_xml.getCPtr(group), switch_event.getCPtr(arg5)); + return ret; + } + + public static switch_status_t switch_xml_locate_user(string key, string user_name, string domain_name, string ip, SWIGTYPE_p_p_switch_xml root, SWIGTYPE_p_p_switch_xml domain, SWIGTYPE_p_p_switch_xml user, SWIGTYPE_p_p_switch_xml ingroup, switch_event arg8) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_locate_user(key, user_name, domain_name, ip, SWIGTYPE_p_p_switch_xml.getCPtr(root), SWIGTYPE_p_p_switch_xml.getCPtr(domain), SWIGTYPE_p_p_switch_xml.getCPtr(user), SWIGTYPE_p_p_switch_xml.getCPtr(ingroup), switch_event.getCPtr(arg8)); + return ret; + } + + public static switch_status_t switch_xml_locate_user_in_domain(string user_name, switch_xml domain, SWIGTYPE_p_p_switch_xml user, SWIGTYPE_p_p_switch_xml ingroup) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_locate_user_in_domain(user_name, switch_xml.getCPtr(domain), SWIGTYPE_p_p_switch_xml.getCPtr(user), SWIGTYPE_p_p_switch_xml.getCPtr(ingroup)); + return ret; + } + + public static switch_status_t switch_xml_locate_user_merged(string key, string user_name, string domain_name, string ip, SWIGTYPE_p_p_switch_xml user, switch_event arg5) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_locate_user_merged(key, user_name, domain_name, ip, SWIGTYPE_p_p_switch_xml.getCPtr(user), switch_event.getCPtr(arg5)); + 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)); + } + + public static switch_xml switch_xml_dup(switch_xml xml) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_dup(switch_xml.getCPtr(xml)); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static switch_xml switch_xml_open_cfg(string file_path, SWIGTYPE_p_p_switch_xml node, switch_event arg2) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_open_cfg(file_path, SWIGTYPE_p_p_switch_xml.getCPtr(node), switch_event.getCPtr(arg2)); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + + public static void switch_xml_set_binding_sections(SWIGTYPE_p_switch_xml_binding binding, uint sections) { + freeswitchPINVOKE.switch_xml_set_binding_sections(SWIGTYPE_p_switch_xml_binding.getCPtr(binding), sections); + } + + public static void switch_xml_set_binding_user_data(SWIGTYPE_p_switch_xml_binding binding, SWIGTYPE_p_void user_data) { + freeswitchPINVOKE.switch_xml_set_binding_user_data(SWIGTYPE_p_switch_xml_binding.getCPtr(binding), SWIGTYPE_p_void.getCPtr(user_data)); + } + + public static uint switch_xml_get_binding_sections(SWIGTYPE_p_switch_xml_binding binding) { + uint ret = freeswitchPINVOKE.switch_xml_get_binding_sections(SWIGTYPE_p_switch_xml_binding.getCPtr(binding)); + return ret; + } + + public static SWIGTYPE_p_void switch_xml_get_binding_user_data(SWIGTYPE_p_switch_xml_binding binding) { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_get_binding_user_data(SWIGTYPE_p_switch_xml_binding.getCPtr(binding)); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + + public static switch_status_t switch_xml_bind_search_function_ret(SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_switch_event_t_p_void__p_switch_xml function, uint sections, SWIGTYPE_p_void user_data, SWIGTYPE_p_p_switch_xml_binding ret_binding) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_bind_search_function_ret(SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_switch_event_t_p_void__p_switch_xml.getCPtr(function), sections, SWIGTYPE_p_void.getCPtr(user_data), SWIGTYPE_p_p_switch_xml_binding.getCPtr(ret_binding)); + return ret; + } + + public static switch_status_t switch_xml_unbind_search_function(SWIGTYPE_p_p_switch_xml_binding binding) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_unbind_search_function(SWIGTYPE_p_p_switch_xml_binding.getCPtr(binding)); + return ret; + } + + public static switch_status_t switch_xml_unbind_search_function_ptr(SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_switch_event_t_p_void__p_switch_xml function) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_xml_unbind_search_function_ptr(SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_switch_event_t_p_void__p_switch_xml.getCPtr(function)); + return ret; + } + + public static uint switch_xml_parse_section_string(string str) { + uint ret = freeswitchPINVOKE.switch_xml_parse_section_string(str); + return ret; + } + + public static int switch_xml_std_datetime_check(switch_xml xcond) { + int ret = freeswitchPINVOKE.switch_xml_std_datetime_check(switch_xml.getCPtr(xcond)); + return ret; + } + + public static switch_status_t switch_core_event_hook_add_outgoing_channel(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_unsigned_long__switch_status_t outgoing_channel) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_add_outgoing_channel(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_unsigned_long__switch_status_t.getCPtr(outgoing_channel)); + return ret; + } + + public static switch_status_t switch_core_event_hook_add_receive_message(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t receive_message) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_add_receive_message(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t.getCPtr(receive_message)); + return ret; + } + + public static switch_status_t switch_core_event_hook_add_receive_event(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t receive_event) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_add_receive_event(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t.getCPtr(receive_event)); + return ret; + } + + public static switch_status_t switch_core_event_hook_add_state_change(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session__switch_status_t state_change) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_add_state_change(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(state_change)); + return ret; + } + + public static switch_status_t switch_core_event_hook_add_read_frame(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t read_frame) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_add_read_frame(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(read_frame)); + return ret; + } + + public static switch_status_t switch_core_event_hook_add_write_frame(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t write_frame) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_add_write_frame(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(write_frame)); + return ret; + } + + public static switch_status_t switch_core_event_hook_add_video_read_frame(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t video_read_frame) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_add_video_read_frame(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(video_read_frame)); + return ret; + } + + public static switch_status_t switch_core_event_hook_add_video_write_frame(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t video_write_frame) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_add_video_write_frame(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(video_write_frame)); + return ret; + } + + public static switch_status_t switch_core_event_hook_add_kill_channel(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t kill_channel) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_add_kill_channel(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t.getCPtr(kill_channel)); + return ret; + } + + public static switch_status_t switch_core_event_hook_add_send_dtmf(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t send_dtmf) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_add_send_dtmf(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t.getCPtr(send_dtmf)); + return ret; + } + + public static switch_status_t switch_core_event_hook_add_recv_dtmf(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t recv_dtmf) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_add_recv_dtmf(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t.getCPtr(recv_dtmf)); + return ret; + } + + public static switch_status_t switch_core_event_hook_add_resurrect_session(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t resurrect_session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_add_resurrect_session(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t.getCPtr(resurrect_session)); + return ret; + } + + public static switch_status_t switch_core_event_hook_remove_outgoing_channel(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_unsigned_long__switch_status_t outgoing_channel) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_remove_outgoing_channel(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_unsigned_long__switch_status_t.getCPtr(outgoing_channel)); + return ret; + } + + public static switch_status_t switch_core_event_hook_remove_receive_message(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t receive_message) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_remove_receive_message(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t.getCPtr(receive_message)); + return ret; + } + + public static switch_status_t switch_core_event_hook_remove_receive_event(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t receive_event) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_remove_receive_event(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t.getCPtr(receive_event)); + return ret; + } + + public static switch_status_t switch_core_event_hook_remove_state_change(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session__switch_status_t state_change) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_remove_state_change(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(state_change)); + return ret; + } + + public static switch_status_t switch_core_event_hook_remove_read_frame(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t read_frame) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_remove_read_frame(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(read_frame)); + return ret; + } + + public static switch_status_t switch_core_event_hook_remove_write_frame(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t write_frame) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_remove_write_frame(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(write_frame)); + return ret; + } + + public static switch_status_t switch_core_event_hook_remove_video_read_frame(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t video_read_frame) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_remove_video_read_frame(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(video_read_frame)); + return ret; + } + + public static switch_status_t switch_core_event_hook_remove_video_write_frame(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t video_write_frame) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_remove_video_write_frame(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(video_write_frame)); + return ret; + } + + public static switch_status_t switch_core_event_hook_remove_kill_channel(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t kill_channel) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_remove_kill_channel(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t.getCPtr(kill_channel)); + return ret; + } + + public static switch_status_t switch_core_event_hook_remove_send_dtmf(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t send_dtmf) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_remove_send_dtmf(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t.getCPtr(send_dtmf)); + return ret; + } + + public static switch_status_t switch_core_event_hook_remove_recv_dtmf(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t recv_dtmf) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_remove_recv_dtmf(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t.getCPtr(recv_dtmf)); + return ret; + } + + public static switch_status_t switch_core_event_hook_remove_resurrect_session(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t resurrect_session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_event_hook_remove_resurrect_session(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t.getCPtr(resurrect_session)); + return ret; + } + + public static uint switch_scheduler_add_task(SWIGTYPE_p_time_t task_runtime, SWIGTYPE_p_f_p_switch_scheduler_task__void func, string desc, string group, uint cmd_id, SWIGTYPE_p_void cmd_arg, uint flags) { + uint ret = freeswitchPINVOKE.switch_scheduler_add_task(SWIGTYPE_p_time_t.getCPtr(task_runtime), SWIGTYPE_p_f_p_switch_scheduler_task__void.getCPtr(func), desc, group, cmd_id, SWIGTYPE_p_void.getCPtr(cmd_arg), flags); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static uint switch_scheduler_del_task_id(uint task_id) { + uint ret = freeswitchPINVOKE.switch_scheduler_del_task_id(task_id); + return ret; + } + + public static uint switch_scheduler_del_task_group(string group) { + uint ret = freeswitchPINVOKE.switch_scheduler_del_task_group(group); + return ret; + } + + public static void switch_scheduler_task_thread_start() { + freeswitchPINVOKE.switch_scheduler_task_thread_start(); + } + + public static void switch_scheduler_task_thread_stop() { + freeswitchPINVOKE.switch_scheduler_task_thread_stop(); + } + + public static int switch_config_open_file(switch_config cfg, string file_path) { + int ret = freeswitchPINVOKE.switch_config_open_file(switch_config.getCPtr(cfg), file_path); + return ret; + } + + public static void switch_config_close_file(switch_config cfg) { + freeswitchPINVOKE.switch_config_close_file(switch_config.getCPtr(cfg)); + } + + public static int switch_config_next_pair(switch_config cfg, ref string var, ref string val) { + int ret = freeswitchPINVOKE.switch_config_next_pair(switch_config.getCPtr(cfg), ref var, ref val); + return ret; + } + + public static void consoleLog(string level_str, string msg) { + freeswitchPINVOKE.consoleLog(level_str, msg); + } + + public static void consoleCleanLog(string msg) { + freeswitchPINVOKE.consoleCleanLog(msg); + } + + public static void console_log(string level_str, string msg) { + freeswitchPINVOKE.console_log(level_str, msg); + } + + public static void console_clean_log(string msg) { + freeswitchPINVOKE.console_clean_log(msg); + } + + public static void msleep(uint ms) { + freeswitchPINVOKE.msleep(ms); + } + + public static void bridge(CoreSession session_a, CoreSession session_b) { + freeswitchPINVOKE.bridge(CoreSession.getCPtr(session_a), CoreSession.getCPtr(session_b)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + } + + public static switch_status_t hanguphook(SWIGTYPE_p_switch_core_session session) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.hanguphook(SWIGTYPE_p_switch_core_session.getCPtr(session)); + return ret; + } + + public static switch_status_t dtmf_callback(SWIGTYPE_p_switch_core_session session, SWIGTYPE_p_void input, switch_input_type_t itype, SWIGTYPE_p_void buf, uint buflen) { + switch_status_t ret = (switch_status_t)freeswitchPINVOKE.dtmf_callback(SWIGTYPE_p_switch_core_session.getCPtr(session), SWIGTYPE_p_void.getCPtr(input), (int)itype, SWIGTYPE_p_void.getCPtr(buf), buflen); + return ret; + } + + public static readonly string FREESWITCH_PEN = freeswitchPINVOKE.FREESWITCH_PEN_get(); + public static readonly string FREESWITCH_OID_PREFIX = freeswitchPINVOKE.FREESWITCH_OID_PREFIX_get(); + public static readonly string FREESWITCH_ITAD = freeswitchPINVOKE.FREESWITCH_ITAD_get(); + public static readonly int __EXTENSIONS__ = freeswitchPINVOKE.__EXTENSIONS___get(); + public static readonly int __BSD_VISIBLE = freeswitchPINVOKE.__BSD_VISIBLE_get(); + public static readonly string SWITCH_ENT_ORIGINATE_DELIM = freeswitchPINVOKE.SWITCH_ENT_ORIGINATE_DELIM_get(); + public static readonly string SWITCH_BLANK_STRING = freeswitchPINVOKE.SWITCH_BLANK_STRING_get(); + public static readonly int SWITCH_TON_UNDEF = freeswitchPINVOKE.SWITCH_TON_UNDEF_get(); + public static readonly int SWITCH_NUMPLAN_UNDEF = freeswitchPINVOKE.SWITCH_NUMPLAN_UNDEF_get(); + public static readonly string SWITCH_SEQ_ESC = freeswitchPINVOKE.SWITCH_SEQ_ESC_get(); + public static readonly char SWITCH_SEQ_HOME_CHAR = freeswitchPINVOKE.SWITCH_SEQ_HOME_CHAR_get(); + public static readonly string SWITCH_SEQ_HOME_CHAR_STR = freeswitchPINVOKE.SWITCH_SEQ_HOME_CHAR_STR_get(); + public static readonly char SWITCH_SEQ_CLEARLINE_CHAR = freeswitchPINVOKE.SWITCH_SEQ_CLEARLINE_CHAR_get(); + public static readonly string SWITCH_SEQ_CLEARLINE_CHAR_STR = freeswitchPINVOKE.SWITCH_SEQ_CLEARLINE_CHAR_STR_get(); + public static readonly string SWITCH_SEQ_CLEARLINEEND_CHAR = freeswitchPINVOKE.SWITCH_SEQ_CLEARLINEEND_CHAR_get(); + public static readonly char SWITCH_SEQ_CLEARSCR_CHAR0 = freeswitchPINVOKE.SWITCH_SEQ_CLEARSCR_CHAR0_get(); + public static readonly char SWITCH_SEQ_CLEARSCR_CHAR1 = freeswitchPINVOKE.SWITCH_SEQ_CLEARSCR_CHAR1_get(); + public static readonly string SWITCH_SEQ_CLEARSCR_CHAR = freeswitchPINVOKE.SWITCH_SEQ_CLEARSCR_CHAR_get(); + public static readonly string SWITCH_SEQ_AND_COLOR = freeswitchPINVOKE.SWITCH_SEQ_AND_COLOR_get(); + public static readonly string SWITCH_SEQ_END_COLOR = freeswitchPINVOKE.SWITCH_SEQ_END_COLOR_get(); + public static readonly string SWITCH_SEQ_F_BLACK = freeswitchPINVOKE.SWITCH_SEQ_F_BLACK_get(); + public static readonly string SWITCH_SEQ_F_RED = freeswitchPINVOKE.SWITCH_SEQ_F_RED_get(); + public static readonly string SWITCH_SEQ_F_GREEN = freeswitchPINVOKE.SWITCH_SEQ_F_GREEN_get(); + public static readonly string SWITCH_SEQ_F_YELLOW = freeswitchPINVOKE.SWITCH_SEQ_F_YELLOW_get(); + public static readonly string SWITCH_SEQ_F_BLUE = freeswitchPINVOKE.SWITCH_SEQ_F_BLUE_get(); + public static readonly string SWITCH_SEQ_F_MAGEN = freeswitchPINVOKE.SWITCH_SEQ_F_MAGEN_get(); + public static readonly string SWITCH_SEQ_F_CYAN = freeswitchPINVOKE.SWITCH_SEQ_F_CYAN_get(); + public static readonly string SWITCH_SEQ_F_WHITE = freeswitchPINVOKE.SWITCH_SEQ_F_WHITE_get(); + public static readonly string SWITCH_SEQ_B_BLACK = freeswitchPINVOKE.SWITCH_SEQ_B_BLACK_get(); + public static readonly string SWITCH_SEQ_B_RED = freeswitchPINVOKE.SWITCH_SEQ_B_RED_get(); + public static readonly string SWITCH_SEQ_B_GREEN = freeswitchPINVOKE.SWITCH_SEQ_B_GREEN_get(); + public static readonly string SWITCH_SEQ_B_YELLOW = freeswitchPINVOKE.SWITCH_SEQ_B_YELLOW_get(); + public static readonly string SWITCH_SEQ_B_BLUE = freeswitchPINVOKE.SWITCH_SEQ_B_BLUE_get(); + public static readonly string SWITCH_SEQ_B_MAGEN = freeswitchPINVOKE.SWITCH_SEQ_B_MAGEN_get(); + public static readonly string SWITCH_SEQ_B_CYAN = freeswitchPINVOKE.SWITCH_SEQ_B_CYAN_get(); + public static readonly string SWITCH_SEQ_B_WHITE = freeswitchPINVOKE.SWITCH_SEQ_B_WHITE_get(); + public static readonly string SWITCH_SEQ_FBLACK = freeswitchPINVOKE.SWITCH_SEQ_FBLACK_get(); + public static readonly string SWITCH_SEQ_FRED = freeswitchPINVOKE.SWITCH_SEQ_FRED_get(); + public static readonly string SWITCH_SEQ_FGREEN = freeswitchPINVOKE.SWITCH_SEQ_FGREEN_get(); + public static readonly string SWITCH_SEQ_FYELLOW = freeswitchPINVOKE.SWITCH_SEQ_FYELLOW_get(); + public static readonly string SWITCH_SEQ_FBLUE = freeswitchPINVOKE.SWITCH_SEQ_FBLUE_get(); + public static readonly string SWITCH_SEQ_FMAGEN = freeswitchPINVOKE.SWITCH_SEQ_FMAGEN_get(); + public static readonly string SWITCH_SEQ_FCYAN = freeswitchPINVOKE.SWITCH_SEQ_FCYAN_get(); + public static readonly string SWITCH_SEQ_FWHITE = freeswitchPINVOKE.SWITCH_SEQ_FWHITE_get(); + public static readonly string SWITCH_SEQ_BBLACK = freeswitchPINVOKE.SWITCH_SEQ_BBLACK_get(); + public static readonly string SWITCH_SEQ_BRED = freeswitchPINVOKE.SWITCH_SEQ_BRED_get(); + public static readonly string SWITCH_SEQ_BGREEN = freeswitchPINVOKE.SWITCH_SEQ_BGREEN_get(); + public static readonly string SWITCH_SEQ_BYELLOW = freeswitchPINVOKE.SWITCH_SEQ_BYELLOW_get(); + public static readonly string SWITCH_SEQ_BBLUE = freeswitchPINVOKE.SWITCH_SEQ_BBLUE_get(); + public static readonly string SWITCH_SEQ_BMAGEN = freeswitchPINVOKE.SWITCH_SEQ_BMAGEN_get(); + public static readonly string SWITCH_SEQ_BCYAN = freeswitchPINVOKE.SWITCH_SEQ_BCYAN_get(); + public static readonly string SWITCH_SEQ_BWHITE = freeswitchPINVOKE.SWITCH_SEQ_BWHITE_get(); + public static readonly string SWITCH_SEQ_HOME = freeswitchPINVOKE.SWITCH_SEQ_HOME_get(); + public static readonly string SWITCH_SEQ_CLEARLINE = freeswitchPINVOKE.SWITCH_SEQ_CLEARLINE_get(); + public static readonly string SWITCH_SEQ_CLEARLINEEND = freeswitchPINVOKE.SWITCH_SEQ_CLEARLINEEND_get(); + public static readonly string SWITCH_SEQ_CLEARSCR = freeswitchPINVOKE.SWITCH_SEQ_CLEARSCR_get(); + public static readonly string SWITCH_DEFAULT_CLID_NAME = freeswitchPINVOKE.SWITCH_DEFAULT_CLID_NAME_get(); + public static readonly int SWITCH_DEFAULT_DTMF_DURATION = freeswitchPINVOKE.SWITCH_DEFAULT_DTMF_DURATION_get(); + public static readonly int SWITCH_MIN_DTMF_DURATION = freeswitchPINVOKE.SWITCH_MIN_DTMF_DURATION_get(); + public static readonly int SWITCH_MAX_DTMF_DURATION = freeswitchPINVOKE.SWITCH_MAX_DTMF_DURATION_get(); + public static readonly string SWITCH_PATH_SEPARATOR = freeswitchPINVOKE.SWITCH_PATH_SEPARATOR_get(); + public static readonly string SWITCH_URL_SEPARATOR = freeswitchPINVOKE.SWITCH_URL_SEPARATOR_get(); + public static readonly string SWITCH_IGNORE_DISPLAY_UPDATES_VARIABLE = freeswitchPINVOKE.SWITCH_IGNORE_DISPLAY_UPDATES_VARIABLE_get(); + public static readonly string SWITCH_AUDIO_SPOOL_PATH_VARIABLE = freeswitchPINVOKE.SWITCH_AUDIO_SPOOL_PATH_VARIABLE_get(); + public static readonly string SWITCH_BRIDGE_HANGUP_CAUSE_VARIABLE = freeswitchPINVOKE.SWITCH_BRIDGE_HANGUP_CAUSE_VARIABLE_get(); + public static readonly string SWITCH_READ_TERMINATOR_USED_VARIABLE = freeswitchPINVOKE.SWITCH_READ_TERMINATOR_USED_VARIABLE_get(); + public static readonly string SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE = freeswitchPINVOKE.SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE_get(); + public static readonly string SWITCH_CURRENT_APPLICATION_VARIABLE = freeswitchPINVOKE.SWITCH_CURRENT_APPLICATION_VARIABLE_get(); + public static readonly string SWITCH_CURRENT_APPLICATION_DATA_VARIABLE = freeswitchPINVOKE.SWITCH_CURRENT_APPLICATION_DATA_VARIABLE_get(); + public static readonly string SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE = freeswitchPINVOKE.SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE_get(); + public static readonly string SWITCH_ENABLE_HEARTBEAT_EVENTS_VARIABLE = freeswitchPINVOKE.SWITCH_ENABLE_HEARTBEAT_EVENTS_VARIABLE_get(); + public static readonly string SWITCH_BYPASS_MEDIA_AFTER_BRIDGE_VARIABLE = freeswitchPINVOKE.SWITCH_BYPASS_MEDIA_AFTER_BRIDGE_VARIABLE_get(); + public static readonly string SWITCH_READ_RESULT_VARIABLE = freeswitchPINVOKE.SWITCH_READ_RESULT_VARIABLE_get(); + public static readonly string SWITCH_COPY_XML_CDR_VARIABLE = freeswitchPINVOKE.SWITCH_COPY_XML_CDR_VARIABLE_get(); + public static readonly string SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE = freeswitchPINVOKE.SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE_get(); + public static readonly string SWITCH_CHANNEL_EXECUTE_ON_ANSWER_VARIABLE = freeswitchPINVOKE.SWITCH_CHANNEL_EXECUTE_ON_ANSWER_VARIABLE_get(); + public static readonly string SWITCH_CHANNEL_EXECUTE_ON_PRE_ANSWER_VARIABLE = freeswitchPINVOKE.SWITCH_CHANNEL_EXECUTE_ON_PRE_ANSWER_VARIABLE_get(); + public static readonly string SWITCH_CHANNEL_EXECUTE_ON_MEDIA_VARIABLE = freeswitchPINVOKE.SWITCH_CHANNEL_EXECUTE_ON_MEDIA_VARIABLE_get(); + public static readonly string SWITCH_CHANNEL_API_ON_ANSWER_VARIABLE = freeswitchPINVOKE.SWITCH_CHANNEL_API_ON_ANSWER_VARIABLE_get(); + public static readonly string SWITCH_CHANNEL_EXECUTE_ON_RING_VARIABLE = freeswitchPINVOKE.SWITCH_CHANNEL_EXECUTE_ON_RING_VARIABLE_get(); + public static readonly string SWITCH_CALL_TIMEOUT_VARIABLE = freeswitchPINVOKE.SWITCH_CALL_TIMEOUT_VARIABLE_get(); + public static readonly string SWITCH_HOLDING_UUID_VARIABLE = freeswitchPINVOKE.SWITCH_HOLDING_UUID_VARIABLE_get(); + public static readonly string SWITCH_SOFT_HOLDING_UUID_VARIABLE = freeswitchPINVOKE.SWITCH_SOFT_HOLDING_UUID_VARIABLE_get(); + public static readonly string SWITCH_API_BRIDGE_END_VARIABLE = freeswitchPINVOKE.SWITCH_API_BRIDGE_END_VARIABLE_get(); + public static readonly string SWITCH_API_HANGUP_HOOK_VARIABLE = freeswitchPINVOKE.SWITCH_API_HANGUP_HOOK_VARIABLE_get(); + public static readonly string SWITCH_API_REPORTING_HOOK_VARIABLE = freeswitchPINVOKE.SWITCH_API_REPORTING_HOOK_VARIABLE_get(); + public static readonly string SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE = freeswitchPINVOKE.SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE_get(); + public static readonly string SWITCH_PROCESS_CDR_VARIABLE = freeswitchPINVOKE.SWITCH_PROCESS_CDR_VARIABLE_get(); + public static readonly string SWITCH_FORCE_PROCESS_CDR_VARIABLE = freeswitchPINVOKE.SWITCH_FORCE_PROCESS_CDR_VARIABLE_get(); + public static readonly string SWITCH_BRIDGE_CHANNEL_VARIABLE = freeswitchPINVOKE.SWITCH_BRIDGE_CHANNEL_VARIABLE_get(); + public static readonly string SWITCH_CHANNEL_NAME_VARIABLE = freeswitchPINVOKE.SWITCH_CHANNEL_NAME_VARIABLE_get(); + public static readonly string SWITCH_BRIDGE_UUID_VARIABLE = freeswitchPINVOKE.SWITCH_BRIDGE_UUID_VARIABLE_get(); + public static readonly string SWITCH_CONTINUE_ON_FAILURE_VARIABLE = freeswitchPINVOKE.SWITCH_CONTINUE_ON_FAILURE_VARIABLE_get(); + public static readonly string SWITCH_PLAYBACK_TERMINATORS_VARIABLE = freeswitchPINVOKE.SWITCH_PLAYBACK_TERMINATORS_VARIABLE_get(); + public static readonly string SWITCH_PLAYBACK_TERMINATOR_USED = freeswitchPINVOKE.SWITCH_PLAYBACK_TERMINATOR_USED_get(); + public static readonly string SWITCH_CACHE_SPEECH_HANDLES_VARIABLE = freeswitchPINVOKE.SWITCH_CACHE_SPEECH_HANDLES_VARIABLE_get(); + public static readonly string SWITCH_CACHE_SPEECH_HANDLES_OBJ_NAME = freeswitchPINVOKE.SWITCH_CACHE_SPEECH_HANDLES_OBJ_NAME_get(); + public static readonly string SWITCH_BYPASS_MEDIA_VARIABLE = freeswitchPINVOKE.SWITCH_BYPASS_MEDIA_VARIABLE_get(); + public static readonly string SWITCH_PROXY_MEDIA_VARIABLE = freeswitchPINVOKE.SWITCH_PROXY_MEDIA_VARIABLE_get(); + public static readonly string SWITCH_ENDPOINT_DISPOSITION_VARIABLE = freeswitchPINVOKE.SWITCH_ENDPOINT_DISPOSITION_VARIABLE_get(); + public static readonly string SWITCH_HOLD_MUSIC_VARIABLE = freeswitchPINVOKE.SWITCH_HOLD_MUSIC_VARIABLE_get(); + public static readonly string SWITCH_EXPORT_VARS_VARIABLE = freeswitchPINVOKE.SWITCH_EXPORT_VARS_VARIABLE_get(); + public static readonly string SWITCH_R_SDP_VARIABLE = freeswitchPINVOKE.SWITCH_R_SDP_VARIABLE_get(); + public static readonly string SWITCH_L_SDP_VARIABLE = freeswitchPINVOKE.SWITCH_L_SDP_VARIABLE_get(); + public static readonly string SWITCH_B_SDP_VARIABLE = freeswitchPINVOKE.SWITCH_B_SDP_VARIABLE_get(); + public static readonly string SWITCH_BRIDGE_VARIABLE = freeswitchPINVOKE.SWITCH_BRIDGE_VARIABLE_get(); + public static readonly string SWITCH_SIGNAL_BRIDGE_VARIABLE = freeswitchPINVOKE.SWITCH_SIGNAL_BRIDGE_VARIABLE_get(); + public static readonly string SWITCH_SIGNAL_BOND_VARIABLE = freeswitchPINVOKE.SWITCH_SIGNAL_BOND_VARIABLE_get(); + public static readonly string SWITCH_ORIGINATOR_VARIABLE = freeswitchPINVOKE.SWITCH_ORIGINATOR_VARIABLE_get(); + public static readonly string SWITCH_ORIGINATOR_CODEC_VARIABLE = freeswitchPINVOKE.SWITCH_ORIGINATOR_CODEC_VARIABLE_get(); + public static readonly string SWITCH_ORIGINATOR_VIDEO_CODEC_VARIABLE = freeswitchPINVOKE.SWITCH_ORIGINATOR_VIDEO_CODEC_VARIABLE_get(); + public static readonly string SWITCH_LOCAL_MEDIA_IP_VARIABLE = freeswitchPINVOKE.SWITCH_LOCAL_MEDIA_IP_VARIABLE_get(); + public static readonly string SWITCH_LOCAL_MEDIA_PORT_VARIABLE = freeswitchPINVOKE.SWITCH_LOCAL_MEDIA_PORT_VARIABLE_get(); + public static readonly string SWITCH_REMOTE_MEDIA_IP_VARIABLE = freeswitchPINVOKE.SWITCH_REMOTE_MEDIA_IP_VARIABLE_get(); + public static readonly string SWITCH_REMOTE_MEDIA_PORT_VARIABLE = freeswitchPINVOKE.SWITCH_REMOTE_MEDIA_PORT_VARIABLE_get(); + public static readonly string SWITCH_REMOTE_VIDEO_IP_VARIABLE = freeswitchPINVOKE.SWITCH_REMOTE_VIDEO_IP_VARIABLE_get(); + public static readonly string SWITCH_REMOTE_VIDEO_PORT_VARIABLE = freeswitchPINVOKE.SWITCH_REMOTE_VIDEO_PORT_VARIABLE_get(); + public static readonly string SWITCH_LOCAL_VIDEO_IP_VARIABLE = freeswitchPINVOKE.SWITCH_LOCAL_VIDEO_IP_VARIABLE_get(); + public static readonly string SWITCH_LOCAL_VIDEO_PORT_VARIABLE = freeswitchPINVOKE.SWITCH_LOCAL_VIDEO_PORT_VARIABLE_get(); + public static readonly string SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE = freeswitchPINVOKE.SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE_get(); + public static readonly string SWITCH_PARK_AFTER_BRIDGE_VARIABLE = freeswitchPINVOKE.SWITCH_PARK_AFTER_BRIDGE_VARIABLE_get(); + public static readonly string SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE = freeswitchPINVOKE.SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE_get(); + public static readonly string SWITCH_EXEC_AFTER_BRIDGE_APP_VARIABLE = freeswitchPINVOKE.SWITCH_EXEC_AFTER_BRIDGE_APP_VARIABLE_get(); + public static readonly string SWITCH_EXEC_AFTER_BRIDGE_ARG_VARIABLE = freeswitchPINVOKE.SWITCH_EXEC_AFTER_BRIDGE_ARG_VARIABLE_get(); + public static readonly string SWITCH_MAX_FORWARDS_VARIABLE = freeswitchPINVOKE.SWITCH_MAX_FORWARDS_VARIABLE_get(); + public static readonly string SWITCH_DISABLE_APP_LOG_VARIABLE = freeswitchPINVOKE.SWITCH_DISABLE_APP_LOG_VARIABLE_get(); + public static readonly string SWITCH_SPEECH_KEY = freeswitchPINVOKE.SWITCH_SPEECH_KEY_get(); + public static readonly string SWITCH_UUID_BRIDGE = freeswitchPINVOKE.SWITCH_UUID_BRIDGE_get(); + public static readonly int SWITCH_BITS_PER_BYTE = freeswitchPINVOKE.SWITCH_BITS_PER_BYTE_get(); + public static readonly int SWITCH_DEFAULT_FILE_BUFFER_LEN = freeswitchPINVOKE.SWITCH_DEFAULT_FILE_BUFFER_LEN_get(); + public static readonly int SWITCH_DTMF_LOG_LEN = freeswitchPINVOKE.SWITCH_DTMF_LOG_LEN_get(); + public static readonly int SWITCH_MAX_STACKS = freeswitchPINVOKE.SWITCH_MAX_STACKS_get(); + public static readonly int SWITCH_THREAD_STACKSIZE = freeswitchPINVOKE.SWITCH_THREAD_STACKSIZE_get(); + public static readonly int SWITCH_SYSTEM_THREAD_STACKSIZE = freeswitchPINVOKE.SWITCH_SYSTEM_THREAD_STACKSIZE_get(); + public static readonly int SWITCH_MAX_INTERVAL = freeswitchPINVOKE.SWITCH_MAX_INTERVAL_get(); + public static readonly int SWITCH_INTERVAL_PAD = freeswitchPINVOKE.SWITCH_INTERVAL_PAD_get(); + public static readonly int SWITCH_MAX_SAMPLE_LEN = freeswitchPINVOKE.SWITCH_MAX_SAMPLE_LEN_get(); + public static readonly int SWITCH_BYTES_PER_SAMPLE = freeswitchPINVOKE.SWITCH_BYTES_PER_SAMPLE_get(); + public static readonly int SWITCH_RECOMMENDED_BUFFER_SIZE = freeswitchPINVOKE.SWITCH_RECOMMENDED_BUFFER_SIZE_get(); + public static readonly int SWITCH_MAX_CODECS = freeswitchPINVOKE.SWITCH_MAX_CODECS_get(); + public static readonly int SWITCH_MAX_STATE_HANDLERS = freeswitchPINVOKE.SWITCH_MAX_STATE_HANDLERS_get(); + public static readonly int SWITCH_CORE_QUEUE_LEN = freeswitchPINVOKE.SWITCH_CORE_QUEUE_LEN_get(); + public static readonly int SWITCH_MAX_MANAGEMENT_BUFFER_LEN = freeswitchPINVOKE.SWITCH_MAX_MANAGEMENT_BUFFER_LEN_get(); + public static readonly int SWITCH_RTP_CNG_PAYLOAD = freeswitchPINVOKE.SWITCH_RTP_CNG_PAYLOAD_get(); + public static readonly int SWITCH_API_VERSION = freeswitchPINVOKE.SWITCH_API_VERSION_get(); + public static readonly int SWITCH_CORE_DB_OK = freeswitchPINVOKE.SWITCH_CORE_DB_OK_get(); + public static readonly int SWITCH_CORE_DB_ERROR = freeswitchPINVOKE.SWITCH_CORE_DB_ERROR_get(); + public static readonly int SWITCH_CORE_DB_INTERNAL = freeswitchPINVOKE.SWITCH_CORE_DB_INTERNAL_get(); + public static readonly int SWITCH_CORE_DB_PERM = freeswitchPINVOKE.SWITCH_CORE_DB_PERM_get(); + public static readonly int SWITCH_CORE_DB_ABORT = freeswitchPINVOKE.SWITCH_CORE_DB_ABORT_get(); + public static readonly int SWITCH_CORE_DB_BUSY = freeswitchPINVOKE.SWITCH_CORE_DB_BUSY_get(); + public static readonly int SWITCH_CORE_DB_LOCKED = freeswitchPINVOKE.SWITCH_CORE_DB_LOCKED_get(); + public static readonly int SWITCH_CORE_DB_NOMEM = freeswitchPINVOKE.SWITCH_CORE_DB_NOMEM_get(); + public static readonly int SWITCH_CORE_DB_READONLY = freeswitchPINVOKE.SWITCH_CORE_DB_READONLY_get(); + public static readonly int SWITCH_CORE_DB_INTERRUPT = freeswitchPINVOKE.SWITCH_CORE_DB_INTERRUPT_get(); + public static readonly int SWITCH_CORE_DB_IOERR = freeswitchPINVOKE.SWITCH_CORE_DB_IOERR_get(); + public static readonly int SWITCH_CORE_DB_CORRUPT = freeswitchPINVOKE.SWITCH_CORE_DB_CORRUPT_get(); + public static readonly int SWITCH_CORE_DB_NOTFOUND = freeswitchPINVOKE.SWITCH_CORE_DB_NOTFOUND_get(); + public static readonly int SWITCH_CORE_DB_FULL = freeswitchPINVOKE.SWITCH_CORE_DB_FULL_get(); + public static readonly int SWITCH_CORE_DB_CANTOPEN = freeswitchPINVOKE.SWITCH_CORE_DB_CANTOPEN_get(); + public static readonly int SWITCH_CORE_DB_PROTOCOL = freeswitchPINVOKE.SWITCH_CORE_DB_PROTOCOL_get(); + public static readonly int SWITCH_CORE_DB_EMPTY = freeswitchPINVOKE.SWITCH_CORE_DB_EMPTY_get(); + public static readonly int SWITCH_CORE_DB_SCHEMA = freeswitchPINVOKE.SWITCH_CORE_DB_SCHEMA_get(); + public static readonly int SWITCH_CORE_DB_TOOBIG = freeswitchPINVOKE.SWITCH_CORE_DB_TOOBIG_get(); + public static readonly int SWITCH_CORE_DB_CONSTRAINT = freeswitchPINVOKE.SWITCH_CORE_DB_CONSTRAINT_get(); + public static readonly int SWITCH_CORE_DB_MISMATCH = freeswitchPINVOKE.SWITCH_CORE_DB_MISMATCH_get(); + public static readonly int SWITCH_CORE_DB_MISUSE = freeswitchPINVOKE.SWITCH_CORE_DB_MISUSE_get(); + public static readonly int SWITCH_CORE_DB_NOLFS = freeswitchPINVOKE.SWITCH_CORE_DB_NOLFS_get(); + public static readonly int SWITCH_CORE_DB_AUTH = freeswitchPINVOKE.SWITCH_CORE_DB_AUTH_get(); + public static readonly int SWITCH_CORE_DB_FORMAT = freeswitchPINVOKE.SWITCH_CORE_DB_FORMAT_get(); + public static readonly int SWITCH_CORE_DB_RANGE = freeswitchPINVOKE.SWITCH_CORE_DB_RANGE_get(); + public static readonly int SWITCH_CORE_DB_NOTADB = freeswitchPINVOKE.SWITCH_CORE_DB_NOTADB_get(); + public static readonly int SWITCH_CORE_DB_ROW = freeswitchPINVOKE.SWITCH_CORE_DB_ROW_get(); + public static readonly int SWITCH_CORE_DB_DONE = freeswitchPINVOKE.SWITCH_CORE_DB_DONE_get(); + public static readonly int SWITCH_MAX_CORE_THREAD_SESSION_OBJS = freeswitchPINVOKE.SWITCH_MAX_CORE_THREAD_SESSION_OBJS_get(); + public static readonly int SWITCH_MAX_STREAMS = freeswitchPINVOKE.SWITCH_MAX_STREAMS_get(); + public static readonly int MESSAGE_STRING_ARG_MAX = freeswitchPINVOKE.MESSAGE_STRING_ARG_MAX_get(); + public static readonly int CACHE_DB_LEN = freeswitchPINVOKE.CACHE_DB_LEN_get(); + public static readonly int SWITCH_CMD_CHUNK_LEN = freeswitchPINVOKE.SWITCH_CMD_CHUNK_LEN_get(); + public static readonly int SWITCH_SMAX = freeswitchPINVOKE.SWITCH_SMAX_get(); + public static readonly int SWITCH_SMIN = freeswitchPINVOKE.SWITCH_SMIN_get(); + public static readonly int SWITCH_RESAMPLE_QUALITY = freeswitchPINVOKE.SWITCH_RESAMPLE_QUALITY_get(); + public static readonly int SWITCH_RTP_MAX_BUF_LEN = freeswitchPINVOKE.SWITCH_RTP_MAX_BUF_LEN_get(); + public static readonly int SWITCH_RTCP_MAX_BUF_LEN = freeswitchPINVOKE.SWITCH_RTCP_MAX_BUF_LEN_get(); + public static readonly int SWITCH_RTP_MAX_CRYPTO_LEN = freeswitchPINVOKE.SWITCH_RTP_MAX_CRYPTO_LEN_get(); + public static readonly int SWITCH_RTP_KEY_LEN = freeswitchPINVOKE.SWITCH_RTP_KEY_LEN_get(); + public static readonly string SWITCH_RTP_CRYPTO_KEY_32 = freeswitchPINVOKE.SWITCH_RTP_CRYPTO_KEY_32_get(); + public static readonly string SWITCH_RTP_CRYPTO_KEY_80 = freeswitchPINVOKE.SWITCH_RTP_CRYPTO_KEY_80_get(); + public static readonly int SWITCH_XML_BUFSIZE = freeswitchPINVOKE.SWITCH_XML_BUFSIZE_get(); +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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; + +class freeswitchPINVOKE { + + protected class SWIGExceptionHelper { + + public delegate void ExceptionDelegate(string message); + public delegate void ExceptionArgumentDelegate(string message, string paramName); + + static ExceptionDelegate applicationDelegate = new ExceptionDelegate(SetPendingApplicationException); + static ExceptionDelegate arithmeticDelegate = new ExceptionDelegate(SetPendingArithmeticException); + static ExceptionDelegate divideByZeroDelegate = new ExceptionDelegate(SetPendingDivideByZeroException); + static ExceptionDelegate indexOutOfRangeDelegate = new ExceptionDelegate(SetPendingIndexOutOfRangeException); + static ExceptionDelegate invalidCastDelegate = new ExceptionDelegate(SetPendingInvalidCastException); + static ExceptionDelegate invalidOperationDelegate = new ExceptionDelegate(SetPendingInvalidOperationException); + static ExceptionDelegate ioDelegate = new ExceptionDelegate(SetPendingIOException); + static ExceptionDelegate nullReferenceDelegate = new ExceptionDelegate(SetPendingNullReferenceException); + static ExceptionDelegate outOfMemoryDelegate = new ExceptionDelegate(SetPendingOutOfMemoryException); + static ExceptionDelegate overflowDelegate = new ExceptionDelegate(SetPendingOverflowException); + static ExceptionDelegate systemDelegate = new ExceptionDelegate(SetPendingSystemException); + + static ExceptionArgumentDelegate argumentDelegate = new ExceptionArgumentDelegate(SetPendingArgumentException); + static ExceptionArgumentDelegate argumentNullDelegate = new ExceptionArgumentDelegate(SetPendingArgumentNullException); + static ExceptionArgumentDelegate argumentOutOfRangeDelegate = new ExceptionArgumentDelegate(SetPendingArgumentOutOfRangeException); + + [DllImport("mod_managed", EntryPoint="SWIGRegisterExceptionCallbacks_freeswitch")] + public static extern void SWIGRegisterExceptionCallbacks_freeswitch( + ExceptionDelegate applicationDelegate, + ExceptionDelegate arithmeticDelegate, + ExceptionDelegate divideByZeroDelegate, + ExceptionDelegate indexOutOfRangeDelegate, + ExceptionDelegate invalidCastDelegate, + ExceptionDelegate invalidOperationDelegate, + ExceptionDelegate ioDelegate, + ExceptionDelegate nullReferenceDelegate, + ExceptionDelegate outOfMemoryDelegate, + ExceptionDelegate overflowDelegate, + ExceptionDelegate systemExceptionDelegate); + + [DllImport("mod_managed", EntryPoint="SWIGRegisterExceptionArgumentCallbacks_freeswitch")] + public static extern void SWIGRegisterExceptionCallbacksArgument_freeswitch( + ExceptionArgumentDelegate argumentDelegate, + ExceptionArgumentDelegate argumentNullDelegate, + ExceptionArgumentDelegate argumentOutOfRangeDelegate); + + static void SetPendingApplicationException(string message) { + SWIGPendingException.Set(new System.ApplicationException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingArithmeticException(string message) { + SWIGPendingException.Set(new System.ArithmeticException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingDivideByZeroException(string message) { + SWIGPendingException.Set(new System.DivideByZeroException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingIndexOutOfRangeException(string message) { + SWIGPendingException.Set(new System.IndexOutOfRangeException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingInvalidCastException(string message) { + SWIGPendingException.Set(new System.InvalidCastException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingInvalidOperationException(string message) { + SWIGPendingException.Set(new System.InvalidOperationException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingIOException(string message) { + SWIGPendingException.Set(new System.IO.IOException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingNullReferenceException(string message) { + SWIGPendingException.Set(new System.NullReferenceException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingOutOfMemoryException(string message) { + SWIGPendingException.Set(new System.OutOfMemoryException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingOverflowException(string message) { + SWIGPendingException.Set(new System.OverflowException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingSystemException(string message) { + SWIGPendingException.Set(new System.SystemException(message, SWIGPendingException.Retrieve())); + } + + static void SetPendingArgumentException(string message, string paramName) { + SWIGPendingException.Set(new System.ArgumentException(message, paramName, SWIGPendingException.Retrieve())); + } + static void SetPendingArgumentNullException(string message, string paramName) { + Exception e = SWIGPendingException.Retrieve(); + if (e != null) message = message + " Inner Exception: " + e.Message; + SWIGPendingException.Set(new System.ArgumentNullException(paramName, message)); + } + static void SetPendingArgumentOutOfRangeException(string message, string paramName) { + Exception e = SWIGPendingException.Retrieve(); + if (e != null) message = message + " Inner Exception: " + e.Message; + SWIGPendingException.Set(new System.ArgumentOutOfRangeException(paramName, message)); + } + + static SWIGExceptionHelper() { + SWIGRegisterExceptionCallbacks_freeswitch( + applicationDelegate, + arithmeticDelegate, + divideByZeroDelegate, + indexOutOfRangeDelegate, + invalidCastDelegate, + invalidOperationDelegate, + ioDelegate, + nullReferenceDelegate, + outOfMemoryDelegate, + overflowDelegate, + systemDelegate); + + SWIGRegisterExceptionCallbacksArgument_freeswitch( + argumentDelegate, + argumentNullDelegate, + argumentOutOfRangeDelegate); + } + } + + protected static SWIGExceptionHelper swigExceptionHelper = new SWIGExceptionHelper(); + + public class SWIGPendingException { + [ThreadStatic] + private static Exception pendingException = null; + private static int numExceptionsPending = 0; + + public static bool Pending { + get { + bool pending = false; + if (numExceptionsPending > 0) + if (pendingException != null) + pending = true; + return pending; + } + } + + public static void Set(Exception e) { + if (pendingException != null) + throw new ApplicationException("FATAL: An earlier pending exception from unmanaged code was missed and thus not thrown (" + pendingException.ToString() + ")", e); + pendingException = e; + lock(typeof(freeswitchPINVOKE)) { + numExceptionsPending++; + } + } + + public static Exception Retrieve() { + Exception e = null; + if (numExceptionsPending > 0) { + if (pendingException != null) { + e = pendingException; + pendingException = null; + lock(typeof(freeswitchPINVOKE)) { + numExceptionsPending--; + } + } + } + return e; + } + } + + + static freeswitchPINVOKE() { + } + + + + protected class SWIGStringHelper { + + public delegate string SWIGStringDelegate(string message); + static SWIGStringDelegate stringDelegate = new SWIGStringDelegate(CreateString); + + [DllImport("mod_managed", EntryPoint="SWIGRegisterStringCallback_freeswitch")] + public static extern void SWIGRegisterStringCallback_freeswitch(SWIGStringDelegate stringDelegate); + + static string CreateString(string cString) { + return cString; + } + + static SWIGStringHelper() { + SWIGRegisterStringCallback_freeswitch(stringDelegate); + } + } + + static protected SWIGStringHelper swigStringHelper = new SWIGStringHelper(); + + + [DllImport("mod_managed", EntryPoint="CSharp_FREESWITCH_PEN_get")] + public static extern string FREESWITCH_PEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_FREESWITCH_OID_PREFIX_get")] + public static extern string FREESWITCH_OID_PREFIX_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_FREESWITCH_ITAD_get")] + public static extern string FREESWITCH_ITAD_get(); + + [DllImport("mod_managed", EntryPoint="CSharp___EXTENSIONS___get")] + public static extern int __EXTENSIONS___get(); + + [DllImport("mod_managed", EntryPoint="CSharp___BSD_VISIBLE_get")] + public static extern int __BSD_VISIBLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_ENT_ORIGINATE_DELIM_get")] + public static extern string SWITCH_ENT_ORIGINATE_DELIM_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_BLANK_STRING_get")] + public static extern string SWITCH_BLANK_STRING_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_TON_UNDEF_get")] + public static extern int SWITCH_TON_UNDEF_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_NUMPLAN_UNDEF_get")] + public static extern int SWITCH_NUMPLAN_UNDEF_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_ESC_get")] + public static extern string SWITCH_SEQ_ESC_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_HOME_CHAR_get")] + public static extern char SWITCH_SEQ_HOME_CHAR_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_HOME_CHAR_STR_get")] + public static extern string SWITCH_SEQ_HOME_CHAR_STR_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_CLEARLINE_CHAR_get")] + public static extern char SWITCH_SEQ_CLEARLINE_CHAR_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_CLEARLINE_CHAR_STR_get")] + public static extern string SWITCH_SEQ_CLEARLINE_CHAR_STR_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_CLEARLINEEND_CHAR_get")] + public static extern string SWITCH_SEQ_CLEARLINEEND_CHAR_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_CLEARSCR_CHAR0_get")] + public static extern char SWITCH_SEQ_CLEARSCR_CHAR0_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_CLEARSCR_CHAR1_get")] + public static extern char SWITCH_SEQ_CLEARSCR_CHAR1_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_CLEARSCR_CHAR_get")] + public static extern string SWITCH_SEQ_CLEARSCR_CHAR_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_AND_COLOR_get")] + public static extern string SWITCH_SEQ_AND_COLOR_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_END_COLOR_get")] + public static extern string SWITCH_SEQ_END_COLOR_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_F_BLACK_get")] + public static extern string SWITCH_SEQ_F_BLACK_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_F_RED_get")] + public static extern string SWITCH_SEQ_F_RED_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_F_GREEN_get")] + public static extern string SWITCH_SEQ_F_GREEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_F_YELLOW_get")] + public static extern string SWITCH_SEQ_F_YELLOW_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_F_BLUE_get")] + public static extern string SWITCH_SEQ_F_BLUE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_F_MAGEN_get")] + public static extern string SWITCH_SEQ_F_MAGEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_F_CYAN_get")] + public static extern string SWITCH_SEQ_F_CYAN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_F_WHITE_get")] + public static extern string SWITCH_SEQ_F_WHITE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_B_BLACK_get")] + public static extern string SWITCH_SEQ_B_BLACK_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_B_RED_get")] + public static extern string SWITCH_SEQ_B_RED_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_B_GREEN_get")] + public static extern string SWITCH_SEQ_B_GREEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_B_YELLOW_get")] + public static extern string SWITCH_SEQ_B_YELLOW_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_B_BLUE_get")] + public static extern string SWITCH_SEQ_B_BLUE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_B_MAGEN_get")] + public static extern string SWITCH_SEQ_B_MAGEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_B_CYAN_get")] + public static extern string SWITCH_SEQ_B_CYAN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_B_WHITE_get")] + public static extern string SWITCH_SEQ_B_WHITE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_FBLACK_get")] + public static extern string SWITCH_SEQ_FBLACK_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_FRED_get")] + public static extern string SWITCH_SEQ_FRED_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_FGREEN_get")] + public static extern string SWITCH_SEQ_FGREEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_FYELLOW_get")] + public static extern string SWITCH_SEQ_FYELLOW_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_FBLUE_get")] + public static extern string SWITCH_SEQ_FBLUE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_FMAGEN_get")] + public static extern string SWITCH_SEQ_FMAGEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_FCYAN_get")] + public static extern string SWITCH_SEQ_FCYAN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_FWHITE_get")] + public static extern string SWITCH_SEQ_FWHITE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_BBLACK_get")] + public static extern string SWITCH_SEQ_BBLACK_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_BRED_get")] + public static extern string SWITCH_SEQ_BRED_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_BGREEN_get")] + public static extern string SWITCH_SEQ_BGREEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_BYELLOW_get")] + public static extern string SWITCH_SEQ_BYELLOW_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_BBLUE_get")] + public static extern string SWITCH_SEQ_BBLUE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_BMAGEN_get")] + public static extern string SWITCH_SEQ_BMAGEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_BCYAN_get")] + public static extern string SWITCH_SEQ_BCYAN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_BWHITE_get")] + public static extern string SWITCH_SEQ_BWHITE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_HOME_get")] + public static extern string SWITCH_SEQ_HOME_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_CLEARLINE_get")] + public static extern string SWITCH_SEQ_CLEARLINE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_CLEARLINEEND_get")] + public static extern string SWITCH_SEQ_CLEARLINEEND_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEQ_CLEARSCR_get")] + public static extern string SWITCH_SEQ_CLEARSCR_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_DEFAULT_CLID_NAME_get")] + public static extern string SWITCH_DEFAULT_CLID_NAME_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_DEFAULT_DTMF_DURATION_get")] + public static extern int SWITCH_DEFAULT_DTMF_DURATION_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_MIN_DTMF_DURATION_get")] + public static extern int SWITCH_MIN_DTMF_DURATION_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_MAX_DTMF_DURATION_get")] + public static extern int SWITCH_MAX_DTMF_DURATION_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_PATH_SEPARATOR_get")] + public static extern string SWITCH_PATH_SEPARATOR_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_URL_SEPARATOR_get")] + public static extern string SWITCH_URL_SEPARATOR_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_IGNORE_DISPLAY_UPDATES_VARIABLE_get")] + public static extern string SWITCH_IGNORE_DISPLAY_UPDATES_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_AUDIO_SPOOL_PATH_VARIABLE_get")] + public static extern string SWITCH_AUDIO_SPOOL_PATH_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_BRIDGE_HANGUP_CAUSE_VARIABLE_get")] + public static extern string SWITCH_BRIDGE_HANGUP_CAUSE_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_READ_TERMINATOR_USED_VARIABLE_get")] + public static extern string SWITCH_READ_TERMINATOR_USED_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE_get")] + public static extern string SWITCH_SEND_SILENCE_WHEN_IDLE_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CURRENT_APPLICATION_VARIABLE_get")] + public static extern string SWITCH_CURRENT_APPLICATION_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CURRENT_APPLICATION_DATA_VARIABLE_get")] + public static extern string SWITCH_CURRENT_APPLICATION_DATA_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE_get")] + public static extern string SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_ENABLE_HEARTBEAT_EVENTS_VARIABLE_get")] + public static extern string SWITCH_ENABLE_HEARTBEAT_EVENTS_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_BYPASS_MEDIA_AFTER_BRIDGE_VARIABLE_get")] + public static extern string SWITCH_BYPASS_MEDIA_AFTER_BRIDGE_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_READ_RESULT_VARIABLE_get")] + public static extern string SWITCH_READ_RESULT_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_COPY_XML_CDR_VARIABLE_get")] + public static extern string SWITCH_COPY_XML_CDR_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE_get")] + public static extern string SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CHANNEL_EXECUTE_ON_ANSWER_VARIABLE_get")] + public static extern string SWITCH_CHANNEL_EXECUTE_ON_ANSWER_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CHANNEL_EXECUTE_ON_PRE_ANSWER_VARIABLE_get")] + public static extern string SWITCH_CHANNEL_EXECUTE_ON_PRE_ANSWER_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CHANNEL_EXECUTE_ON_MEDIA_VARIABLE_get")] + public static extern string SWITCH_CHANNEL_EXECUTE_ON_MEDIA_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CHANNEL_API_ON_ANSWER_VARIABLE_get")] + public static extern string SWITCH_CHANNEL_API_ON_ANSWER_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CHANNEL_EXECUTE_ON_RING_VARIABLE_get")] + public static extern string SWITCH_CHANNEL_EXECUTE_ON_RING_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CALL_TIMEOUT_VARIABLE_get")] + public static extern string SWITCH_CALL_TIMEOUT_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_HOLDING_UUID_VARIABLE_get")] + public static extern string SWITCH_HOLDING_UUID_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SOFT_HOLDING_UUID_VARIABLE_get")] + public static extern string SWITCH_SOFT_HOLDING_UUID_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_API_BRIDGE_END_VARIABLE_get")] + public static extern string SWITCH_API_BRIDGE_END_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_API_HANGUP_HOOK_VARIABLE_get")] + public static extern string SWITCH_API_HANGUP_HOOK_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_API_REPORTING_HOOK_VARIABLE_get")] + public static extern string SWITCH_API_REPORTING_HOOK_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE_get")] + public static extern string SWITCH_SESSION_IN_HANGUP_HOOK_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_PROCESS_CDR_VARIABLE_get")] + public static extern string SWITCH_PROCESS_CDR_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_FORCE_PROCESS_CDR_VARIABLE_get")] + public static extern string SWITCH_FORCE_PROCESS_CDR_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_BRIDGE_CHANNEL_VARIABLE_get")] + public static extern string SWITCH_BRIDGE_CHANNEL_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CHANNEL_NAME_VARIABLE_get")] + public static extern string SWITCH_CHANNEL_NAME_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_BRIDGE_UUID_VARIABLE_get")] + public static extern string SWITCH_BRIDGE_UUID_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CONTINUE_ON_FAILURE_VARIABLE_get")] + public static extern string SWITCH_CONTINUE_ON_FAILURE_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_PLAYBACK_TERMINATORS_VARIABLE_get")] + public static extern string SWITCH_PLAYBACK_TERMINATORS_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_PLAYBACK_TERMINATOR_USED_get")] + public static extern string SWITCH_PLAYBACK_TERMINATOR_USED_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CACHE_SPEECH_HANDLES_VARIABLE_get")] + public static extern string SWITCH_CACHE_SPEECH_HANDLES_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CACHE_SPEECH_HANDLES_OBJ_NAME_get")] + public static extern string SWITCH_CACHE_SPEECH_HANDLES_OBJ_NAME_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_BYPASS_MEDIA_VARIABLE_get")] + public static extern string SWITCH_BYPASS_MEDIA_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_PROXY_MEDIA_VARIABLE_get")] + public static extern string SWITCH_PROXY_MEDIA_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_ENDPOINT_DISPOSITION_VARIABLE_get")] + public static extern string SWITCH_ENDPOINT_DISPOSITION_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_HOLD_MUSIC_VARIABLE_get")] + public static extern string SWITCH_HOLD_MUSIC_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_EXPORT_VARS_VARIABLE_get")] + public static extern string SWITCH_EXPORT_VARS_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_R_SDP_VARIABLE_get")] + public static extern string SWITCH_R_SDP_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_L_SDP_VARIABLE_get")] + public static extern string SWITCH_L_SDP_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_B_SDP_VARIABLE_get")] + public static extern string SWITCH_B_SDP_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_BRIDGE_VARIABLE_get")] + public static extern string SWITCH_BRIDGE_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SIGNAL_BRIDGE_VARIABLE_get")] + public static extern string SWITCH_SIGNAL_BRIDGE_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SIGNAL_BOND_VARIABLE_get")] + public static extern string SWITCH_SIGNAL_BOND_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_ORIGINATOR_VARIABLE_get")] + public static extern string SWITCH_ORIGINATOR_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_ORIGINATOR_CODEC_VARIABLE_get")] + public static extern string SWITCH_ORIGINATOR_CODEC_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_ORIGINATOR_VIDEO_CODEC_VARIABLE_get")] + public static extern string SWITCH_ORIGINATOR_VIDEO_CODEC_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_LOCAL_MEDIA_IP_VARIABLE_get")] + public static extern string SWITCH_LOCAL_MEDIA_IP_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_LOCAL_MEDIA_PORT_VARIABLE_get")] + public static extern string SWITCH_LOCAL_MEDIA_PORT_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_REMOTE_MEDIA_IP_VARIABLE_get")] + public static extern string SWITCH_REMOTE_MEDIA_IP_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_REMOTE_MEDIA_PORT_VARIABLE_get")] + public static extern string SWITCH_REMOTE_MEDIA_PORT_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_REMOTE_VIDEO_IP_VARIABLE_get")] + public static extern string SWITCH_REMOTE_VIDEO_IP_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_REMOTE_VIDEO_PORT_VARIABLE_get")] + public static extern string SWITCH_REMOTE_VIDEO_PORT_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_LOCAL_VIDEO_IP_VARIABLE_get")] + public static extern string SWITCH_LOCAL_VIDEO_IP_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_LOCAL_VIDEO_PORT_VARIABLE_get")] + public static extern string SWITCH_LOCAL_VIDEO_PORT_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE_get")] + public static extern string SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_PARK_AFTER_BRIDGE_VARIABLE_get")] + public static extern string SWITCH_PARK_AFTER_BRIDGE_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE_get")] + public static extern string SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_EXEC_AFTER_BRIDGE_APP_VARIABLE_get")] + public static extern string SWITCH_EXEC_AFTER_BRIDGE_APP_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_EXEC_AFTER_BRIDGE_ARG_VARIABLE_get")] + public static extern string SWITCH_EXEC_AFTER_BRIDGE_ARG_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_MAX_FORWARDS_VARIABLE_get")] + public static extern string SWITCH_MAX_FORWARDS_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_DISABLE_APP_LOG_VARIABLE_get")] + public static extern string SWITCH_DISABLE_APP_LOG_VARIABLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SPEECH_KEY_get")] + public static extern string SWITCH_SPEECH_KEY_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_UUID_BRIDGE_get")] + public static extern string SWITCH_UUID_BRIDGE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_BITS_PER_BYTE_get")] + public static extern int SWITCH_BITS_PER_BYTE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_DEFAULT_FILE_BUFFER_LEN_get")] + public static extern int SWITCH_DEFAULT_FILE_BUFFER_LEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_DTMF_LOG_LEN_get")] + public static extern int SWITCH_DTMF_LOG_LEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dtmf_t_digit_set")] + public static extern void switch_dtmf_t_digit_set(HandleRef jarg1, char jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dtmf_t_digit_get")] + public static extern char switch_dtmf_t_digit_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dtmf_t_duration_set")] + public static extern void switch_dtmf_t_duration_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dtmf_t_duration_get")] + public static extern uint switch_dtmf_t_duration_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_dtmf_t")] + public static extern IntPtr new_switch_dtmf_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_dtmf_t")] + public static extern void delete_switch_dtmf_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_buf_set")] + public static extern void switch_bitpack_t_buf_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_buf_get")] + public static extern IntPtr switch_bitpack_t_buf_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_buflen_set")] + public static extern void switch_bitpack_t_buflen_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_buflen_get")] + public static extern uint switch_bitpack_t_buflen_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_cur_set")] + public static extern void switch_bitpack_t_cur_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_cur_get")] + public static extern IntPtr switch_bitpack_t_cur_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_bytes_set")] + public static extern void switch_bitpack_t_bytes_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_bytes_get")] + public static extern uint switch_bitpack_t_bytes_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_bits_tot_set")] + public static extern void switch_bitpack_t_bits_tot_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_bits_tot_get")] + public static extern uint switch_bitpack_t_bits_tot_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_bits_cur_set")] + public static extern void switch_bitpack_t_bits_cur_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_bits_cur_get")] + public static extern byte switch_bitpack_t_bits_cur_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_bits_rem_set")] + public static extern void switch_bitpack_t_bits_rem_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_bits_rem_get")] + public static extern byte switch_bitpack_t_bits_rem_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_frame_bits_set")] + public static extern void switch_bitpack_t_frame_bits_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_frame_bits_get")] + public static extern byte switch_bitpack_t_frame_bits_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_shiftby_set")] + public static extern void switch_bitpack_t_shiftby_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_shiftby_get")] + public static extern byte switch_bitpack_t_shiftby_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_this_byte_set")] + public static extern void switch_bitpack_t_this_byte_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_this_byte_get")] + public static extern byte switch_bitpack_t_this_byte_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_under_set")] + public static extern void switch_bitpack_t_under_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_under_get")] + public static extern byte switch_bitpack_t_under_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_over_set")] + public static extern void switch_bitpack_t_over_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_over_get")] + public static extern byte switch_bitpack_t_over_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_mode_set")] + public static extern void switch_bitpack_t_mode_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_bitpack_t_mode_get")] + public static extern int switch_bitpack_t_mode_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_bitpack_t")] + public static extern IntPtr new_switch_bitpack_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_bitpack_t")] + public static extern void delete_switch_bitpack_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_base_dir_set")] + public static extern void switch_directories_base_dir_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_base_dir_get")] + public static extern string switch_directories_base_dir_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_mod_dir_set")] + public static extern void switch_directories_mod_dir_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_mod_dir_get")] + public static extern string switch_directories_mod_dir_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_conf_dir_set")] + public static extern void switch_directories_conf_dir_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_conf_dir_get")] + public static extern string switch_directories_conf_dir_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_log_dir_set")] + public static extern void switch_directories_log_dir_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_log_dir_get")] + public static extern string switch_directories_log_dir_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_run_dir_set")] + public static extern void switch_directories_run_dir_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_run_dir_get")] + public static extern string switch_directories_run_dir_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_db_dir_set")] + public static extern void switch_directories_db_dir_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_db_dir_get")] + public static extern string switch_directories_db_dir_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_script_dir_set")] + public static extern void switch_directories_script_dir_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_script_dir_get")] + public static extern string switch_directories_script_dir_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_temp_dir_set")] + public static extern void switch_directories_temp_dir_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_temp_dir_get")] + public static extern string switch_directories_temp_dir_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_htdocs_dir_set")] + public static extern void switch_directories_htdocs_dir_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_htdocs_dir_get")] + public static extern string switch_directories_htdocs_dir_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_grammar_dir_set")] + public static extern void switch_directories_grammar_dir_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_grammar_dir_get")] + public static extern string switch_directories_grammar_dir_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_storage_dir_set")] + public static extern void switch_directories_storage_dir_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_storage_dir_get")] + public static extern string switch_directories_storage_dir_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_recordings_dir_set")] + public static extern void switch_directories_recordings_dir_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_recordings_dir_get")] + public static extern string switch_directories_recordings_dir_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_sounds_dir_set")] + public static extern void switch_directories_sounds_dir_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directories_sounds_dir_get")] + public static extern string switch_directories_sounds_dir_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_directories")] + public static extern IntPtr new_switch_directories(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_directories")] + public static extern void delete_switch_directories(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_GLOBAL_dirs_set")] + public static extern void SWITCH_GLOBAL_dirs_set(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_GLOBAL_dirs_get")] + public static extern IntPtr SWITCH_GLOBAL_dirs_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_MAX_STACKS_get")] + public static extern int SWITCH_MAX_STACKS_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_THREAD_STACKSIZE_get")] + public static extern int SWITCH_THREAD_STACKSIZE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SYSTEM_THREAD_STACKSIZE_get")] + public static extern int SWITCH_SYSTEM_THREAD_STACKSIZE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_MAX_INTERVAL_get")] + public static extern int SWITCH_MAX_INTERVAL_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_INTERVAL_PAD_get")] + public static extern int SWITCH_INTERVAL_PAD_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_MAX_SAMPLE_LEN_get")] + public static extern int SWITCH_MAX_SAMPLE_LEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_BYTES_PER_SAMPLE_get")] + public static extern int SWITCH_BYTES_PER_SAMPLE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_RECOMMENDED_BUFFER_SIZE_get")] + public static extern int SWITCH_RECOMMENDED_BUFFER_SIZE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_MAX_CODECS_get")] + public static extern int SWITCH_MAX_CODECS_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_MAX_STATE_HANDLERS_get")] + public static extern int SWITCH_MAX_STATE_HANDLERS_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_QUEUE_LEN_get")] + public static extern int SWITCH_CORE_QUEUE_LEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_MAX_MANAGEMENT_BUFFER_LEN_get")] + public static extern int SWITCH_MAX_MANAGEMENT_BUFFER_LEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_raw_bytes_set")] + public static extern void switch_rtp_numbers_t_raw_bytes_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_raw_bytes_get")] + public static extern IntPtr switch_rtp_numbers_t_raw_bytes_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_media_bytes_set")] + public static extern void switch_rtp_numbers_t_media_bytes_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_media_bytes_get")] + public static extern IntPtr switch_rtp_numbers_t_media_bytes_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_packet_count_set")] + public static extern void switch_rtp_numbers_t_packet_count_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_packet_count_get")] + public static extern IntPtr switch_rtp_numbers_t_packet_count_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_media_packet_count_set")] + public static extern void switch_rtp_numbers_t_media_packet_count_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_media_packet_count_get")] + public static extern IntPtr switch_rtp_numbers_t_media_packet_count_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_skip_packet_count_set")] + public static extern void switch_rtp_numbers_t_skip_packet_count_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_skip_packet_count_get")] + public static extern IntPtr switch_rtp_numbers_t_skip_packet_count_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_jb_packet_count_set")] + public static extern void switch_rtp_numbers_t_jb_packet_count_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_jb_packet_count_get")] + public static extern IntPtr switch_rtp_numbers_t_jb_packet_count_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_dtmf_packet_count_set")] + public static extern void switch_rtp_numbers_t_dtmf_packet_count_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_dtmf_packet_count_get")] + public static extern IntPtr switch_rtp_numbers_t_dtmf_packet_count_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_cng_packet_count_set")] + public static extern void switch_rtp_numbers_t_cng_packet_count_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_cng_packet_count_get")] + public static extern IntPtr switch_rtp_numbers_t_cng_packet_count_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_numbers_t_flush_packet_count_set")] + public static extern void switch_rtp_numbers_t_flush_packet_count_set(HandleRef jarg1, HandleRef jarg2); + + [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_new_switch_rtp_numbers_t")] + public static extern IntPtr new_switch_rtp_numbers_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_rtp_numbers_t")] + public static extern void delete_switch_rtp_numbers_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_stats_t_inbound_set")] + public static extern void switch_rtp_stats_t_inbound_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_stats_t_inbound_get")] + public static extern IntPtr switch_rtp_stats_t_inbound_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_stats_t_outbound_set")] + public static extern void switch_rtp_stats_t_outbound_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_stats_t_outbound_get")] + public static extern IntPtr switch_rtp_stats_t_outbound_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_rtp_stats_t")] + public static extern IntPtr new_switch_rtp_stats_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_rtp_stats_t")] + public static extern void delete_switch_rtp_stats_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_RTP_CNG_PAYLOAD_get")] + public static extern int SWITCH_RTP_CNG_PAYLOAD_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_version_set")] + public static extern void switch_rtp_hdr_t_version_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_version_get")] + public static extern uint switch_rtp_hdr_t_version_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_p_set")] + public static extern void switch_rtp_hdr_t_p_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_p_get")] + public static extern uint switch_rtp_hdr_t_p_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_x_set")] + public static extern void switch_rtp_hdr_t_x_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_x_get")] + public static extern uint switch_rtp_hdr_t_x_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_cc_set")] + public static extern void switch_rtp_hdr_t_cc_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_cc_get")] + public static extern uint switch_rtp_hdr_t_cc_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_m_set")] + public static extern void switch_rtp_hdr_t_m_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_m_get")] + public static extern uint switch_rtp_hdr_t_m_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_pt_set")] + public static extern void switch_rtp_hdr_t_pt_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_pt_get")] + public static extern uint switch_rtp_hdr_t_pt_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_seq_set")] + public static extern void switch_rtp_hdr_t_seq_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_seq_get")] + public static extern uint switch_rtp_hdr_t_seq_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_ts_set")] + public static extern void switch_rtp_hdr_t_ts_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_ts_get")] + public static extern uint switch_rtp_hdr_t_ts_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_ssrc_set")] + public static extern void switch_rtp_hdr_t_ssrc_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_hdr_t_ssrc_get")] + public static extern uint switch_rtp_hdr_t_ssrc_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_rtp_hdr_t")] + public static extern IntPtr new_switch_rtp_hdr_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_rtp_hdr_t")] + public static extern void delete_switch_rtp_hdr_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_version_set")] + public static extern void switch_rtcp_hdr_t_version_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_version_get")] + public static extern uint switch_rtcp_hdr_t_version_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_p_set")] + public static extern void switch_rtcp_hdr_t_p_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_p_get")] + public static extern uint switch_rtcp_hdr_t_p_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_count_set")] + public static extern void switch_rtcp_hdr_t_count_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_count_get")] + public static extern uint switch_rtcp_hdr_t_count_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_type_set")] + public static extern void switch_rtcp_hdr_t_type_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_type_get")] + public static extern uint switch_rtcp_hdr_t_type_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_length_set")] + public static extern void switch_rtcp_hdr_t_length_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_hdr_t_length_get")] + public static extern uint switch_rtcp_hdr_t_length_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_rtcp_hdr_t")] + public static extern IntPtr new_switch_rtcp_hdr_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_rtcp_hdr_t")] + public static extern void delete_switch_rtcp_hdr_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxVersion_set")] + public static extern void switch_t38_options_t_T38FaxVersion_set(HandleRef jarg1, ushort jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxVersion_get")] + public static extern ushort switch_t38_options_t_T38FaxVersion_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38MaxBitRate_set")] + public static extern void switch_t38_options_t_T38MaxBitRate_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38MaxBitRate_get")] + public static extern uint switch_t38_options_t_T38MaxBitRate_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxFillBitRemoval_set")] + public static extern void switch_t38_options_t_T38FaxFillBitRemoval_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxFillBitRemoval_get")] + public static extern int switch_t38_options_t_T38FaxFillBitRemoval_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxTranscodingMMR_set")] + public static extern void switch_t38_options_t_T38FaxTranscodingMMR_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxTranscodingMMR_get")] + public static extern int switch_t38_options_t_T38FaxTranscodingMMR_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxTranscodingJBIG_set")] + public static extern void switch_t38_options_t_T38FaxTranscodingJBIG_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxTranscodingJBIG_get")] + public static extern int switch_t38_options_t_T38FaxTranscodingJBIG_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxRateManagement_set")] + public static extern void switch_t38_options_t_T38FaxRateManagement_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxRateManagement_get")] + public static extern string switch_t38_options_t_T38FaxRateManagement_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxMaxBuffer_set")] + public static extern void switch_t38_options_t_T38FaxMaxBuffer_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxMaxBuffer_get")] + public static extern uint switch_t38_options_t_T38FaxMaxBuffer_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxMaxDatagram_set")] + public static extern void switch_t38_options_t_T38FaxMaxDatagram_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxMaxDatagram_get")] + public static extern uint switch_t38_options_t_T38FaxMaxDatagram_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxUdpEC_set")] + public static extern void switch_t38_options_t_T38FaxUdpEC_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38FaxUdpEC_get")] + public static extern string switch_t38_options_t_T38FaxUdpEC_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38VendorInfo_set")] + public static extern void switch_t38_options_t_T38VendorInfo_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_T38VendorInfo_get")] + public static extern string switch_t38_options_t_T38VendorInfo_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_remote_ip_set")] + public static extern void switch_t38_options_t_remote_ip_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_remote_ip_get")] + public static extern string switch_t38_options_t_remote_ip_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_remote_port_set")] + public static extern void switch_t38_options_t_remote_port_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_remote_port_get")] + public static extern uint switch_t38_options_t_remote_port_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_local_ip_set")] + public static extern void switch_t38_options_t_local_ip_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_local_ip_get")] + public static extern string switch_t38_options_t_local_ip_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_local_port_set")] + public static extern void switch_t38_options_t_local_port_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_t38_options_t_local_port_get")] + public static extern uint switch_t38_options_t_local_port_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_t38_options_t")] + public static extern IntPtr new_switch_t38_options_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_t38_options_t")] + public static extern void delete_switch_t38_options_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_callback_match_node_val_set")] + public static extern void switch_console_callback_match_node_val_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_callback_match_node_val_get")] + public static extern string switch_console_callback_match_node_val_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_callback_match_node_next_set")] + public static extern void switch_console_callback_match_node_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_callback_match_node_next_get")] + public static extern IntPtr switch_console_callback_match_node_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_console_callback_match_node")] + public static extern IntPtr new_switch_console_callback_match_node(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_console_callback_match_node")] + public static extern void delete_switch_console_callback_match_node(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_callback_match_head_set")] + public static extern void switch_console_callback_match_head_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_callback_match_head_get")] + public static extern IntPtr switch_console_callback_match_head_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_callback_match_end_set")] + public static extern void switch_console_callback_match_end_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_callback_match_end_get")] + public static extern IntPtr switch_console_callback_match_end_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_callback_match_count_set")] + public static extern void switch_console_callback_match_count_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_callback_match_count_get")] + public static extern int switch_console_callback_match_count_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_callback_match_dynamic_set")] + public static extern void switch_console_callback_match_dynamic_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_callback_match_dynamic_get")] + public static extern int switch_console_callback_match_dynamic_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_console_callback_match")] + public static extern IntPtr new_switch_console_callback_match(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_console_callback_match")] + public static extern void delete_switch_console_callback_match(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_input_args_t_input_callback_set")] + public static extern void switch_input_args_t_input_callback_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_input_args_t_input_callback_get")] + public static extern IntPtr switch_input_args_t_input_callback_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_input_args_t_buf_set")] + public static extern void switch_input_args_t_buf_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_input_args_t_buf_get")] + public static extern IntPtr switch_input_args_t_buf_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_input_args_t_buflen_set")] + public static extern void switch_input_args_t_buflen_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_input_args_t_buflen_get")] + public static extern uint switch_input_args_t_buflen_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_input_args_t_read_frame_callback_set")] + public static extern void switch_input_args_t_read_frame_callback_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_input_args_t_read_frame_callback_get")] + public static extern IntPtr switch_input_args_t_read_frame_callback_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_input_args_t_user_data_set")] + public static extern void switch_input_args_t_user_data_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_input_args_t_user_data_get")] + public static extern IntPtr switch_input_args_t_user_data_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_input_args_t")] + public static extern IntPtr new_switch_input_args_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_input_args_t")] + public static extern void delete_switch_input_args_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_args_t_type_set")] + public static extern void switch_say_args_t_type_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_args_t_type_get")] + public static extern int switch_say_args_t_type_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_args_t_method_set")] + public static extern void switch_say_args_t_method_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_args_t_method_get")] + public static extern int switch_say_args_t_method_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_args_t_gender_set")] + public static extern void switch_say_args_t_gender_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_args_t_gender_get")] + public static extern int switch_say_args_t_gender_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_say_args_t")] + public static extern IntPtr new_switch_say_args_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_say_args_t")] + public static extern void delete_switch_say_args_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_API_VERSION_get")] + public static extern int SWITCH_API_VERSION_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_loadable_module_function_table_t_switch_api_version_set")] + public static extern void switch_loadable_module_function_table_t_switch_api_version_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_loadable_module_function_table_t_switch_api_version_get")] + public static extern int switch_loadable_module_function_table_t_switch_api_version_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_loadable_module_function_table_t_load_set")] + public static extern void switch_loadable_module_function_table_t_load_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_loadable_module_function_table_t_load_get")] + public static extern IntPtr switch_loadable_module_function_table_t_load_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_loadable_module_function_table_t_shutdown_set")] + public static extern void switch_loadable_module_function_table_t_shutdown_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_loadable_module_function_table_t_shutdown_get")] + public static extern IntPtr switch_loadable_module_function_table_t_shutdown_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_loadable_module_function_table_t_runtime_set")] + public static extern void switch_loadable_module_function_table_t_runtime_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_loadable_module_function_table_t_runtime_get")] + public static extern IntPtr switch_loadable_module_function_table_t_runtime_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_loadable_module_function_table_t_flags_set")] + public static extern void switch_loadable_module_function_table_t_flags_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_loadable_module_function_table_t_flags_get")] + public static extern uint switch_loadable_module_function_table_t_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_loadable_module_function_table_t")] + public static extern IntPtr new_switch_loadable_module_function_table_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_loadable_module_function_table_t")] + public static extern void delete_switch_loadable_module_function_table_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_close")] + public static extern int switch_core_db_close(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_open")] + public static extern int switch_core_db_open(string jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_column_text")] + public static extern IntPtr switch_core_db_column_text(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_column_name")] + public static extern string switch_core_db_column_name(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_column_count")] + public static extern int switch_core_db_column_count(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_errmsg")] + public static extern string switch_core_db_errmsg(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_exec")] + public static extern int switch_core_db_exec(HandleRef jarg1, string jarg2, HandleRef jarg3, HandleRef jarg4, ref string jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_finalize")] + public static extern int switch_core_db_finalize(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_prepare")] + public static extern int switch_core_db_prepare(HandleRef jarg1, string jarg2, int jarg3, HandleRef jarg4, ref string jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_step")] + public static extern int switch_core_db_step(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_reset")] + public static extern int switch_core_db_reset(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_bind_int")] + public static extern int switch_core_db_bind_int(HandleRef jarg1, int jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_bind_int64")] + public static extern int switch_core_db_bind_int64(HandleRef jarg1, int jarg2, long jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_bind_text")] + public static extern int switch_core_db_bind_text(HandleRef jarg1, int jarg2, string jarg3, int jarg4, HandleRef jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_bind_double")] + public static extern int switch_core_db_bind_double(HandleRef jarg1, int jarg2, double jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_last_insert_rowid")] + public static extern long switch_core_db_last_insert_rowid(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_get_table")] + public static extern int switch_core_db_get_table(HandleRef jarg1, string jarg2, HandleRef jarg3, HandleRef jarg4, HandleRef jarg5, ref string jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_free_table")] + public static extern void switch_core_db_free_table(ref string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_free")] + public static extern void switch_core_db_free(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_changes")] + public static extern int switch_core_db_changes(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_OK_get")] + public static extern int SWITCH_CORE_DB_OK_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_ERROR_get")] + public static extern int SWITCH_CORE_DB_ERROR_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_INTERNAL_get")] + public static extern int SWITCH_CORE_DB_INTERNAL_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_PERM_get")] + public static extern int SWITCH_CORE_DB_PERM_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_ABORT_get")] + public static extern int SWITCH_CORE_DB_ABORT_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_BUSY_get")] + public static extern int SWITCH_CORE_DB_BUSY_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_LOCKED_get")] + public static extern int SWITCH_CORE_DB_LOCKED_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_NOMEM_get")] + public static extern int SWITCH_CORE_DB_NOMEM_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_READONLY_get")] + public static extern int SWITCH_CORE_DB_READONLY_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_INTERRUPT_get")] + public static extern int SWITCH_CORE_DB_INTERRUPT_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_IOERR_get")] + public static extern int SWITCH_CORE_DB_IOERR_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_CORRUPT_get")] + public static extern int SWITCH_CORE_DB_CORRUPT_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_NOTFOUND_get")] + public static extern int SWITCH_CORE_DB_NOTFOUND_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_FULL_get")] + public static extern int SWITCH_CORE_DB_FULL_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_CANTOPEN_get")] + public static extern int SWITCH_CORE_DB_CANTOPEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_PROTOCOL_get")] + public static extern int SWITCH_CORE_DB_PROTOCOL_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_EMPTY_get")] + public static extern int SWITCH_CORE_DB_EMPTY_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_SCHEMA_get")] + public static extern int SWITCH_CORE_DB_SCHEMA_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_TOOBIG_get")] + public static extern int SWITCH_CORE_DB_TOOBIG_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_CONSTRAINT_get")] + public static extern int SWITCH_CORE_DB_CONSTRAINT_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_MISMATCH_get")] + public static extern int SWITCH_CORE_DB_MISMATCH_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_MISUSE_get")] + public static extern int SWITCH_CORE_DB_MISUSE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_NOLFS_get")] + public static extern int SWITCH_CORE_DB_NOLFS_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_AUTH_get")] + public static extern int SWITCH_CORE_DB_AUTH_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_FORMAT_get")] + public static extern int SWITCH_CORE_DB_FORMAT_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_RANGE_get")] + public static extern int SWITCH_CORE_DB_RANGE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_NOTADB_get")] + public static extern int SWITCH_CORE_DB_NOTADB_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_ROW_get")] + public static extern int SWITCH_CORE_DB_ROW_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CORE_DB_DONE_get")] + public static extern int SWITCH_CORE_DB_DONE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_regex_compile")] + public static extern IntPtr switch_regex_compile(string jarg1, int jarg2, ref string jarg3, HandleRef jarg4, HandleRef jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_regex_copy_substring")] + public static extern int switch_regex_copy_substring(string jarg1, HandleRef jarg2, int jarg3, int jarg4, string jarg5, int jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_regex_free")] + public static extern void switch_regex_free(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_regex_perform")] + public static extern int switch_regex_perform(string jarg1, string jarg2, HandleRef jarg3, HandleRef jarg4, uint jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_perform_substitution")] + public static extern void switch_perform_substitution(HandleRef jarg1, int jarg2, string jarg3, string jarg4, string jarg5, HandleRef jarg6, HandleRef jarg7); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_regex_match")] + public static extern int switch_regex_match(string jarg1, string jarg2); + + [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_MAX_CORE_THREAD_SESSION_OBJS_get")] + public static extern int SWITCH_MAX_CORE_THREAD_SESSION_OBJS_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_MAX_STREAMS_get")] + public static extern int SWITCH_MAX_STREAMS_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_time_duration_mms_set")] + public static extern void switch_core_time_duration_mms_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_time_duration_mms_get")] + public static extern uint switch_core_time_duration_mms_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_time_duration_ms_set")] + public static extern void switch_core_time_duration_ms_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_time_duration_ms_get")] + public static extern uint switch_core_time_duration_ms_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_time_duration_sec_set")] + public static extern void switch_core_time_duration_sec_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_time_duration_sec_get")] + public static extern uint switch_core_time_duration_sec_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_time_duration_min_set")] + public static extern void switch_core_time_duration_min_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_time_duration_min_get")] + public static extern uint switch_core_time_duration_min_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_time_duration_hr_set")] + public static extern void switch_core_time_duration_hr_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_time_duration_hr_get")] + public static extern uint switch_core_time_duration_hr_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_time_duration_day_set")] + public static extern void switch_core_time_duration_day_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_time_duration_day_get")] + public static extern uint switch_core_time_duration_day_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_time_duration_yr_set")] + public static extern void switch_core_time_duration_yr_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_time_duration_yr_get")] + public static extern uint switch_core_time_duration_yr_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_core_time_duration")] + public static extern IntPtr new_switch_core_time_duration(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_core_time_duration")] + public static extern void delete_switch_core_time_duration(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_app_log_app_set")] + public static extern void switch_app_log_app_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_app_log_app_get")] + public static extern string switch_app_log_app_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_app_log_arg_set")] + public static extern void switch_app_log_arg_set(HandleRef jarg1, string jarg2); + + [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_next_set")] + public static extern void switch_app_log_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_app_log_next_get")] + public static extern IntPtr switch_app_log_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_app_log")] + public static extern IntPtr new_switch_app_log(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_app_log")] + public static extern void delete_switch_app_log(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_MESSAGE_STRING_ARG_MAX_get")] + public static extern int MESSAGE_STRING_ARG_MAX_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_from_set")] + public static extern void switch_core_session_message_from_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_from_get")] + public static extern string switch_core_session_message_from_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_message_id_set")] + public static extern void switch_core_session_message_message_id_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_message_id_get")] + public static extern int switch_core_session_message_message_id_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_numeric_arg_set")] + public static extern void switch_core_session_message_numeric_arg_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_numeric_arg_get")] + public static extern int switch_core_session_message_numeric_arg_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_string_arg_set")] + public static extern void switch_core_session_message_string_arg_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_string_arg_get")] + public static extern string switch_core_session_message_string_arg_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_string_arg_size_set")] + public static extern void switch_core_session_message_string_arg_size_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_string_arg_size_get")] + public static extern IntPtr switch_core_session_message_string_arg_size_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_pointer_arg_set")] + public static extern void switch_core_session_message_pointer_arg_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_pointer_arg_get")] + public static extern IntPtr switch_core_session_message_pointer_arg_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_pointer_arg_size_set")] + public static extern void switch_core_session_message_pointer_arg_size_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_pointer_arg_size_get")] + public static extern IntPtr switch_core_session_message_pointer_arg_size_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_numeric_reply_set")] + public static extern void switch_core_session_message_numeric_reply_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_numeric_reply_get")] + public static extern int switch_core_session_message_numeric_reply_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_string_reply_set")] + public static extern void switch_core_session_message_string_reply_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_string_reply_get")] + public static extern string switch_core_session_message_string_reply_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_string_reply_size_set")] + public static extern void switch_core_session_message_string_reply_size_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_string_reply_size_get")] + public static extern IntPtr switch_core_session_message_string_reply_size_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_pointer_reply_set")] + public static extern void switch_core_session_message_pointer_reply_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_pointer_reply_get")] + public static extern IntPtr switch_core_session_message_pointer_reply_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_pointer_reply_size_set")] + public static extern void switch_core_session_message_pointer_reply_size_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_pointer_reply_size_get")] + public static extern IntPtr switch_core_session_message_pointer_reply_size_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_flags_set")] + public static extern void switch_core_session_message_flags_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_flags_get")] + public static extern uint switch_core_session_message_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message__file_set")] + public static extern void switch_core_session_message__file_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message__file_get")] + public static extern string switch_core_session_message__file_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message__func_set")] + public static extern void switch_core_session_message__func_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message__func_get")] + public static extern string switch_core_session_message__func_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message__line_set")] + public static extern void switch_core_session_message__line_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message__line_get")] + public static extern int switch_core_session_message__line_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_string_array_arg_set")] + public static extern void switch_core_session_message_string_array_arg_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_string_array_arg_get")] + public static extern IntPtr switch_core_session_message_string_array_arg_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_delivery_time_set")] + public static extern void switch_core_session_message_delivery_time_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_delivery_time_get")] + public static extern IntPtr switch_core_session_message_delivery_time_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_core_session_message")] + public static extern IntPtr new_switch_core_session_message(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_core_session_message")] + public static extern void delete_switch_core_session_message(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_thread_session_running_set")] + public static extern void switch_core_thread_session_running_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_thread_session_running_get")] + public static extern int switch_core_thread_session_running_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_thread_session_mutex_set")] + public static extern void switch_core_thread_session_mutex_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_thread_session_mutex_get")] + public static extern IntPtr switch_core_thread_session_mutex_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_thread_session_objs_set")] + public static extern void switch_core_thread_session_objs_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_thread_session_objs_get")] + public static extern IntPtr switch_core_thread_session_objs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_thread_session_input_callback_set")] + public static extern void switch_core_thread_session_input_callback_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_thread_session_input_callback_get")] + public static extern IntPtr switch_core_thread_session_input_callback_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_thread_session_pool_set")] + public static extern void switch_core_thread_session_pool_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_thread_session_pool_get")] + public static extern IntPtr switch_core_thread_session_pool_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_core_thread_session")] + public static extern IntPtr new_switch_core_thread_session(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_core_thread_session")] + public static extern void delete_switch_core_thread_session(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_sched_heartbeat")] + public static extern void switch_core_session_sched_heartbeat(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_unsched_heartbeat")] + public static extern void switch_core_session_unsched_heartbeat(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_enable_heartbeat")] + public static extern void switch_core_session_enable_heartbeat(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_disable_heartbeat")] + public static extern void switch_core_session_disable_heartbeat(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_add")] + public static extern int switch_core_media_bug_add(HandleRef jarg1, string jarg2, string jarg3, HandleRef jarg4, HandleRef jarg5, HandleRef jarg6, uint jarg7, HandleRef jarg8); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_pause")] + public static extern void switch_core_media_bug_pause(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_resume")] + public static extern void switch_core_media_bug_resume(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_inuse")] + public static extern void switch_core_media_bug_inuse(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_get_user_data")] + public static extern IntPtr switch_core_media_bug_get_user_data(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_get_write_replace_frame")] + public static extern IntPtr switch_core_media_bug_get_write_replace_frame(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_set_write_replace_frame")] + public static extern void switch_core_media_bug_set_write_replace_frame(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_get_read_replace_frame")] + public static extern IntPtr switch_core_media_bug_get_read_replace_frame(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_get_session")] + public static extern IntPtr switch_core_media_bug_get_session(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_test_flag")] + public static extern uint switch_core_media_bug_test_flag(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_set_flag")] + public static extern uint switch_core_media_bug_set_flag(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_clear_flag")] + public static extern uint switch_core_media_bug_clear_flag(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_set_read_replace_frame")] + public static extern void switch_core_media_bug_set_read_replace_frame(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_remove")] + public static extern int switch_core_media_bug_remove(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_prune")] + public static extern uint switch_core_media_bug_prune(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_remove_callback")] + public static extern int switch_core_media_bug_remove_callback(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_close")] + public static extern int switch_core_media_bug_close(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_remove_all")] + public static extern int switch_core_media_bug_remove_all(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_read")] + public static extern int switch_core_media_bug_read(HandleRef jarg1, HandleRef jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_flush")] + public static extern void switch_core_media_bug_flush(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_media_bug_flush_all")] + public static extern int switch_core_media_bug_flush_all(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_port_allocator_new")] + public static extern int switch_core_port_allocator_new(ushort jarg1, ushort jarg2, uint jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_port_allocator_request_port")] + public static extern int switch_core_port_allocator_request_port(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_port_allocator_free_port")] + public static extern int switch_core_port_allocator_free_port(HandleRef jarg1, ushort jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_port_allocator_destroy")] + public static extern void switch_core_port_allocator_destroy(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_init")] + public static extern int switch_core_init(uint jarg1, int jarg2, ref string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_init_and_modload")] + public static extern int switch_core_init_and_modload(uint jarg1, int jarg2, ref string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_limit")] + public static extern uint switch_core_session_limit(uint jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_sessions_per_second")] + public static extern uint switch_core_sessions_per_second(uint jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_destroy")] + public static extern int switch_core_destroy(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_read_lock")] + public static extern int switch_core_session_read_lock(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_read_lock_hangup")] + public static extern int switch_core_session_read_lock_hangup(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_write_lock")] + public static extern void switch_core_session_write_lock(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_rwunlock")] + public static extern void switch_core_session_rwunlock(HandleRef jarg1); + + [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_remove_state_handler")] + public static extern void switch_core_remove_state_handler(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_get_state_handler")] + public static extern IntPtr switch_core_get_state_handler(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_memory_pool_tag")] + public static extern void switch_core_memory_pool_tag(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_perform_new_memory_pool")] + public static extern int switch_core_perform_new_memory_pool(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_perform_destroy_memory_pool")] + public static extern int switch_core_perform_destroy_memory_pool(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_memory_pool_set_data")] + public static extern void switch_core_memory_pool_set_data(HandleRef jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_memory_pool_get_data")] + public static extern IntPtr switch_core_memory_pool_get_data(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_run")] + public static extern void switch_core_session_run(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_running")] + public static extern uint switch_core_session_running(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_started")] + public static extern uint switch_core_session_started(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_perform_permanent_alloc")] + public static extern IntPtr switch_core_perform_permanent_alloc(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_perform_alloc")] + public static extern IntPtr switch_core_perform_alloc(HandleRef jarg1, HandleRef jarg2, string jarg3, string jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_perform_session_alloc")] + public static extern IntPtr switch_core_perform_session_alloc(HandleRef jarg1, HandleRef jarg2, string jarg3, string jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_perform_permanent_strdup")] + public static extern string switch_core_perform_permanent_strdup(string jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_perform_session_strdup")] + public static extern string switch_core_perform_session_strdup(HandleRef jarg1, string jarg2, string jarg3, string jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_perform_strdup")] + public static extern string switch_core_perform_strdup(HandleRef jarg1, string jarg2, string jarg3, string jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_sprintf")] + public static extern string switch_core_session_sprintf(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_sprintf")] + public static extern string switch_core_sprintf(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_pool")] + public static extern IntPtr switch_core_session_get_pool(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_request_xml")] + public static extern IntPtr switch_core_session_request_xml(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_request_uuid")] + public static extern IntPtr switch_core_session_request_uuid(HandleRef jarg1, int jarg2, HandleRef jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_uuid")] + public static extern int switch_core_session_set_uuid(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_perform_destroy")] + public static extern void switch_core_session_perform_destroy(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_destroy_state")] + public static extern void switch_core_session_destroy_state(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_reporting_state")] + public static extern void switch_core_session_reporting_state(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_hangup_state")] + public static extern void switch_core_session_hangup_state(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_count")] + public static extern uint switch_core_session_count(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_id")] + public static extern IntPtr switch_core_session_get_id(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_id")] + public static extern IntPtr switch_core_session_id(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_request_by_name")] + public static extern IntPtr switch_core_session_request_by_name(string jarg1, int jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_thread_launch")] + public static extern int switch_core_session_thread_launch(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_channel")] + public static extern IntPtr switch_core_session_get_channel(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_wake_session_thread")] + public static extern void switch_core_session_wake_session_thread(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_signal_state_change")] + public static extern void switch_core_session_signal_state_change(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_uuid")] + public static extern string switch_core_session_get_uuid(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_loglevel")] + public static extern int switch_core_session_set_loglevel(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_loglevel")] + public static extern int switch_core_session_get_loglevel(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_soft_lock")] + public static extern void switch_core_session_soft_lock(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_soft_unlock")] + public static extern void switch_core_session_soft_unlock(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_get_uuid")] + public static extern string switch_core_get_uuid(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_locate")] + public static extern IntPtr switch_core_session_locate(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_force_locate")] + public static extern IntPtr switch_core_session_force_locate(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_get_variable")] + public static extern string switch_core_get_variable(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_set_variable")] + public static extern void switch_core_set_variable(string jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_set_var_conditional")] + public static extern int switch_core_set_var_conditional(string jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_dump_variables")] + public static extern void switch_core_dump_variables(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_hupall")] + public static extern void switch_core_session_hupall(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_hupall_matching_var")] + public static extern void switch_core_session_hupall_matching_var(string jarg1, string jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_hupall_endpoint")] + public static extern void switch_core_session_hupall_endpoint(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_partner")] + public static extern int switch_core_session_get_partner(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_message_send")] + public static extern int switch_core_session_message_send(string jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_queue_message")] + public static extern int switch_core_session_queue_message(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_free_message")] + public static extern void switch_core_session_free_message(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_pass_indication")] + public static extern int switch_core_session_pass_indication(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_queue_indication")] + public static extern int switch_core_session_queue_indication(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_dequeue_message")] + public static extern int switch_core_session_dequeue_message(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_flush_message")] + public static extern int switch_core_session_flush_message(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_event_send")] + public static extern int switch_core_session_event_send(string jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_app_log")] + public static extern IntPtr switch_core_session_get_app_log(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_exec")] + public static extern int switch_core_session_exec(HandleRef jarg1, HandleRef jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_execute_application_get_flags")] + public static extern int switch_core_session_execute_application_get_flags(HandleRef jarg1, string jarg2, string jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_app_flags")] + public static extern int switch_core_session_get_app_flags(string jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_execute_exten")] + public static extern int switch_core_session_execute_exten(HandleRef jarg1, string jarg2, string jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_receive_event")] + public static extern int switch_core_session_receive_event(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_private")] + public static extern IntPtr switch_core_session_get_private(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_private")] + public static extern int switch_core_session_set_private(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_add_stream")] + public static extern int switch_core_session_add_stream(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_stream")] + public static extern IntPtr switch_core_session_get_stream(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_stream_count")] + public static extern int switch_core_session_get_stream_count(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_launch_thread")] + public static extern void switch_core_session_launch_thread(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_thread_session_end")] + public static extern void switch_core_thread_session_end(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_service_session")] + public static extern void switch_core_service_session(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_outgoing_channel")] + public static extern int switch_core_session_outgoing_channel(HandleRef jarg1, HandleRef jarg2, string jarg3, HandleRef jarg4, HandleRef jarg5, HandleRef jarg6, uint jarg7, HandleRef jarg8); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_resurrect_channel")] + public static extern int switch_core_session_resurrect_channel(string jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_perform_receive_message")] + public static extern int switch_core_session_perform_receive_message(HandleRef jarg1, HandleRef jarg2, string jarg3, string jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_queue_event")] + public static extern int switch_core_session_queue_event(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_event_count")] + public static extern uint switch_core_session_event_count(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_dequeue_event")] + public static extern int switch_core_session_dequeue_event(HandleRef jarg1, HandleRef jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_queue_private_event")] + public static extern int switch_core_session_queue_private_event(HandleRef jarg1, HandleRef jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_private_event_count")] + public static extern uint switch_core_session_private_event_count(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_dequeue_private_event")] + public static extern int switch_core_session_dequeue_private_event(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_flush_private_events")] + public static extern uint switch_core_session_flush_private_events(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_read_frame")] + public static extern int switch_core_session_read_frame(HandleRef jarg1, HandleRef jarg2, uint jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_read_video_frame")] + public static extern int switch_core_session_read_video_frame(HandleRef jarg1, HandleRef jarg2, uint jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_write_video_frame")] + public static extern int switch_core_session_write_video_frame(HandleRef jarg1, HandleRef jarg2, uint jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_read_impl")] + public static extern int switch_core_session_set_read_impl(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_write_impl")] + public static extern int switch_core_session_set_write_impl(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_video_read_impl")] + public static extern int switch_core_session_set_video_read_impl(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_video_write_impl")] + public static extern int switch_core_session_set_video_write_impl(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_reset")] + public static extern void switch_core_session_reset(HandleRef jarg1, int jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_write_frame")] + public static extern int switch_core_session_write_frame(HandleRef jarg1, HandleRef jarg2, uint jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_perform_kill_channel")] + public static extern int switch_core_session_perform_kill_channel(HandleRef jarg1, string jarg2, string jarg3, int jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_send_dtmf")] + public static extern int switch_core_session_send_dtmf(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_send_dtmf_string")] + public static extern int switch_core_session_send_dtmf_string(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_recv_dtmf")] + public static extern int switch_core_session_recv_dtmf(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_hash_init_case")] + public static extern int switch_core_hash_init_case(HandleRef jarg1, HandleRef jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_hash_destroy")] + public static extern int switch_core_hash_destroy(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_hash_insert")] + public static extern int switch_core_hash_insert(HandleRef jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_hash_insert_locked")] + public static extern int switch_core_hash_insert_locked(HandleRef jarg1, string jarg2, HandleRef jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_hash_delete")] + public static extern int switch_core_hash_delete(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_hash_delete_locked")] + public static extern int switch_core_hash_delete_locked(HandleRef jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_hash_delete_multi")] + public static extern int switch_core_hash_delete_multi(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_hash_find")] + public static extern IntPtr switch_core_hash_find(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_hash_find_locked")] + public static extern IntPtr switch_core_hash_find_locked(HandleRef jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_hash_first")] + public static extern IntPtr switch_hash_first(string jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_hash_next")] + public static extern IntPtr switch_hash_next(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_hash_this")] + public static extern void switch_hash_this(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_timer_init")] + public static extern int switch_core_timer_init(HandleRef jarg1, string jarg2, int jarg3, int jarg4, HandleRef jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_time_calibrate_clock")] + public static extern void switch_time_calibrate_clock(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_timer_next")] + public static extern int switch_core_timer_next(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_timer_step")] + public static extern int switch_core_timer_step(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_timer_sync")] + public static extern int switch_core_timer_sync(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_timer_check")] + public static extern int switch_core_timer_check(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_timer_destroy")] + public static extern int switch_core_timer_destroy(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_codec_init")] + public static extern int switch_core_codec_init(HandleRef jarg1, string jarg2, string jarg3, uint jarg4, int jarg5, int jarg6, uint jarg7, HandleRef jarg8, HandleRef jarg9); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_codec_copy")] + public static extern int switch_core_codec_copy(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_codec_reset")] + public static extern int switch_core_codec_reset(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_codec_encode")] + public static extern int switch_core_codec_encode(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, uint jarg4, uint jarg5, HandleRef jarg6, HandleRef jarg7, HandleRef jarg8, HandleRef jarg9); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_codec_decode")] + public static extern int switch_core_codec_decode(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, uint jarg4, uint jarg5, HandleRef jarg6, HandleRef jarg7, HandleRef jarg8, HandleRef jarg9); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_codec_destroy")] + public static extern int switch_core_codec_destroy(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_read_codec")] + public static extern int switch_core_session_set_read_codec(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_unset_read_codec")] + public static extern void switch_core_session_unset_read_codec(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_unset_write_codec")] + public static extern void switch_core_session_unset_write_codec(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_lock_codec_write")] + public static extern void switch_core_session_lock_codec_write(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_unlock_codec_write")] + public static extern void switch_core_session_unlock_codec_write(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_lock_codec_read")] + public static extern void switch_core_session_lock_codec_read(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_unlock_codec_read")] + public static extern void switch_core_session_unlock_codec_read(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_read_impl")] + public static extern int switch_core_session_get_read_impl(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_write_impl")] + public static extern int switch_core_session_get_write_impl(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_video_read_impl")] + public static extern int switch_core_session_get_video_read_impl(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_video_write_impl")] + public static extern int switch_core_session_get_video_write_impl(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_read_codec")] + public static extern IntPtr switch_core_session_get_read_codec(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_effective_read_codec")] + public static extern IntPtr switch_core_session_get_effective_read_codec(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_write_codec")] + public static extern int switch_core_session_set_write_codec(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_write_codec")] + public static extern IntPtr switch_core_session_get_write_codec(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_effective_write_codec")] + public static extern IntPtr switch_core_session_get_effective_write_codec(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_video_read_codec")] + public static extern int switch_core_session_set_video_read_codec(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_video_read_codec")] + public static extern IntPtr switch_core_session_get_video_read_codec(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_video_write_codec")] + public static extern int switch_core_session_set_video_write_codec(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_get_video_write_codec")] + public static extern IntPtr switch_core_session_get_video_write_codec(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_open_file")] + public static extern IntPtr switch_core_db_open_file(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_persistant_execute")] + public static extern int switch_core_db_persistant_execute(HandleRef jarg1, string jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_persistant_execute_trans")] + public static extern int switch_core_db_persistant_execute_trans(HandleRef jarg1, string jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_db_test_reactive")] + public static extern void switch_core_db_test_reactive(HandleRef jarg1, string jarg2, string jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_perform_file_open")] + public static extern int switch_core_perform_file_open(string jarg1, string jarg2, int jarg3, HandleRef jarg4, string jarg5, byte jarg6, uint jarg7, uint jarg8, HandleRef jarg9); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_file_read")] + public static extern int switch_core_file_read(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_file_write")] + public static extern int switch_core_file_write(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_file_seek")] + public static extern int switch_core_file_seek(HandleRef jarg1, HandleRef jarg2, long jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_file_set_string")] + public static extern int switch_core_file_set_string(HandleRef jarg1, int jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_file_get_string")] + public static extern int switch_core_file_get_string(HandleRef jarg1, int jarg2, ref string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_file_close")] + public static extern int switch_core_file_close(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_file_truncate")] + public static extern int switch_core_file_truncate(HandleRef jarg1, long jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_speech_open")] + public static extern int switch_core_speech_open(HandleRef jarg1, string jarg2, string jarg3, uint jarg4, uint jarg5, HandleRef jarg6, HandleRef jarg7); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_speech_feed_tts")] + public static extern int switch_core_speech_feed_tts(HandleRef jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_speech_flush_tts")] + public static extern void switch_core_speech_flush_tts(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_speech_text_param_tts")] + public static extern void switch_core_speech_text_param_tts(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_speech_numeric_param_tts")] + public static extern void switch_core_speech_numeric_param_tts(HandleRef jarg1, string jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_speech_float_param_tts")] + public static extern void switch_core_speech_float_param_tts(HandleRef jarg1, string jarg2, double jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_speech_read_tts")] + public static extern int switch_core_speech_read_tts(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_speech_close")] + public static extern int switch_core_speech_close(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_open")] + public static extern int switch_core_asr_open(HandleRef jarg1, string jarg2, string jarg3, int jarg4, string jarg5, HandleRef jarg6, HandleRef jarg7); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_close")] + public static extern int switch_core_asr_close(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_feed")] + public static extern int switch_core_asr_feed(HandleRef jarg1, HandleRef jarg2, uint jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_check_results")] + public static extern int switch_core_asr_check_results(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_get_results")] + public static extern int switch_core_asr_get_results(HandleRef jarg1, ref string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_load_grammar")] + public static extern int switch_core_asr_load_grammar(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_unload_grammar")] + public static extern int switch_core_asr_unload_grammar(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_pause")] + public static extern int switch_core_asr_pause(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_resume")] + public static extern int switch_core_asr_resume(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_start_input_timers")] + public static extern int switch_core_asr_start_input_timers(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_text_param")] + public static extern void switch_core_asr_text_param(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_numeric_param")] + public static extern void switch_core_asr_numeric_param(HandleRef jarg1, string jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_asr_float_param")] + public static extern void switch_core_asr_float_param(HandleRef jarg1, string jarg2, double jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_directory_open")] + public static extern int switch_core_directory_open(HandleRef jarg1, string jarg2, string jarg3, string jarg4, string jarg5, HandleRef jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_directory_query")] + public static extern int switch_core_directory_query(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_directory_next")] + public static extern int switch_core_directory_next(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_directory_next_pair")] + public static extern int switch_core_directory_next_pair(HandleRef jarg1, ref string jarg2, ref string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_directory_close")] + public static extern int switch_core_directory_close(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_data_channel")] + public static extern IntPtr switch_core_data_channel(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_ready")] + public static extern int switch_core_ready(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_flags")] + public static extern uint switch_core_flags(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_management_exec")] + public static extern int switch_core_management_exec(string jarg1, int jarg2, string jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_set_high_priority")] + public static extern int set_high_priority(); + + [DllImport("mod_managed", EntryPoint="CSharp_change_user_group")] + public static extern int change_user_group(string jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_runtime_loop")] + public static extern void switch_core_runtime_loop(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_set_console")] + public static extern int switch_core_set_console(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_measure_time")] + public static extern void switch_core_measure_time(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_uptime")] + public static extern IntPtr switch_core_uptime(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_ctl")] + public static extern int switch_core_session_ctl(int jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_get_console")] + public static extern IntPtr switch_core_get_console(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_set_globals")] + public static extern void switch_core_set_globals(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_compare")] + public static extern byte switch_core_session_compare(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_check_interface")] + public static extern byte switch_core_session_check_interface(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_mime_index")] + public static extern IntPtr switch_core_mime_index(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_mime_ext2type")] + public static extern string switch_core_mime_ext2type(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_mime_add_type")] + public static extern int switch_core_mime_add_type(string jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_loadable_module_create_module_interface")] + public static extern IntPtr switch_loadable_module_create_module_interface(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_loadable_module_create_interface")] + public static extern IntPtr switch_loadable_module_create_interface(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_micro_time_now")] + public static extern IntPtr switch_micro_time_now(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_memory_reclaim")] + public static extern void switch_core_memory_reclaim(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_memory_reclaim_events")] + public static extern void switch_core_memory_reclaim_events(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_memory_reclaim_logger")] + public static extern void switch_core_memory_reclaim_logger(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_memory_reclaim_all")] + public static extern void switch_core_memory_reclaim_all(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_setrlimits")] + public static extern void switch_core_setrlimits(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_time_ref")] + public static extern IntPtr switch_time_ref(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_time_sync")] + public static extern void switch_time_sync(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_epoch_time_now")] + public static extern IntPtr switch_epoch_time_now(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_strftime_tz")] + public static extern int switch_strftime_tz(string jarg1, string jarg2, string jarg3, uint jarg4, HandleRef jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_time_exp_tz_name")] + public static extern int switch_time_exp_tz_name(string jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_load_network_lists")] + public static extern void switch_load_network_lists(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_check_network_list_ip_token")] + public static extern int switch_check_network_list_ip_token(string jarg1, string jarg2, ref string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_time_set_monotonic")] + public static extern void switch_time_set_monotonic(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_time_set_nanosleep")] + public static extern void switch_time_set_nanosleep(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_time_set_matrix")] + public static extern void switch_time_set_matrix(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_time_set_cond_yield")] + public static extern void switch_time_set_cond_yield(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_min_dtmf_duration")] + public static extern uint switch_core_min_dtmf_duration(uint jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_max_dtmf_duration")] + public static extern uint switch_core_max_dtmf_duration(uint jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_min_idle_cpu")] + public static extern double switch_core_min_idle_cpu(double jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_idle_cpu")] + public static extern double switch_core_idle_cpu(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_default_dtmf_duration")] + public static extern uint switch_core_default_dtmf_duration(uint jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_set_complete")] + public static extern int switch_console_set_complete(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_set_alias")] + public static extern int switch_console_set_alias(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_system")] + public static extern int switch_system(string jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cond_yield")] + public static extern void switch_cond_yield(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cond_next")] + public static extern void switch_cond_next(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_chat_send")] + public static extern int switch_core_chat_send(string jarg1, string jarg2, string jarg3, string jarg4, string jarg5, string jarg6, string jarg7, string jarg8); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_preprocess_session")] + public static extern int switch_ivr_preprocess_session(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CACHE_DB_LEN_get")] + public static extern int CACHE_DB_LEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_native_handle_t_core_db_dbh_set")] + public static extern void switch_cache_db_native_handle_t_core_db_dbh_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_native_handle_t_core_db_dbh_get")] + public static extern IntPtr switch_cache_db_native_handle_t_core_db_dbh_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_native_handle_t_odbc_dbh_set")] + public static extern void switch_cache_db_native_handle_t_odbc_dbh_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_native_handle_t_odbc_dbh_get")] + public static extern IntPtr switch_cache_db_native_handle_t_odbc_dbh_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_cache_db_native_handle_t")] + public static extern IntPtr new_switch_cache_db_native_handle_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_cache_db_native_handle_t")] + public static extern void delete_switch_cache_db_native_handle_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_core_db_options_t_db_path_set")] + public static extern void switch_cache_db_core_db_options_t_db_path_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_core_db_options_t_db_path_get")] + public static extern string switch_cache_db_core_db_options_t_db_path_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_cache_db_core_db_options_t")] + public static extern IntPtr new_switch_cache_db_core_db_options_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_cache_db_core_db_options_t")] + public static extern void delete_switch_cache_db_core_db_options_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_odbc_options_t_dsn_set")] + public static extern void switch_cache_db_odbc_options_t_dsn_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_odbc_options_t_dsn_get")] + public static extern string switch_cache_db_odbc_options_t_dsn_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_odbc_options_t_user_set")] + public static extern void switch_cache_db_odbc_options_t_user_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_odbc_options_t_user_get")] + public static extern string switch_cache_db_odbc_options_t_user_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_odbc_options_t_pass_set")] + public static extern void switch_cache_db_odbc_options_t_pass_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_odbc_options_t_pass_get")] + public static extern string switch_cache_db_odbc_options_t_pass_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_cache_db_odbc_options_t")] + public static extern IntPtr new_switch_cache_db_odbc_options_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_cache_db_odbc_options_t")] + public static extern void delete_switch_cache_db_odbc_options_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_connection_options_t_core_db_options_set")] + public static extern void switch_cache_db_connection_options_t_core_db_options_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_connection_options_t_core_db_options_get")] + public static extern IntPtr switch_cache_db_connection_options_t_core_db_options_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_connection_options_t_odbc_options_set")] + public static extern void switch_cache_db_connection_options_t_odbc_options_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_connection_options_t_odbc_options_get")] + public static extern IntPtr switch_cache_db_connection_options_t_odbc_options_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_cache_db_connection_options_t")] + public static extern IntPtr new_switch_cache_db_connection_options_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_cache_db_connection_options_t")] + public static extern void delete_switch_cache_db_connection_options_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_name_set")] + public static extern void switch_cache_db_handle_t_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_name_get")] + public static extern string switch_cache_db_handle_t_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_type_set")] + public static extern void switch_cache_db_handle_t_type_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_type_get")] + public static extern int switch_cache_db_handle_t_type_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_native_handle_set")] + public static extern void switch_cache_db_handle_t_native_handle_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_native_handle_get")] + public static extern IntPtr switch_cache_db_handle_t_native_handle_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_last_used_set")] + public static extern void switch_cache_db_handle_t_last_used_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_last_used_get")] + public static extern IntPtr switch_cache_db_handle_t_last_used_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_mutex_set")] + public static extern void switch_cache_db_handle_t_mutex_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_mutex_get")] + public static extern IntPtr switch_cache_db_handle_t_mutex_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_io_mutex_set")] + public static extern void switch_cache_db_handle_t_io_mutex_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_io_mutex_get")] + public static extern IntPtr switch_cache_db_handle_t_io_mutex_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_pool_set")] + public static extern void switch_cache_db_handle_t_pool_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_pool_get")] + public static extern IntPtr switch_cache_db_handle_t_pool_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_flags_set")] + public static extern void switch_cache_db_handle_t_flags_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_flags_get")] + public static extern int switch_cache_db_handle_t_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_hash_set")] + public static extern void switch_cache_db_handle_t_hash_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_hash_get")] + public static extern uint switch_cache_db_handle_t_hash_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_creator_set")] + public static extern void switch_cache_db_handle_t_creator_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_creator_get")] + public static extern string switch_cache_db_handle_t_creator_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_last_user_set")] + public static extern void switch_cache_db_handle_t_last_user_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_handle_t_last_user_get")] + public static extern string switch_cache_db_handle_t_last_user_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_cache_db_handle_t")] + public static extern IntPtr new_switch_cache_db_handle_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_cache_db_handle_t")] + public static extern void delete_switch_cache_db_handle_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_type_name")] + public static extern string switch_cache_db_type_name(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_dismiss_db_handle")] + public static extern void switch_cache_db_dismiss_db_handle(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_release_db_handle")] + public static extern void switch_cache_db_release_db_handle(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_destroy_db_handle")] + public static extern void switch_cache_db_destroy_db_handle(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp__switch_cache_db_get_db_handle")] + public static extern int _switch_cache_db_get_db_handle(HandleRef jarg1, int jarg2, HandleRef jarg3, string jarg4, string jarg5, int jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_execute_sql2str")] + public static extern string switch_cache_db_execute_sql2str(HandleRef jarg1, string jarg2, string jarg3, uint jarg4, ref string jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_execute_sql")] + public static extern int switch_cache_db_execute_sql(HandleRef jarg1, string jarg2, ref string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_execute_sql_callback")] + public static extern int switch_cache_db_execute_sql_callback(HandleRef jarg1, string jarg2, HandleRef jarg3, HandleRef jarg4, ref string jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_status")] + public static extern void switch_cache_db_status(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp__switch_core_db_handle")] + public static extern int _switch_core_db_handle(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_test_reactive")] + public static extern int switch_cache_db_test_reactive(HandleRef jarg1, string jarg2, string jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_persistant_execute")] + public static extern int switch_cache_db_persistant_execute(HandleRef jarg1, string jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_persistant_execute_trans")] + public static extern int switch_cache_db_persistant_execute_trans(HandleRef jarg1, string jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_detach")] + public static extern void switch_cache_db_detach(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_debug_level")] + public static extern uint switch_core_debug_level(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cache_db_flush_handles")] + public static extern void switch_cache_db_flush_handles(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_banner")] + public static extern string switch_core_banner(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_in_thread")] + public static extern int switch_core_session_in_thread(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_CMD_CHUNK_LEN_get")] + public static extern int SWITCH_CMD_CHUNK_LEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_loop")] + public static extern void switch_console_loop(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_stream_raw_write")] + public static extern int switch_console_stream_raw_write(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_write_file_contents")] + public static extern int switch_stream_write_file_contents(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_init")] + public static extern int switch_console_init(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_shutdown")] + public static extern int switch_console_shutdown(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_add_complete_func")] + public static extern int switch_console_add_complete_func(string jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_del_complete_func")] + public static extern int switch_console_del_complete_func(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_run_complete_func")] + public static extern int switch_console_run_complete_func(string jarg1, string jarg2, string jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_push_match")] + public static extern void switch_console_push_match(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_free_matches")] + public static extern void switch_console_free_matches(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_complete")] + public static extern byte switch_console_complete(string jarg1, string jarg2, HandleRef jarg3, HandleRef jarg4, HandleRef jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_sort_matches")] + public static extern void switch_console_sort_matches(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_save_history")] + public static extern void switch_console_save_history(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_expand_alias")] + public static extern string switch_console_expand_alias(string jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_console_execute")] + public static extern int switch_console_execute(string jarg1, int jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_toupper")] + public static extern int switch_toupper(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_tolower")] + public static extern int switch_tolower(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isalnum")] + public static extern int switch_isalnum(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isalpha")] + public static extern int switch_isalpha(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_iscntrl")] + public static extern int switch_iscntrl(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isdigit")] + public static extern int switch_isdigit(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isgraph")] + public static extern int switch_isgraph(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_islower")] + public static extern int switch_islower(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isprint")] + public static extern int switch_isprint(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ispunct")] + public static extern int switch_ispunct(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isspace")] + public static extern int switch_isspace(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isupper")] + public static extern int switch_isupper(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_isxdigit")] + public static extern int switch_isxdigit(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SMAX_get")] + public static extern int SWITCH_SMAX_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_SMIN_get")] + public static extern int SWITCH_SMIN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp__zstr")] + public static extern int _zstr(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_is_moh")] + public static extern int switch_is_moh(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_strchr_strict")] + public static extern string switch_strchr_strict(string jarg1, char jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_string_has_escaped_data")] + public static extern int switch_string_has_escaped_data(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_b64_encode")] + public static extern int switch_b64_encode(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_b64_decode")] + public static extern IntPtr switch_b64_decode(string jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_amp_encode")] + public static extern string switch_amp_encode(string jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_is_digit_string")] + public static extern int switch_is_digit_string(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_fd_read_line")] + public static extern IntPtr switch_fd_read_line(int jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_alloc")] + public static extern int switch_frame_alloc(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_dup")] + public static extern int switch_frame_dup(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_free")] + public static extern int switch_frame_free(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_resolve_host")] + public static extern int switch_resolve_host(string jarg1, string jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_find_local_ip")] + public static extern int switch_find_local_ip(string jarg1, int jarg2, HandleRef jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_get_addr")] + public static extern string get_addr(string jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_get_addr6")] + public static extern string get_addr6(string jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_get_addr_int")] + public static extern int get_addr_int(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cmp_addr")] + public static extern int switch_cmp_addr(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_get_port")] + public static extern ushort get_port(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_build_uri")] + public static extern int switch_build_uri(string jarg1, HandleRef jarg2, string jarg3, string jarg4, HandleRef jarg5, int jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_priority_name")] + public static extern string switch_priority_name(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rfc2833_to_char")] + public static extern char switch_rfc2833_to_char(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_char_to_rfc2833")] + public static extern byte switch_char_to_rfc2833(char jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_sanitize_number")] + public static extern string switch_sanitize_number(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_string_var_check")] + public static extern int switch_string_var_check(string jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_string_var_check_const")] + public static extern int switch_string_var_check_const(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_var_clean_string")] + public static extern string switch_var_clean_string(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_clean_string")] + public static extern string switch_clean_string(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_safe_strdup")] + public static extern string switch_safe_strdup(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_lc_strdup")] + public static extern string switch_lc_strdup(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_uc_strdup")] + public static extern string switch_uc_strdup(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_strstr")] + public static extern int switch_strstr(string jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_str_time")] + public static extern IntPtr switch_str_time(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_separate_string")] + public static extern uint switch_separate_string(string jarg1, char jarg2, ref string jarg3, uint jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_separate_string_string")] + public static extern uint switch_separate_string_string(string jarg1, string jarg2, ref string jarg3, uint jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_is_number")] + public static extern int switch_is_number(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_strip_spaces")] + public static extern string switch_strip_spaces(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_strip_commas")] + public static extern string switch_strip_commas(string jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_strip_nonnumerics")] + public static extern string switch_strip_nonnumerics(string jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_separate_paren_args")] + public static extern string switch_separate_paren_args(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stristr")] + public static extern string switch_stristr(string jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_is_lan_addr")] + public static extern int switch_is_lan_addr(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_replace_char")] + public static extern string switch_replace_char(string jarg1, char jarg2, char jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ast2regex")] + public static extern int switch_ast2regex(string jarg1, string jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_escape_char")] + public static extern string switch_escape_char(HandleRef jarg1, string jarg2, string jarg3, char jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_escape_string")] + public static extern string switch_escape_string(string jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_escape_string_pool")] + public static extern string switch_escape_string_pool(string jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_socket_waitfor")] + public static extern int switch_socket_waitfor(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_cut_path")] + public static extern string switch_cut_path(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_string_replace")] + public static extern string switch_string_replace(string jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_string_match")] + public static extern int switch_string_match(string jarg1, uint jarg2, string jarg3, uint jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_util_quote_shell_arg")] + public static extern string switch_util_quote_shell_arg(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_url_encode")] + public static extern string switch_url_encode(string jarg1, string jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_url_decode")] + public static extern string switch_url_decode(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_simple_email")] + public static extern int switch_simple_email(string jarg1, string jarg2, string jarg3, string jarg4, string jarg5, string jarg6, string jarg7); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_find_end_paren")] + public static extern string switch_find_end_paren(string jarg1, char jarg2, char jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_is_file_path")] + public static extern int switch_is_file_path(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_parse_cidr")] + public static extern int switch_parse_cidr(string jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_network_list_create")] + public static extern int switch_network_list_create(HandleRef jarg1, string jarg2, int jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_network_list_add_cidr_token")] + public static extern int switch_network_list_add_cidr_token(HandleRef jarg1, string jarg2, int jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_network_list_add_host_mask")] + public static extern int switch_network_list_add_host_mask(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_network_list_validate_ip_token")] + public static extern int switch_network_list_validate_ip_token(HandleRef jarg1, uint jarg2, ref string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_number_cmp")] + public static extern int switch_number_cmp(string jarg1, int jarg2); + + [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_switch_caller_profile_username_set")] + public static extern void switch_caller_profile_username_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_username_get")] + public static extern string switch_caller_profile_username_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_dialplan_set")] + public static extern void switch_caller_profile_dialplan_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_dialplan_get")] + public static extern string switch_caller_profile_dialplan_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_caller_id_name_set")] + public static extern void switch_caller_profile_caller_id_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_caller_id_name_get")] + public static extern string switch_caller_profile_caller_id_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_caller_id_number_set")] + public static extern void switch_caller_profile_caller_id_number_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_caller_id_number_get")] + public static extern string switch_caller_profile_caller_id_number_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_callee_id_name_set")] + public static extern void switch_caller_profile_callee_id_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_callee_id_name_get")] + public static extern string switch_caller_profile_callee_id_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_callee_id_number_set")] + public static extern void switch_caller_profile_callee_id_number_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_callee_id_number_get")] + public static extern string switch_caller_profile_callee_id_number_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_caller_ton_set")] + public static extern void switch_caller_profile_caller_ton_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_caller_ton_get")] + public static extern byte switch_caller_profile_caller_ton_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_caller_numplan_set")] + public static extern void switch_caller_profile_caller_numplan_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_caller_numplan_get")] + public static extern byte switch_caller_profile_caller_numplan_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_network_addr_set")] + public static extern void switch_caller_profile_network_addr_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_network_addr_get")] + public static extern string switch_caller_profile_network_addr_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_ani_set")] + public static extern void switch_caller_profile_ani_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_ani_get")] + public static extern string switch_caller_profile_ani_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_ani_ton_set")] + public static extern void switch_caller_profile_ani_ton_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_ani_ton_get")] + public static extern byte switch_caller_profile_ani_ton_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_ani_numplan_set")] + public static extern void switch_caller_profile_ani_numplan_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_ani_numplan_get")] + public static extern byte switch_caller_profile_ani_numplan_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_aniii_set")] + public static extern void switch_caller_profile_aniii_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_aniii_get")] + public static extern string switch_caller_profile_aniii_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_rdnis_set")] + public static extern void switch_caller_profile_rdnis_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_rdnis_get")] + public static extern string switch_caller_profile_rdnis_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_rdnis_ton_set")] + public static extern void switch_caller_profile_rdnis_ton_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_rdnis_ton_get")] + public static extern byte switch_caller_profile_rdnis_ton_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_rdnis_numplan_set")] + public static extern void switch_caller_profile_rdnis_numplan_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_rdnis_numplan_get")] + public static extern byte switch_caller_profile_rdnis_numplan_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_destination_number_set")] + public static extern void switch_caller_profile_destination_number_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_destination_number_get")] + public static extern string switch_caller_profile_destination_number_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_destination_number_ton_set")] + public static extern void switch_caller_profile_destination_number_ton_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_destination_number_ton_get")] + public static extern byte switch_caller_profile_destination_number_ton_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_destination_number_numplan_set")] + public static extern void switch_caller_profile_destination_number_numplan_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_destination_number_numplan_get")] + public static extern byte switch_caller_profile_destination_number_numplan_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_source_set")] + public static extern void switch_caller_profile_source_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_source_get")] + public static extern string switch_caller_profile_source_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_chan_name_set")] + public static extern void switch_caller_profile_chan_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_chan_name_get")] + public static extern string switch_caller_profile_chan_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_uuid_set")] + public static extern void switch_caller_profile_uuid_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_uuid_get")] + public static extern string switch_caller_profile_uuid_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_context_set")] + public static extern void switch_caller_profile_context_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_context_get")] + public static extern string switch_caller_profile_context_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_profile_index_set")] + public static extern void switch_caller_profile_profile_index_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_profile_index_get")] + public static extern string switch_caller_profile_profile_index_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_flags_set")] + public static extern void switch_caller_profile_flags_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_flags_get")] + public static extern uint switch_caller_profile_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_originator_caller_profile_set")] + public static extern void switch_caller_profile_originator_caller_profile_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_originator_caller_profile_get")] + public static extern IntPtr switch_caller_profile_originator_caller_profile_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_originatee_caller_profile_set")] + public static extern void switch_caller_profile_originatee_caller_profile_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_originatee_caller_profile_get")] + public static extern IntPtr switch_caller_profile_originatee_caller_profile_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_hunt_caller_profile_set")] + public static extern void switch_caller_profile_hunt_caller_profile_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_hunt_caller_profile_get")] + public static extern IntPtr switch_caller_profile_hunt_caller_profile_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_times_set")] + public static extern void switch_caller_profile_times_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_times_get")] + public static extern IntPtr switch_caller_profile_times_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_caller_extension_set")] + public static extern void switch_caller_profile_caller_extension_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_caller_extension_get")] + public static extern IntPtr switch_caller_profile_caller_extension_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_pool_set")] + public static extern void switch_caller_profile_pool_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_pool_get")] + public static extern IntPtr switch_caller_profile_pool_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_next_set")] + public static extern void switch_caller_profile_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_next_get")] + public static extern IntPtr switch_caller_profile_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_caller_profile")] + public static extern IntPtr new_switch_caller_profile(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_caller_profile")] + public static extern void delete_switch_caller_profile(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_application_application_name_set")] + public static extern void switch_caller_application_application_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_application_application_name_get")] + public static extern string switch_caller_application_application_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_application_application_data_set")] + public static extern void switch_caller_application_application_data_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_application_application_data_get")] + public static extern string switch_caller_application_application_data_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_application_application_function_set")] + public static extern void switch_caller_application_application_function_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_application_application_function_get")] + public static extern IntPtr switch_caller_application_application_function_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_application_next_set")] + public static extern void switch_caller_application_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_application_next_get")] + public static extern IntPtr switch_caller_application_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_caller_application")] + public static extern IntPtr new_switch_caller_application(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_caller_application")] + public static extern void delete_switch_caller_application(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_extension_name_set")] + public static extern void switch_caller_extension_extension_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_extension_name_get")] + public static extern string switch_caller_extension_extension_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_extension_number_set")] + public static extern void switch_caller_extension_extension_number_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_extension_number_get")] + public static extern string switch_caller_extension_extension_number_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_current_application_set")] + public static extern void switch_caller_extension_current_application_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_current_application_get")] + public static extern IntPtr switch_caller_extension_current_application_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_last_application_set")] + public static extern void switch_caller_extension_last_application_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_last_application_get")] + public static extern IntPtr switch_caller_extension_last_application_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_applications_set")] + public static extern void switch_caller_extension_applications_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_applications_get")] + public static extern IntPtr switch_caller_extension_applications_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_children_set")] + public static extern void switch_caller_extension_children_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_children_get")] + public static extern IntPtr switch_caller_extension_children_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_next_set")] + public static extern void switch_caller_extension_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_next_get")] + public static extern IntPtr switch_caller_extension_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_caller_extension")] + public static extern IntPtr new_switch_caller_extension(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_caller_extension")] + public static extern void delete_switch_caller_extension(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_new")] + public static extern IntPtr switch_caller_extension_new(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_clone")] + public static extern int switch_caller_extension_clone(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_add_application")] + public static extern void switch_caller_extension_add_application(HandleRef jarg1, HandleRef jarg2, string jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_extension_add_application_printf")] + public static extern void switch_caller_extension_add_application_printf(HandleRef jarg1, HandleRef jarg2, string jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_get_field_by_name")] + public static extern string switch_caller_get_field_by_name(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_new")] + public static extern IntPtr switch_caller_profile_new(HandleRef jarg1, string jarg2, string jarg3, string jarg4, string jarg5, string jarg6, string jarg7, string jarg8, string jarg9, string jarg10, string jarg11, string jarg12); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_clone")] + public static extern IntPtr switch_caller_profile_clone(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_dup")] + public static extern IntPtr switch_caller_profile_dup(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_caller_profile_event_set_data")] + public static extern void switch_caller_profile_event_set_data(HandleRef jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_codec_set")] + public static extern void switch_frame_codec_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_codec_get")] + public static extern IntPtr switch_frame_codec_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_source_set")] + public static extern void switch_frame_source_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_source_get")] + public static extern string switch_frame_source_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_packet_set")] + public static extern void switch_frame_packet_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_packet_get")] + public static extern IntPtr switch_frame_packet_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_packetlen_set")] + public static extern void switch_frame_packetlen_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_packetlen_get")] + public static extern uint switch_frame_packetlen_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_extra_data_set")] + public static extern void switch_frame_extra_data_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_extra_data_get")] + public static extern IntPtr switch_frame_extra_data_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_data_set")] + public static extern void switch_frame_data_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_data_get")] + public static extern IntPtr switch_frame_data_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_datalen_set")] + public static extern void switch_frame_datalen_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_datalen_get")] + public static extern uint switch_frame_datalen_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_buflen_set")] + public static extern void switch_frame_buflen_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_buflen_get")] + public static extern uint switch_frame_buflen_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_samples_set")] + public static extern void switch_frame_samples_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_samples_get")] + public static extern uint switch_frame_samples_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_rate_set")] + public static extern void switch_frame_rate_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_rate_get")] + public static extern uint switch_frame_rate_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_payload_set")] + public static extern void switch_frame_payload_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_payload_get")] + public static extern byte switch_frame_payload_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_timestamp_set")] + public static extern void switch_frame_timestamp_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_timestamp_get")] + public static extern IntPtr switch_frame_timestamp_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_seq_set")] + public static extern void switch_frame_seq_set(HandleRef jarg1, ushort jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_seq_get")] + public static extern ushort switch_frame_seq_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_ssrc_set")] + public static extern void switch_frame_ssrc_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_ssrc_get")] + public static extern uint switch_frame_ssrc_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_m_set")] + public static extern void switch_frame_m_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_m_get")] + public static extern int switch_frame_m_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_flags_set")] + public static extern void switch_frame_flags_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_frame_flags_get")] + public static extern uint switch_frame_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_frame")] + public static extern IntPtr new_switch_frame(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_frame")] + public static extern void delete_switch_frame(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_init_set")] + public static extern void switch_state_handler_table_on_init_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_init_get")] + public static extern IntPtr switch_state_handler_table_on_init_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_routing_set")] + public static extern void switch_state_handler_table_on_routing_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_routing_get")] + public static extern IntPtr switch_state_handler_table_on_routing_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_execute_set")] + public static extern void switch_state_handler_table_on_execute_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_execute_get")] + public static extern IntPtr switch_state_handler_table_on_execute_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_hangup_set")] + public static extern void switch_state_handler_table_on_hangup_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_hangup_get")] + public static extern IntPtr switch_state_handler_table_on_hangup_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_exchange_media_set")] + public static extern void switch_state_handler_table_on_exchange_media_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_exchange_media_get")] + public static extern IntPtr switch_state_handler_table_on_exchange_media_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_soft_execute_set")] + public static extern void switch_state_handler_table_on_soft_execute_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_soft_execute_get")] + public static extern IntPtr switch_state_handler_table_on_soft_execute_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_consume_media_set")] + public static extern void switch_state_handler_table_on_consume_media_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_consume_media_get")] + public static extern IntPtr switch_state_handler_table_on_consume_media_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_hibernate_set")] + public static extern void switch_state_handler_table_on_hibernate_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_hibernate_get")] + public static extern IntPtr switch_state_handler_table_on_hibernate_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_reset_set")] + public static extern void switch_state_handler_table_on_reset_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_reset_get")] + public static extern IntPtr switch_state_handler_table_on_reset_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_park_set")] + public static extern void switch_state_handler_table_on_park_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_park_get")] + public static extern IntPtr switch_state_handler_table_on_park_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_reporting_set")] + public static extern void switch_state_handler_table_on_reporting_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_reporting_get")] + public static extern IntPtr switch_state_handler_table_on_reporting_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_destroy_set")] + public static extern void switch_state_handler_table_on_destroy_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_on_destroy_get")] + public static extern IntPtr switch_state_handler_table_on_destroy_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_flags_set")] + public static extern void switch_state_handler_table_flags_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_flags_get")] + public static extern int switch_state_handler_table_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_padding_set")] + public static extern void switch_state_handler_table_padding_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_state_handler_table_padding_get")] + public static extern IntPtr switch_state_handler_table_padding_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_state_handler_table")] + public static extern IntPtr new_switch_state_handler_table(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_state_handler_table")] + public static extern void delete_switch_state_handler_table(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_write_function_set")] + public static extern void switch_stream_handle_write_function_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_write_function_get")] + public static extern IntPtr switch_stream_handle_write_function_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_raw_write_function_set")] + public static extern void switch_stream_handle_raw_write_function_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_raw_write_function_get")] + public static extern IntPtr switch_stream_handle_raw_write_function_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_data_set")] + public static extern void switch_stream_handle_data_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_data_get")] + public static extern IntPtr switch_stream_handle_data_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_end_set")] + public static extern void switch_stream_handle_end_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_end_get")] + public static extern IntPtr switch_stream_handle_end_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_data_size_set")] + public static extern void switch_stream_handle_data_size_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_data_size_get")] + public static extern IntPtr switch_stream_handle_data_size_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_data_len_set")] + public static extern void switch_stream_handle_data_len_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_data_len_get")] + public static extern IntPtr switch_stream_handle_data_len_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_alloc_len_set")] + public static extern void switch_stream_handle_alloc_len_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_alloc_len_get")] + public static extern IntPtr switch_stream_handle_alloc_len_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_alloc_chunk_set")] + public static extern void switch_stream_handle_alloc_chunk_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_alloc_chunk_get")] + public static extern IntPtr switch_stream_handle_alloc_chunk_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_param_event_set")] + public static extern void switch_stream_handle_param_event_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_stream_handle_param_event_get")] + public static extern IntPtr switch_stream_handle_param_event_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_stream_handle")] + public static extern IntPtr new_switch_stream_handle(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_stream_handle")] + public static extern void delete_switch_stream_handle(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_outgoing_channel_set")] + public static extern void switch_io_routines_outgoing_channel_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_outgoing_channel_get")] + public static extern IntPtr switch_io_routines_outgoing_channel_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_read_frame_set")] + public static extern void switch_io_routines_read_frame_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_read_frame_get")] + public static extern IntPtr switch_io_routines_read_frame_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_write_frame_set")] + public static extern void switch_io_routines_write_frame_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_write_frame_get")] + public static extern IntPtr switch_io_routines_write_frame_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_kill_channel_set")] + public static extern void switch_io_routines_kill_channel_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_kill_channel_get")] + public static extern IntPtr switch_io_routines_kill_channel_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_send_dtmf_set")] + public static extern void switch_io_routines_send_dtmf_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_send_dtmf_get")] + public static extern IntPtr switch_io_routines_send_dtmf_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_receive_message_set")] + public static extern void switch_io_routines_receive_message_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_receive_message_get")] + public static extern IntPtr switch_io_routines_receive_message_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_receive_event_set")] + public static extern void switch_io_routines_receive_event_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_receive_event_get")] + public static extern IntPtr switch_io_routines_receive_event_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_state_change_set")] + public static extern void switch_io_routines_state_change_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_state_change_get")] + public static extern IntPtr switch_io_routines_state_change_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_read_video_frame_set")] + public static extern void switch_io_routines_read_video_frame_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_read_video_frame_get")] + public static extern IntPtr switch_io_routines_read_video_frame_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_write_video_frame_set")] + public static extern void switch_io_routines_write_video_frame_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_write_video_frame_get")] + public static extern IntPtr switch_io_routines_write_video_frame_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_resurrect_session_set")] + public static extern void switch_io_routines_resurrect_session_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_resurrect_session_get")] + public static extern IntPtr switch_io_routines_resurrect_session_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_padding_set")] + public static extern void switch_io_routines_padding_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_routines_padding_get")] + public static extern IntPtr switch_io_routines_padding_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_io_routines")] + public static extern IntPtr new_switch_io_routines(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_io_routines")] + public static extern void delete_switch_io_routines(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_interface_name_set")] + public static extern void switch_endpoint_interface_interface_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_interface_name_get")] + public static extern string switch_endpoint_interface_interface_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_io_routines_set")] + public static extern void switch_endpoint_interface_io_routines_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_io_routines_get")] + public static extern IntPtr switch_endpoint_interface_io_routines_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_state_handler_set")] + public static extern void switch_endpoint_interface_state_handler_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_state_handler_get")] + public static extern IntPtr switch_endpoint_interface_state_handler_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_private_info_set")] + public static extern void switch_endpoint_interface_private_info_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_private_info_get")] + public static extern IntPtr switch_endpoint_interface_private_info_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_rwlock_set")] + public static extern void switch_endpoint_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_rwlock_get")] + public static extern IntPtr switch_endpoint_interface_rwlock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_refs_set")] + public static extern void switch_endpoint_interface_refs_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_refs_get")] + public static extern int switch_endpoint_interface_refs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_reflock_set")] + public static extern void switch_endpoint_interface_reflock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_reflock_get")] + public static extern IntPtr switch_endpoint_interface_reflock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_parent_set")] + public static extern void switch_endpoint_interface_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_parent_get")] + public static extern IntPtr switch_endpoint_interface_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_next_set")] + public static extern void switch_endpoint_interface_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_endpoint_interface_next_get")] + public static extern IntPtr switch_endpoint_interface_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_endpoint_interface")] + public static extern IntPtr new_switch_endpoint_interface(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_endpoint_interface")] + public static extern void delete_switch_endpoint_interface(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interval_set")] + public static extern void switch_timer_interval_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interval_get")] + public static extern int switch_timer_interval_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_flags_set")] + public static extern void switch_timer_flags_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_flags_get")] + public static extern uint switch_timer_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_samples_set")] + public static extern void switch_timer_samples_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_samples_get")] + public static extern uint switch_timer_samples_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_samplecount_set")] + public static extern void switch_timer_samplecount_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_samplecount_get")] + public static extern uint switch_timer_samplecount_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_timer_interface_set")] + public static extern void switch_timer_timer_interface_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_timer_interface_get")] + public static extern IntPtr switch_timer_timer_interface_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_memory_pool_set")] + public static extern void switch_timer_memory_pool_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_memory_pool_get")] + public static extern IntPtr switch_timer_memory_pool_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_private_info_set")] + public static extern void switch_timer_private_info_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_private_info_get")] + public static extern IntPtr switch_timer_private_info_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_diff_set")] + public static extern void switch_timer_diff_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_diff_get")] + public static extern IntPtr switch_timer_diff_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_tick_set")] + public static extern void switch_timer_tick_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_tick_get")] + public static extern IntPtr switch_timer_tick_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_timer")] + public static extern IntPtr new_switch_timer(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_timer")] + public static extern void delete_switch_timer(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_interface_name_set")] + public static extern void switch_timer_interface_interface_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_interface_name_get")] + public static extern string switch_timer_interface_interface_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_timer_init_set")] + public static extern void switch_timer_interface_timer_init_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_timer_init_get")] + public static extern IntPtr switch_timer_interface_timer_init_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_timer_next_set")] + public static extern void switch_timer_interface_timer_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_timer_next_get")] + public static extern IntPtr switch_timer_interface_timer_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_timer_step_set")] + public static extern void switch_timer_interface_timer_step_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_timer_step_get")] + public static extern IntPtr switch_timer_interface_timer_step_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_timer_sync_set")] + public static extern void switch_timer_interface_timer_sync_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_timer_sync_get")] + public static extern IntPtr switch_timer_interface_timer_sync_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_timer_check_set")] + public static extern void switch_timer_interface_timer_check_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_timer_check_get")] + public static extern IntPtr switch_timer_interface_timer_check_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_timer_destroy_set")] + public static extern void switch_timer_interface_timer_destroy_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_timer_destroy_get")] + public static extern IntPtr switch_timer_interface_timer_destroy_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_rwlock_set")] + public static extern void switch_timer_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_rwlock_get")] + public static extern IntPtr switch_timer_interface_rwlock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_refs_set")] + public static extern void switch_timer_interface_refs_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_refs_get")] + public static extern int switch_timer_interface_refs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_reflock_set")] + public static extern void switch_timer_interface_reflock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_reflock_get")] + public static extern IntPtr switch_timer_interface_reflock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_parent_set")] + public static extern void switch_timer_interface_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_parent_get")] + public static extern IntPtr switch_timer_interface_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_next_set")] + public static extern void switch_timer_interface_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_timer_interface_next_get")] + public static extern IntPtr switch_timer_interface_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_timer_interface")] + public static extern IntPtr new_switch_timer_interface(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_timer_interface")] + public static extern void delete_switch_timer_interface(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dialplan_interface_interface_name_set")] + public static extern void switch_dialplan_interface_interface_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dialplan_interface_interface_name_get")] + public static extern string switch_dialplan_interface_interface_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dialplan_interface_hunt_function_set")] + public static extern void switch_dialplan_interface_hunt_function_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dialplan_interface_hunt_function_get")] + public static extern IntPtr switch_dialplan_interface_hunt_function_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dialplan_interface_rwlock_set")] + public static extern void switch_dialplan_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dialplan_interface_rwlock_get")] + public static extern IntPtr switch_dialplan_interface_rwlock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dialplan_interface_refs_set")] + public static extern void switch_dialplan_interface_refs_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dialplan_interface_refs_get")] + public static extern int switch_dialplan_interface_refs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dialplan_interface_reflock_set")] + public static extern void switch_dialplan_interface_reflock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dialplan_interface_reflock_get")] + public static extern IntPtr switch_dialplan_interface_reflock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dialplan_interface_parent_set")] + public static extern void switch_dialplan_interface_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dialplan_interface_parent_get")] + public static extern IntPtr switch_dialplan_interface_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dialplan_interface_next_set")] + public static extern void switch_dialplan_interface_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_dialplan_interface_next_get")] + public static extern IntPtr switch_dialplan_interface_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_dialplan_interface")] + public static extern IntPtr new_switch_dialplan_interface(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_dialplan_interface")] + public static extern void delete_switch_dialplan_interface(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_interface_name_set")] + public static extern void switch_file_interface_interface_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_interface_name_get")] + public static extern string switch_file_interface_interface_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_open_set")] + public static extern void switch_file_interface_file_open_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_open_get")] + public static extern IntPtr switch_file_interface_file_open_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_close_set")] + public static extern void switch_file_interface_file_close_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_close_get")] + public static extern IntPtr switch_file_interface_file_close_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_truncate_set")] + public static extern void switch_file_interface_file_truncate_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_truncate_get")] + public static extern IntPtr switch_file_interface_file_truncate_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_read_set")] + public static extern void switch_file_interface_file_read_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_read_get")] + public static extern IntPtr switch_file_interface_file_read_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_write_set")] + public static extern void switch_file_interface_file_write_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_write_get")] + public static extern IntPtr switch_file_interface_file_write_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_seek_set")] + public static extern void switch_file_interface_file_seek_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_seek_get")] + public static extern IntPtr switch_file_interface_file_seek_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_set_string_set")] + public static extern void switch_file_interface_file_set_string_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_set_string_get")] + public static extern IntPtr switch_file_interface_file_set_string_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_get_string_set")] + public static extern void switch_file_interface_file_get_string_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_file_get_string_get")] + public static extern IntPtr switch_file_interface_file_get_string_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_extens_set")] + public static extern void switch_file_interface_extens_set(HandleRef jarg1, ref string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_extens_get")] + public static extern string switch_file_interface_extens_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_rwlock_set")] + public static extern void switch_file_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_rwlock_get")] + public static extern IntPtr switch_file_interface_rwlock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_refs_set")] + public static extern void switch_file_interface_refs_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_refs_get")] + public static extern int switch_file_interface_refs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_reflock_set")] + public static extern void switch_file_interface_reflock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_reflock_get")] + public static extern IntPtr switch_file_interface_reflock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_parent_set")] + public static extern void switch_file_interface_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_parent_get")] + public static extern IntPtr switch_file_interface_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_next_set")] + public static extern void switch_file_interface_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_interface_next_get")] + public static extern IntPtr switch_file_interface_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_file_interface")] + public static extern IntPtr new_switch_file_interface(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_file_interface")] + public static extern void delete_switch_file_interface(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_file_interface_set")] + public static extern void switch_file_handle_file_interface_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_file_interface_get")] + public static extern IntPtr switch_file_handle_file_interface_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_flags_set")] + public static extern void switch_file_handle_flags_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_flags_get")] + public static extern uint switch_file_handle_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_fd_set")] + public static extern void switch_file_handle_fd_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_fd_get")] + public static extern IntPtr switch_file_handle_fd_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_samples_set")] + public static extern void switch_file_handle_samples_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_samples_get")] + public static extern uint switch_file_handle_samples_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_samplerate_set")] + public static extern void switch_file_handle_samplerate_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_samplerate_get")] + public static extern uint switch_file_handle_samplerate_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_native_rate_set")] + public static extern void switch_file_handle_native_rate_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_native_rate_get")] + public static extern uint switch_file_handle_native_rate_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_channels_set")] + public static extern void switch_file_handle_channels_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_channels_get")] + public static extern byte switch_file_handle_channels_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_format_set")] + public static extern void switch_file_handle_format_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_format_get")] + public static extern uint switch_file_handle_format_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_sections_set")] + public static extern void switch_file_handle_sections_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_sections_get")] + public static extern uint switch_file_handle_sections_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_seekable_set")] + public static extern void switch_file_handle_seekable_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_seekable_get")] + public static extern int switch_file_handle_seekable_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_sample_count_set")] + public static extern void switch_file_handle_sample_count_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_sample_count_get")] + public static extern IntPtr switch_file_handle_sample_count_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_speed_set")] + public static extern void switch_file_handle_speed_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_speed_get")] + public static extern int switch_file_handle_speed_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_memory_pool_set")] + public static extern void switch_file_handle_memory_pool_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_memory_pool_get")] + public static extern IntPtr switch_file_handle_memory_pool_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_prebuf_set")] + public static extern void switch_file_handle_prebuf_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_prebuf_get")] + public static extern uint switch_file_handle_prebuf_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_interval_set")] + public static extern void switch_file_handle_interval_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_interval_get")] + public static extern uint switch_file_handle_interval_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_private_info_set")] + public static extern void switch_file_handle_private_info_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_private_info_get")] + public static extern IntPtr switch_file_handle_private_info_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_handler_set")] + public static extern void switch_file_handle_handler_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_handler_get")] + public static extern string switch_file_handle_handler_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_pos_set")] + public static extern void switch_file_handle_pos_set(HandleRef jarg1, long jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_pos_get")] + public static extern long switch_file_handle_pos_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_audio_buffer_set")] + public static extern void switch_file_handle_audio_buffer_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_audio_buffer_get")] + public static extern IntPtr switch_file_handle_audio_buffer_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_sp_audio_buffer_set")] + public static extern void switch_file_handle_sp_audio_buffer_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_sp_audio_buffer_get")] + public static extern IntPtr switch_file_handle_sp_audio_buffer_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_thresh_set")] + public static extern void switch_file_handle_thresh_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_thresh_get")] + public static extern uint switch_file_handle_thresh_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_silence_hits_set")] + public static extern void switch_file_handle_silence_hits_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_silence_hits_get")] + public static extern uint switch_file_handle_silence_hits_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_offset_pos_set")] + public static extern void switch_file_handle_offset_pos_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_offset_pos_get")] + public static extern uint switch_file_handle_offset_pos_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_samples_in_set")] + public static extern void switch_file_handle_samples_in_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_samples_in_get")] + public static extern IntPtr switch_file_handle_samples_in_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_samples_out_set")] + public static extern void switch_file_handle_samples_out_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_samples_out_get")] + public static extern IntPtr switch_file_handle_samples_out_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_vol_set")] + public static extern void switch_file_handle_vol_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_vol_get")] + public static extern int switch_file_handle_vol_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_resampler_set")] + public static extern void switch_file_handle_resampler_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_resampler_get")] + public static extern IntPtr switch_file_handle_resampler_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_buffer_set")] + public static extern void switch_file_handle_buffer_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_buffer_get")] + public static extern IntPtr switch_file_handle_buffer_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_dbuf_set")] + public static extern void switch_file_handle_dbuf_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_dbuf_get")] + public static extern IntPtr switch_file_handle_dbuf_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_dbuflen_set")] + public static extern void switch_file_handle_dbuflen_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_dbuflen_get")] + public static extern IntPtr switch_file_handle_dbuflen_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_pre_buffer_set")] + public static extern void switch_file_handle_pre_buffer_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_pre_buffer_get")] + public static extern IntPtr switch_file_handle_pre_buffer_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_pre_buffer_data_set")] + public static extern void switch_file_handle_pre_buffer_data_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_pre_buffer_data_get")] + public static extern IntPtr switch_file_handle_pre_buffer_data_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_pre_buffer_datalen_set")] + public static extern void switch_file_handle_pre_buffer_datalen_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_pre_buffer_datalen_get")] + public static extern IntPtr switch_file_handle_pre_buffer_datalen_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_file_set")] + public static extern void switch_file_handle_file_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_file_get")] + public static extern string switch_file_handle_file_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_func_set")] + public static extern void switch_file_handle_func_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_func_get")] + public static extern string switch_file_handle_func_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_line_set")] + public static extern void switch_file_handle_line_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_line_get")] + public static extern int switch_file_handle_line_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_file_path_set")] + public static extern void switch_file_handle_file_path_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_file_path_get")] + public static extern string switch_file_handle_file_path_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_spool_path_set")] + public static extern void switch_file_handle_spool_path_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_spool_path_get")] + public static extern string switch_file_handle_spool_path_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_prefix_set")] + public static extern void switch_file_handle_prefix_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_file_handle_prefix_get")] + public static extern string switch_file_handle_prefix_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_file_handle")] + public static extern IntPtr new_switch_file_handle(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_file_handle")] + public static extern void delete_switch_file_handle(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_interface_name_set")] + public static extern void switch_asr_interface_interface_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_interface_name_get")] + public static extern string switch_asr_interface_interface_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_open_set")] + public static extern void switch_asr_interface_asr_open_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_open_get")] + public static extern IntPtr switch_asr_interface_asr_open_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_load_grammar_set")] + public static extern void switch_asr_interface_asr_load_grammar_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_load_grammar_get")] + public static extern IntPtr switch_asr_interface_asr_load_grammar_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_unload_grammar_set")] + public static extern void switch_asr_interface_asr_unload_grammar_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_unload_grammar_get")] + public static extern IntPtr switch_asr_interface_asr_unload_grammar_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_close_set")] + public static extern void switch_asr_interface_asr_close_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_close_get")] + public static extern IntPtr switch_asr_interface_asr_close_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_feed_set")] + public static extern void switch_asr_interface_asr_feed_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_feed_get")] + public static extern IntPtr switch_asr_interface_asr_feed_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_resume_set")] + public static extern void switch_asr_interface_asr_resume_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_resume_get")] + public static extern IntPtr switch_asr_interface_asr_resume_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_pause_set")] + public static extern void switch_asr_interface_asr_pause_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_pause_get")] + public static extern IntPtr switch_asr_interface_asr_pause_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_check_results_set")] + public static extern void switch_asr_interface_asr_check_results_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_check_results_get")] + public static extern IntPtr switch_asr_interface_asr_check_results_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_get_results_set")] + public static extern void switch_asr_interface_asr_get_results_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_get_results_get")] + public static extern IntPtr switch_asr_interface_asr_get_results_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_start_input_timers_set")] + public static extern void switch_asr_interface_asr_start_input_timers_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_start_input_timers_get")] + public static extern IntPtr switch_asr_interface_asr_start_input_timers_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_text_param_set")] + public static extern void switch_asr_interface_asr_text_param_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_text_param_get")] + public static extern IntPtr switch_asr_interface_asr_text_param_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_numeric_param_set")] + public static extern void switch_asr_interface_asr_numeric_param_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_numeric_param_get")] + public static extern IntPtr switch_asr_interface_asr_numeric_param_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_float_param_set")] + public static extern void switch_asr_interface_asr_float_param_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_asr_float_param_get")] + public static extern IntPtr switch_asr_interface_asr_float_param_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_rwlock_set")] + public static extern void switch_asr_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_rwlock_get")] + public static extern IntPtr switch_asr_interface_rwlock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_refs_set")] + public static extern void switch_asr_interface_refs_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_refs_get")] + public static extern int switch_asr_interface_refs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_reflock_set")] + public static extern void switch_asr_interface_reflock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_reflock_get")] + public static extern IntPtr switch_asr_interface_reflock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_parent_set")] + public static extern void switch_asr_interface_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_parent_get")] + public static extern IntPtr switch_asr_interface_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_next_set")] + public static extern void switch_asr_interface_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_interface_next_get")] + public static extern IntPtr switch_asr_interface_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_asr_interface")] + public static extern IntPtr new_switch_asr_interface(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_asr_interface")] + public static extern void delete_switch_asr_interface(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_asr_interface_set")] + public static extern void switch_asr_handle_asr_interface_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_asr_interface_get")] + public static extern IntPtr switch_asr_handle_asr_interface_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_flags_set")] + public static extern void switch_asr_handle_flags_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_flags_get")] + public static extern uint switch_asr_handle_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_name_set")] + public static extern void switch_asr_handle_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_name_get")] + public static extern string switch_asr_handle_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_codec_set")] + public static extern void switch_asr_handle_codec_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_codec_get")] + public static extern string switch_asr_handle_codec_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_rate_set")] + public static extern void switch_asr_handle_rate_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_rate_get")] + public static extern uint switch_asr_handle_rate_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_grammar_set")] + public static extern void switch_asr_handle_grammar_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_grammar_get")] + public static extern string switch_asr_handle_grammar_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_param_set")] + public static extern void switch_asr_handle_param_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_param_get")] + public static extern string switch_asr_handle_param_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_memory_pool_set")] + public static extern void switch_asr_handle_memory_pool_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_memory_pool_get")] + public static extern IntPtr switch_asr_handle_memory_pool_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_private_info_set")] + public static extern void switch_asr_handle_private_info_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_asr_handle_private_info_get")] + public static extern IntPtr switch_asr_handle_private_info_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_asr_handle")] + public static extern IntPtr new_switch_asr_handle(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_asr_handle")] + public static extern void delete_switch_asr_handle(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_interface_name_set")] + public static extern void switch_speech_interface_interface_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_interface_name_get")] + public static extern string switch_speech_interface_interface_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_open_set")] + public static extern void switch_speech_interface_speech_open_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_open_get")] + public static extern IntPtr switch_speech_interface_speech_open_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_close_set")] + public static extern void switch_speech_interface_speech_close_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_close_get")] + public static extern IntPtr switch_speech_interface_speech_close_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_feed_tts_set")] + public static extern void switch_speech_interface_speech_feed_tts_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_feed_tts_get")] + public static extern IntPtr switch_speech_interface_speech_feed_tts_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_read_tts_set")] + public static extern void switch_speech_interface_speech_read_tts_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_read_tts_get")] + public static extern IntPtr switch_speech_interface_speech_read_tts_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_flush_tts_set")] + public static extern void switch_speech_interface_speech_flush_tts_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_flush_tts_get")] + public static extern IntPtr switch_speech_interface_speech_flush_tts_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_text_param_tts_set")] + public static extern void switch_speech_interface_speech_text_param_tts_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_text_param_tts_get")] + public static extern IntPtr switch_speech_interface_speech_text_param_tts_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_numeric_param_tts_set")] + public static extern void switch_speech_interface_speech_numeric_param_tts_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_numeric_param_tts_get")] + public static extern IntPtr switch_speech_interface_speech_numeric_param_tts_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_float_param_tts_set")] + public static extern void switch_speech_interface_speech_float_param_tts_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_speech_float_param_tts_get")] + public static extern IntPtr switch_speech_interface_speech_float_param_tts_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_rwlock_set")] + public static extern void switch_speech_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_rwlock_get")] + public static extern IntPtr switch_speech_interface_rwlock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_refs_set")] + public static extern void switch_speech_interface_refs_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_refs_get")] + public static extern int switch_speech_interface_refs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_reflock_set")] + public static extern void switch_speech_interface_reflock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_reflock_get")] + public static extern IntPtr switch_speech_interface_reflock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_parent_set")] + public static extern void switch_speech_interface_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_parent_get")] + public static extern IntPtr switch_speech_interface_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_next_set")] + public static extern void switch_speech_interface_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_interface_next_get")] + public static extern IntPtr switch_speech_interface_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_speech_interface")] + public static extern IntPtr new_switch_speech_interface(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_speech_interface")] + public static extern void delete_switch_speech_interface(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_speech_interface_set")] + public static extern void switch_speech_handle_speech_interface_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_speech_interface_get")] + public static extern IntPtr switch_speech_handle_speech_interface_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_flags_set")] + public static extern void switch_speech_handle_flags_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_flags_get")] + public static extern uint switch_speech_handle_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_name_set")] + public static extern void switch_speech_handle_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_name_get")] + public static extern string switch_speech_handle_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_rate_set")] + public static extern void switch_speech_handle_rate_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_rate_get")] + public static extern uint switch_speech_handle_rate_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_speed_set")] + public static extern void switch_speech_handle_speed_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_speed_get")] + public static extern uint switch_speech_handle_speed_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_samples_set")] + public static extern void switch_speech_handle_samples_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_samples_get")] + public static extern uint switch_speech_handle_samples_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_voice_set")] + public static extern void switch_speech_handle_voice_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_voice_get")] + public static extern string switch_speech_handle_voice_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_engine_set")] + public static extern void switch_speech_handle_engine_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_engine_get")] + public static extern string switch_speech_handle_engine_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_param_set")] + public static extern void switch_speech_handle_param_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_param_get")] + public static extern string switch_speech_handle_param_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_memory_pool_set")] + public static extern void switch_speech_handle_memory_pool_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_memory_pool_get")] + public static extern IntPtr switch_speech_handle_memory_pool_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_resampler_set")] + public static extern void switch_speech_handle_resampler_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_resampler_get")] + public static extern IntPtr switch_speech_handle_resampler_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_buffer_set")] + public static extern void switch_speech_handle_buffer_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_buffer_get")] + public static extern IntPtr switch_speech_handle_buffer_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_dbuf_set")] + public static extern void switch_speech_handle_dbuf_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_dbuf_get")] + public static extern IntPtr switch_speech_handle_dbuf_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_dbuflen_set")] + public static extern void switch_speech_handle_dbuflen_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_dbuflen_get")] + public static extern IntPtr switch_speech_handle_dbuflen_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_samplerate_set")] + public static extern void switch_speech_handle_samplerate_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_samplerate_get")] + public static extern uint switch_speech_handle_samplerate_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_native_rate_set")] + public static extern void switch_speech_handle_native_rate_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_native_rate_get")] + public static extern uint switch_speech_handle_native_rate_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_private_info_set")] + public static extern void switch_speech_handle_private_info_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_speech_handle_private_info_get")] + public static extern IntPtr switch_speech_handle_private_info_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_speech_handle")] + public static extern IntPtr new_switch_speech_handle(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_speech_handle")] + public static extern void delete_switch_speech_handle(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_interface_interface_name_set")] + public static extern void switch_say_interface_interface_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_interface_interface_name_get")] + public static extern string switch_say_interface_interface_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_interface_say_function_set")] + public static extern void switch_say_interface_say_function_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_interface_say_function_get")] + public static extern IntPtr switch_say_interface_say_function_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_interface_rwlock_set")] + public static extern void switch_say_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_interface_rwlock_get")] + public static extern IntPtr switch_say_interface_rwlock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_interface_refs_set")] + public static extern void switch_say_interface_refs_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_interface_refs_get")] + public static extern int switch_say_interface_refs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_interface_reflock_set")] + public static extern void switch_say_interface_reflock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_interface_reflock_get")] + public static extern IntPtr switch_say_interface_reflock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_interface_parent_set")] + public static extern void switch_say_interface_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_interface_parent_get")] + public static extern IntPtr switch_say_interface_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_interface_next_set")] + public static extern void switch_say_interface_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_say_interface_next_get")] + public static extern IntPtr switch_say_interface_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_say_interface")] + public static extern IntPtr new_switch_say_interface(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_say_interface")] + public static extern void delete_switch_say_interface(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_chat_interface_interface_name_set")] + public static extern void switch_chat_interface_interface_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_chat_interface_interface_name_get")] + public static extern string switch_chat_interface_interface_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_chat_interface_chat_send_set")] + public static extern void switch_chat_interface_chat_send_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_chat_interface_chat_send_get")] + public static extern IntPtr switch_chat_interface_chat_send_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_chat_interface_rwlock_set")] + public static extern void switch_chat_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_chat_interface_rwlock_get")] + public static extern IntPtr switch_chat_interface_rwlock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_chat_interface_refs_set")] + public static extern void switch_chat_interface_refs_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_chat_interface_refs_get")] + public static extern int switch_chat_interface_refs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_chat_interface_reflock_set")] + public static extern void switch_chat_interface_reflock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_chat_interface_reflock_get")] + public static extern IntPtr switch_chat_interface_reflock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_chat_interface_parent_set")] + public static extern void switch_chat_interface_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_chat_interface_parent_get")] + public static extern IntPtr switch_chat_interface_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_chat_interface_next_set")] + public static extern void switch_chat_interface_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_chat_interface_next_get")] + public static extern IntPtr switch_chat_interface_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_chat_interface")] + public static extern IntPtr new_switch_chat_interface(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_chat_interface")] + public static extern void delete_switch_chat_interface(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_management_interface_relative_oid_set")] + public static extern void switch_management_interface_relative_oid_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_management_interface_relative_oid_get")] + public static extern string switch_management_interface_relative_oid_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_management_interface_management_function_set")] + public static extern void switch_management_interface_management_function_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_management_interface_management_function_get")] + public static extern IntPtr switch_management_interface_management_function_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_management_interface_rwlock_set")] + public static extern void switch_management_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_management_interface_rwlock_get")] + public static extern IntPtr switch_management_interface_rwlock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_management_interface_refs_set")] + public static extern void switch_management_interface_refs_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_management_interface_refs_get")] + public static extern int switch_management_interface_refs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_management_interface_reflock_set")] + public static extern void switch_management_interface_reflock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_management_interface_reflock_get")] + public static extern IntPtr switch_management_interface_reflock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_management_interface_parent_set")] + public static extern void switch_management_interface_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_management_interface_parent_get")] + public static extern IntPtr switch_management_interface_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_management_interface_next_set")] + public static extern void switch_management_interface_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_management_interface_next_get")] + public static extern IntPtr switch_management_interface_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_management_interface")] + public static extern IntPtr new_switch_management_interface(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_management_interface")] + public static extern void delete_switch_management_interface(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_interface_name_set")] + public static extern void switch_limit_interface_interface_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_interface_name_get")] + public static extern string switch_limit_interface_interface_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_incr_set")] + public static extern void switch_limit_interface_incr_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_incr_get")] + public static extern IntPtr switch_limit_interface_incr_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_release_set")] + public static extern void switch_limit_interface_release_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_release_get")] + public static extern IntPtr switch_limit_interface_release_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_usage_set")] + public static extern void switch_limit_interface_usage_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_usage_get")] + public static extern IntPtr switch_limit_interface_usage_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_reset_set")] + public static extern void switch_limit_interface_reset_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_reset_get")] + public static extern IntPtr switch_limit_interface_reset_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_status_set")] + public static extern void switch_limit_interface_status_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_status_get")] + public static extern IntPtr switch_limit_interface_status_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_interval_reset_set")] + public static extern void switch_limit_interface_interval_reset_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_interval_reset_get")] + public static extern IntPtr switch_limit_interface_interval_reset_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_rwlock_set")] + public static extern void switch_limit_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_rwlock_get")] + public static extern IntPtr switch_limit_interface_rwlock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_refs_set")] + public static extern void switch_limit_interface_refs_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_refs_get")] + public static extern int switch_limit_interface_refs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_reflock_set")] + public static extern void switch_limit_interface_reflock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_reflock_get")] + public static extern IntPtr switch_limit_interface_reflock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_parent_set")] + public static extern void switch_limit_interface_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_parent_get")] + public static extern IntPtr switch_limit_interface_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_next_set")] + public static extern void switch_limit_interface_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_limit_interface_next_get")] + public static extern IntPtr switch_limit_interface_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_limit_interface")] + public static extern IntPtr new_switch_limit_interface(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_limit_interface")] + public static extern void delete_switch_limit_interface(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_interface_name_set")] + public static extern void switch_directory_interface_interface_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_interface_name_get")] + public static extern string switch_directory_interface_interface_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_directory_open_set")] + public static extern void switch_directory_interface_directory_open_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_directory_open_get")] + public static extern IntPtr switch_directory_interface_directory_open_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_directory_close_set")] + public static extern void switch_directory_interface_directory_close_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_directory_close_get")] + public static extern IntPtr switch_directory_interface_directory_close_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_directory_query_set")] + public static extern void switch_directory_interface_directory_query_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_directory_query_get")] + public static extern IntPtr switch_directory_interface_directory_query_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_directory_next_set")] + public static extern void switch_directory_interface_directory_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_directory_next_get")] + public static extern IntPtr switch_directory_interface_directory_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_directory_next_pair_set")] + public static extern void switch_directory_interface_directory_next_pair_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_directory_next_pair_get")] + public static extern IntPtr switch_directory_interface_directory_next_pair_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_rwlock_set")] + public static extern void switch_directory_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_rwlock_get")] + public static extern IntPtr switch_directory_interface_rwlock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_refs_set")] + public static extern void switch_directory_interface_refs_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_refs_get")] + public static extern int switch_directory_interface_refs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_reflock_set")] + public static extern void switch_directory_interface_reflock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_reflock_get")] + public static extern IntPtr switch_directory_interface_reflock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_parent_set")] + public static extern void switch_directory_interface_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_parent_get")] + public static extern IntPtr switch_directory_interface_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_next_set")] + public static extern void switch_directory_interface_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_interface_next_get")] + public static extern IntPtr switch_directory_interface_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_directory_interface")] + public static extern IntPtr new_switch_directory_interface(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_directory_interface")] + public static extern void delete_switch_directory_interface(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_handle_directory_interface_set")] + public static extern void switch_directory_handle_directory_interface_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_handle_directory_interface_get")] + public static extern IntPtr switch_directory_handle_directory_interface_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_handle_flags_set")] + public static extern void switch_directory_handle_flags_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_handle_flags_get")] + public static extern uint switch_directory_handle_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_handle_memory_pool_set")] + public static extern void switch_directory_handle_memory_pool_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_handle_memory_pool_get")] + public static extern IntPtr switch_directory_handle_memory_pool_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_handle_private_info_set")] + public static extern void switch_directory_handle_private_info_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_directory_handle_private_info_get")] + public static extern IntPtr switch_directory_handle_private_info_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_directory_handle")] + public static extern IntPtr new_switch_directory_handle(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_directory_handle")] + public static extern void delete_switch_directory_handle(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_quality_set")] + public static extern void switch_codec_settings_quality_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_quality_get")] + public static extern int switch_codec_settings_quality_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_complexity_set")] + public static extern void switch_codec_settings_complexity_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_complexity_get")] + public static extern int switch_codec_settings_complexity_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_enhancement_set")] + public static extern void switch_codec_settings_enhancement_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_enhancement_get")] + public static extern int switch_codec_settings_enhancement_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_vad_set")] + public static extern void switch_codec_settings_vad_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_vad_get")] + public static extern int switch_codec_settings_vad_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_vbr_set")] + public static extern void switch_codec_settings_vbr_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_vbr_get")] + public static extern int switch_codec_settings_vbr_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_vbr_quality_set")] + public static extern void switch_codec_settings_vbr_quality_set(HandleRef jarg1, float jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_vbr_quality_get")] + public static extern float switch_codec_settings_vbr_quality_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_abr_set")] + public static extern void switch_codec_settings_abr_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_abr_get")] + public static extern int switch_codec_settings_abr_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_dtx_set")] + public static extern void switch_codec_settings_dtx_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_dtx_get")] + public static extern int switch_codec_settings_dtx_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_preproc_set")] + public static extern void switch_codec_settings_preproc_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_preproc_get")] + public static extern int switch_codec_settings_preproc_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_pp_vad_set")] + public static extern void switch_codec_settings_pp_vad_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_pp_vad_get")] + public static extern int switch_codec_settings_pp_vad_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_pp_agc_set")] + public static extern void switch_codec_settings_pp_agc_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_pp_agc_get")] + public static extern int switch_codec_settings_pp_agc_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_pp_agc_level_set")] + public static extern void switch_codec_settings_pp_agc_level_set(HandleRef jarg1, float jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_pp_agc_level_get")] + public static extern float switch_codec_settings_pp_agc_level_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_pp_denoise_set")] + public static extern void switch_codec_settings_pp_denoise_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_pp_denoise_get")] + public static extern int switch_codec_settings_pp_denoise_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_pp_dereverb_set")] + public static extern void switch_codec_settings_pp_dereverb_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_pp_dereverb_get")] + public static extern int switch_codec_settings_pp_dereverb_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_pp_dereverb_decay_set")] + public static extern void switch_codec_settings_pp_dereverb_decay_set(HandleRef jarg1, float jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_pp_dereverb_decay_get")] + public static extern float switch_codec_settings_pp_dereverb_decay_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_pp_dereverb_level_set")] + public static extern void switch_codec_settings_pp_dereverb_level_set(HandleRef jarg1, float jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_settings_pp_dereverb_level_get")] + public static extern float switch_codec_settings_pp_dereverb_level_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_codec_settings")] + public static extern IntPtr new_switch_codec_settings(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_codec_settings")] + public static extern void delete_switch_codec_settings(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_codec_interface_set")] + public static extern void switch_codec_codec_interface_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_codec_interface_get")] + public static extern IntPtr switch_codec_codec_interface_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_set")] + public static extern void switch_codec_implementation_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_get")] + public static extern IntPtr switch_codec_implementation_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_fmtp_in_set")] + public static extern void switch_codec_fmtp_in_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_fmtp_in_get")] + public static extern string switch_codec_fmtp_in_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_fmtp_out_set")] + public static extern void switch_codec_fmtp_out_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_fmtp_out_get")] + public static extern string switch_codec_fmtp_out_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_codec_settings_set")] + public static extern void switch_codec_codec_settings_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_codec_settings_get")] + public static extern IntPtr switch_codec_codec_settings_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_flags_set")] + public static extern void switch_codec_flags_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_flags_get")] + public static extern uint switch_codec_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_memory_pool_set")] + public static extern void switch_codec_memory_pool_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_memory_pool_get")] + public static extern IntPtr switch_codec_memory_pool_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_private_info_set")] + public static extern void switch_codec_private_info_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_private_info_get")] + public static extern IntPtr switch_codec_private_info_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_agreed_pt_set")] + public static extern void switch_codec_agreed_pt_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_agreed_pt_get")] + public static extern byte switch_codec_agreed_pt_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_mutex_set")] + public static extern void switch_codec_mutex_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_mutex_get")] + public static extern IntPtr switch_codec_mutex_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_next_set")] + public static extern void switch_codec_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_next_get")] + public static extern IntPtr switch_codec_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_codec")] + public static extern IntPtr new_switch_codec(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_codec")] + public static extern void delete_switch_codec(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_codec_type_set")] + public static extern void switch_codec_implementation_codec_type_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_codec_type_get")] + public static extern int switch_codec_implementation_codec_type_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_ianacode_set")] + public static extern void switch_codec_implementation_ianacode_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_ianacode_get")] + public static extern byte switch_codec_implementation_ianacode_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_iananame_set")] + public static extern void switch_codec_implementation_iananame_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_iananame_get")] + public static extern string switch_codec_implementation_iananame_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_fmtp_set")] + public static extern void switch_codec_implementation_fmtp_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_fmtp_get")] + public static extern string switch_codec_implementation_fmtp_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_samples_per_second_set")] + public static extern void switch_codec_implementation_samples_per_second_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_samples_per_second_get")] + public static extern uint switch_codec_implementation_samples_per_second_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_actual_samples_per_second_set")] + public static extern void switch_codec_implementation_actual_samples_per_second_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_actual_samples_per_second_get")] + public static extern uint switch_codec_implementation_actual_samples_per_second_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_bits_per_second_set")] + public static extern void switch_codec_implementation_bits_per_second_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_bits_per_second_get")] + public static extern int switch_codec_implementation_bits_per_second_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_microseconds_per_packet_set")] + public static extern void switch_codec_implementation_microseconds_per_packet_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_microseconds_per_packet_get")] + public static extern int switch_codec_implementation_microseconds_per_packet_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_samples_per_packet_set")] + public static extern void switch_codec_implementation_samples_per_packet_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_samples_per_packet_get")] + public static extern uint switch_codec_implementation_samples_per_packet_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_decoded_bytes_per_packet_set")] + public static extern void switch_codec_implementation_decoded_bytes_per_packet_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_decoded_bytes_per_packet_get")] + public static extern uint switch_codec_implementation_decoded_bytes_per_packet_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_encoded_bytes_per_packet_set")] + public static extern void switch_codec_implementation_encoded_bytes_per_packet_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_encoded_bytes_per_packet_get")] + public static extern uint switch_codec_implementation_encoded_bytes_per_packet_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_number_of_channels_set")] + public static extern void switch_codec_implementation_number_of_channels_set(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_number_of_channels_get")] + public static extern byte switch_codec_implementation_number_of_channels_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_codec_frames_per_packet_set")] + public static extern void switch_codec_implementation_codec_frames_per_packet_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_codec_frames_per_packet_get")] + public static extern int switch_codec_implementation_codec_frames_per_packet_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_init_set")] + public static extern void switch_codec_implementation_init_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_init_get")] + public static extern IntPtr switch_codec_implementation_init_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_encode_set")] + public static extern void switch_codec_implementation_encode_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_encode_get")] + public static extern IntPtr switch_codec_implementation_encode_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_decode_set")] + public static extern void switch_codec_implementation_decode_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_decode_get")] + public static extern IntPtr switch_codec_implementation_decode_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_destroy_set")] + public static extern void switch_codec_implementation_destroy_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_destroy_get")] + public static extern IntPtr switch_codec_implementation_destroy_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_codec_id_set")] + public static extern void switch_codec_implementation_codec_id_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_codec_id_get")] + public static extern uint switch_codec_implementation_codec_id_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_impl_id_set")] + public static extern void switch_codec_implementation_impl_id_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_impl_id_get")] + public static extern uint switch_codec_implementation_impl_id_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_next_set")] + public static extern void switch_codec_implementation_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_implementation_next_get")] + public static extern IntPtr switch_codec_implementation_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_codec_implementation")] + public static extern IntPtr new_switch_codec_implementation(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_codec_implementation")] + public static extern void delete_switch_codec_implementation(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_interface_name_set")] + public static extern void switch_codec_interface_interface_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_interface_name_get")] + public static extern string switch_codec_interface_interface_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_implementations_set")] + public static extern void switch_codec_interface_implementations_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_implementations_get")] + public static extern IntPtr switch_codec_interface_implementations_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_codec_id_set")] + public static extern void switch_codec_interface_codec_id_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_codec_id_get")] + public static extern uint switch_codec_interface_codec_id_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_rwlock_set")] + public static extern void switch_codec_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_rwlock_get")] + public static extern IntPtr switch_codec_interface_rwlock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_refs_set")] + public static extern void switch_codec_interface_refs_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_refs_get")] + public static extern int switch_codec_interface_refs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_reflock_set")] + public static extern void switch_codec_interface_reflock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_reflock_get")] + public static extern IntPtr switch_codec_interface_reflock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_parent_set")] + public static extern void switch_codec_interface_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_parent_get")] + public static extern IntPtr switch_codec_interface_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_next_set")] + public static extern void switch_codec_interface_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_codec_interface_next_get")] + public static extern IntPtr switch_codec_interface_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_codec_interface")] + public static extern IntPtr new_switch_codec_interface(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_codec_interface")] + public static extern void delete_switch_codec_interface(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_interface_name_set")] + public static extern void switch_application_interface_interface_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_interface_name_get")] + public static extern string switch_application_interface_interface_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_application_function_set")] + public static extern void switch_application_interface_application_function_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_application_function_get")] + public static extern IntPtr switch_application_interface_application_function_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_long_desc_set")] + public static extern void switch_application_interface_long_desc_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_long_desc_get")] + public static extern string switch_application_interface_long_desc_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_short_desc_set")] + public static extern void switch_application_interface_short_desc_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_short_desc_get")] + public static extern string switch_application_interface_short_desc_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_syntax_set")] + public static extern void switch_application_interface_syntax_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_syntax_get")] + public static extern string switch_application_interface_syntax_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_flags_set")] + public static extern void switch_application_interface_flags_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_flags_get")] + public static extern uint switch_application_interface_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_rwlock_set")] + public static extern void switch_application_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_rwlock_get")] + public static extern IntPtr switch_application_interface_rwlock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_refs_set")] + public static extern void switch_application_interface_refs_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_refs_get")] + public static extern int switch_application_interface_refs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_reflock_set")] + public static extern void switch_application_interface_reflock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_reflock_get")] + public static extern IntPtr switch_application_interface_reflock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_parent_set")] + public static extern void switch_application_interface_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_parent_get")] + public static extern IntPtr switch_application_interface_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_next_set")] + public static extern void switch_application_interface_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_application_interface_next_get")] + public static extern IntPtr switch_application_interface_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_application_interface")] + public static extern IntPtr new_switch_application_interface(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_application_interface")] + public static extern void delete_switch_application_interface(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_interface_name_set")] + public static extern void switch_api_interface_interface_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_interface_name_get")] + public static extern string switch_api_interface_interface_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_desc_set")] + public static extern void switch_api_interface_desc_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_desc_get")] + public static extern string switch_api_interface_desc_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_function_set")] + public static extern void switch_api_interface_function_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_function_get")] + public static extern IntPtr switch_api_interface_function_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_syntax_set")] + public static extern void switch_api_interface_syntax_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_syntax_get")] + public static extern string switch_api_interface_syntax_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_rwlock_set")] + public static extern void switch_api_interface_rwlock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_rwlock_get")] + public static extern IntPtr switch_api_interface_rwlock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_refs_set")] + public static extern void switch_api_interface_refs_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_refs_get")] + public static extern int switch_api_interface_refs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_reflock_set")] + public static extern void switch_api_interface_reflock_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_reflock_get")] + public static extern IntPtr switch_api_interface_reflock_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_parent_set")] + public static extern void switch_api_interface_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_parent_get")] + public static extern IntPtr switch_api_interface_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_next_set")] + public static extern void switch_api_interface_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_api_interface_next_get")] + public static extern IntPtr switch_api_interface_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_api_interface")] + public static extern IntPtr new_switch_api_interface(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_api_interface")] + public static extern void delete_switch_api_interface(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_profile_created_set")] + public static extern void switch_channel_timetable_profile_created_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_profile_created_get")] + public static extern IntPtr switch_channel_timetable_profile_created_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_created_set")] + public static extern void switch_channel_timetable_created_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_created_get")] + public static extern IntPtr switch_channel_timetable_created_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_answered_set")] + public static extern void switch_channel_timetable_answered_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_answered_get")] + public static extern IntPtr switch_channel_timetable_answered_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_progress_set")] + public static extern void switch_channel_timetable_progress_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_progress_get")] + public static extern IntPtr switch_channel_timetable_progress_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_progress_media_set")] + public static extern void switch_channel_timetable_progress_media_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_progress_media_get")] + public static extern IntPtr switch_channel_timetable_progress_media_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_hungup_set")] + public static extern void switch_channel_timetable_hungup_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_hungup_get")] + public static extern IntPtr switch_channel_timetable_hungup_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_transferred_set")] + public static extern void switch_channel_timetable_transferred_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_transferred_get")] + public static extern IntPtr switch_channel_timetable_transferred_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_resurrected_set")] + public static extern void switch_channel_timetable_resurrected_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_resurrected_get")] + public static extern IntPtr switch_channel_timetable_resurrected_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_next_set")] + public static extern void switch_channel_timetable_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_timetable_next_get")] + public static extern IntPtr switch_channel_timetable_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_channel_timetable")] + public static extern IntPtr new_switch_channel_timetable(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_channel_timetable")] + public static extern void delete_switch_channel_timetable(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_state")] + public static extern int switch_channel_get_state(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_running_state")] + public static extern int switch_channel_get_running_state(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_test_ready")] + public static extern int switch_channel_test_ready(HandleRef jarg1, int jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_wait_for_state")] + public static extern void switch_channel_wait_for_state(HandleRef jarg1, HandleRef jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_wait_for_state_timeout")] + public static extern void switch_channel_wait_for_state_timeout(HandleRef jarg1, int jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_wait_for_flag")] + public static extern int switch_channel_wait_for_flag(HandleRef jarg1, int jarg2, int jarg3, uint jarg4, HandleRef jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_perform_set_state")] + public static extern int switch_channel_perform_set_state(HandleRef jarg1, string jarg2, string jarg3, int jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_perform_set_running_state")] + public static extern int switch_channel_perform_set_running_state(HandleRef jarg1, int jarg2, string jarg3, string jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_str2cause")] + public static extern int switch_channel_str2cause(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_cause")] + public static extern int switch_channel_get_cause(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_cause_q850")] + public static extern int switch_channel_cause_q850(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_cause_q850")] + public static extern int switch_channel_get_cause_q850(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_cause2str")] + public static extern string switch_channel_cause2str(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_timetable")] + public static extern IntPtr switch_channel_get_timetable(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_alloc")] + public static extern int switch_channel_alloc(HandleRef jarg1, int jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_init")] + public static extern int switch_channel_init(HandleRef jarg1, HandleRef jarg2, int jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_perform_presence")] + public static extern void switch_channel_perform_presence(HandleRef jarg1, string jarg2, string jarg3, string jarg4, string jarg5, string jarg6, int jarg7); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_uninit")] + public static extern void switch_channel_uninit(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_caller_profile")] + public static extern void switch_channel_set_caller_profile(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_caller_profile")] + public static extern IntPtr switch_channel_get_caller_profile(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_originator_caller_profile")] + public static extern void switch_channel_set_originator_caller_profile(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_hunt_caller_profile")] + public static extern void switch_channel_set_hunt_caller_profile(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_originator_caller_profile")] + public static extern IntPtr switch_channel_get_originator_caller_profile(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_originatee_caller_profile")] + public static extern void switch_channel_set_originatee_caller_profile(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_originatee_caller_profile")] + public static extern IntPtr switch_channel_get_originatee_caller_profile(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_uuid")] + public static extern string switch_channel_get_uuid(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_profile_var")] + public static extern int switch_channel_set_profile_var(HandleRef jarg1, string jarg2, string jarg3); + + [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_set_variable_printf")] + public static extern int switch_channel_set_variable_printf(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_variable_name_printf")] + public static extern int switch_channel_set_variable_name_printf(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_variable_partner_var_check")] + public static extern int switch_channel_set_variable_partner_var_check(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_variable_partner")] + public static extern string switch_channel_get_variable_partner(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_export_variable_var_check")] + public static extern int switch_channel_export_variable_var_check(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_export_variable_printf")] + public static extern int switch_channel_export_variable_printf(HandleRef jarg1, string jarg2, string jarg3); + + [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); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_variables")] + public static extern int switch_channel_get_variables(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_pass_callee_id")] + public static extern int switch_channel_pass_callee_id(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_variable_first")] + public static extern IntPtr switch_channel_variable_first(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_variable_last")] + public static extern void switch_channel_variable_last(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_restart")] + public static extern void switch_channel_restart(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_caller_extension_masquerade")] + public static extern int switch_channel_caller_extension_masquerade(HandleRef jarg1, HandleRef jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_caller_extension")] + public static extern void switch_channel_set_caller_extension(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_caller_extension")] + public static extern IntPtr switch_channel_get_caller_extension(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_test_flag")] + public static extern uint switch_channel_test_flag(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_flag_value")] + public static extern void switch_channel_set_flag_value(HandleRef jarg1, int jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_flag_recursive")] + public static extern void switch_channel_set_flag_recursive(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_cap_value")] + public static extern void switch_channel_set_cap_value(HandleRef jarg1, int jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_clear_cap")] + public static extern void switch_channel_clear_cap(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_test_cap")] + public static extern uint switch_channel_test_cap(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_flag_partner")] + public static extern int switch_channel_set_flag_partner(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_clear_flag_partner")] + public static extern int switch_channel_clear_flag_partner(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_test_flag_partner")] + public static extern uint switch_channel_test_flag_partner(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_state_flag")] + public static extern void switch_channel_set_state_flag(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_clear_flag")] + public static extern void switch_channel_clear_flag(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_clear_flag_recursive")] + public static extern void switch_channel_clear_flag_recursive(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_perform_answer")] + public static extern int switch_channel_perform_answer(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_perform_mark_answered")] + public static extern int switch_channel_perform_mark_answered(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_perform_ring_ready_value")] + public static extern int switch_channel_perform_ring_ready_value(HandleRef jarg1, int jarg2, string jarg3, string jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_perform_pre_answer")] + public static extern int switch_channel_perform_pre_answer(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_perform_mark_pre_answered")] + public static extern int switch_channel_perform_mark_pre_answered(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_perform_mark_ring_ready_value")] + public static extern int switch_channel_perform_mark_ring_ready_value(HandleRef jarg1, int jarg2, string jarg3, string jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_add_state_handler")] + public static extern int switch_channel_add_state_handler(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_clear_state_handler")] + public static extern void switch_channel_clear_state_handler(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_state_handler")] + public static extern IntPtr switch_channel_get_state_handler(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_private")] + public static extern int switch_channel_set_private(HandleRef jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_private")] + public static extern IntPtr switch_channel_get_private(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_private_partner")] + public static extern IntPtr switch_channel_get_private_partner(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_name")] + public static extern int switch_channel_set_name(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_name")] + public static extern string switch_channel_get_name(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_perform_hangup")] + public static extern int switch_channel_perform_hangup(HandleRef jarg1, string jarg2, string jarg3, int jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_has_dtmf")] + public static extern IntPtr switch_channel_has_dtmf(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_queue_dtmf")] + public static extern int switch_channel_queue_dtmf(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_queue_dtmf_string")] + public static extern int switch_channel_queue_dtmf_string(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_dequeue_dtmf")] + public static extern int switch_channel_dequeue_dtmf(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_flush_dtmf")] + public static extern void switch_channel_flush_dtmf(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_dequeue_dtmf_string")] + public static extern IntPtr switch_channel_dequeue_dtmf_string(HandleRef jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_state_name")] + public static extern string switch_channel_state_name(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_name_state")] + public static extern int switch_channel_name_state(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_event_set_data")] + public static extern void switch_channel_event_set_data(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_event_set_basic_data")] + public static extern void switch_channel_event_set_basic_data(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_event_set_extended_data")] + public static extern void switch_channel_event_set_extended_data(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_expand_variables")] + public static extern string switch_channel_expand_variables(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_build_param_string")] + public static extern string switch_channel_build_param_string(HandleRef jarg1, HandleRef jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_timestamps")] + public static extern int switch_channel_set_timestamps(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_perform_audio_sync")] + public static extern void switch_channel_perform_audio_sync(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_private_flag")] + public static extern void switch_channel_set_private_flag(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_clear_private_flag")] + public static extern void switch_channel_clear_private_flag(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_test_private_flag")] + public static extern int switch_channel_test_private_flag(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_app_flag_key")] + public static extern void switch_channel_set_app_flag_key(string jarg1, HandleRef jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_clear_app_flag_key")] + public static extern void switch_channel_clear_app_flag_key(string jarg1, HandleRef jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_test_app_flag_key")] + public static extern int switch_channel_test_app_flag_key(string jarg1, HandleRef jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_set_hangup_time")] + public static extern void switch_channel_set_hangup_time(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_direction")] + public static extern int switch_channel_direction(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_session")] + public static extern IntPtr switch_channel_get_session(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_flag_string")] + public static extern string switch_channel_get_flag_string(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_cap_string")] + public static extern string switch_channel_get_cap_string(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_state_change_pending")] + public static extern int switch_channel_state_change_pending(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_perform_set_callstate")] + public static extern void switch_channel_perform_set_callstate(HandleRef jarg1, int jarg2, string jarg3, string jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_get_callstate")] + public static extern int switch_channel_get_callstate(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_callstate2str")] + public static extern string switch_channel_callstate2str(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_str2callstate")] + public static extern int switch_channel_str2callstate(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_channel_mark_hold")] + public static extern void switch_channel_mark_hold(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_create")] + public static extern int switch_buffer_create(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_create_dynamic")] + public static extern int switch_buffer_create_dynamic(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_add_mutex")] + public static extern void switch_buffer_add_mutex(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_lock")] + public static extern void switch_buffer_lock(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_trylock")] + public static extern int switch_buffer_trylock(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_unlock")] + public static extern void switch_buffer_unlock(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_len")] + public static extern IntPtr switch_buffer_len(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_freespace")] + public static extern IntPtr switch_buffer_freespace(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_inuse")] + public static extern IntPtr switch_buffer_inuse(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_read")] + public static extern IntPtr switch_buffer_read(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_peek")] + public static extern IntPtr switch_buffer_peek(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_read_loop")] + public static extern IntPtr switch_buffer_read_loop(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_set_loops")] + public static extern void switch_buffer_set_loops(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_write")] + public static extern IntPtr switch_buffer_write(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_toss")] + public static extern IntPtr switch_buffer_toss(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_zero")] + public static extern void switch_buffer_zero(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_slide_write")] + public static extern IntPtr switch_buffer_slide_write(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_destroy")] + public static extern void switch_buffer_destroy(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_buffer_zwrite")] + public static extern IntPtr switch_buffer_zwrite(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_header_name_set")] + public static extern void switch_event_header_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_header_name_get")] + public static extern string switch_event_header_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_header_value_set")] + public static extern void switch_event_header_value_set(HandleRef jarg1, string jarg2); + + [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_hash_set")] + public static extern void switch_event_header_hash_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_header_hash_get")] + public static extern uint switch_event_header_hash_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_header_next_set")] + public static extern void switch_event_header_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_header_next_get")] + public static extern IntPtr switch_event_header_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_event_header")] + public static extern IntPtr new_switch_event_header(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_event_header")] + public static extern void delete_switch_event_header(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_event_id_set")] + public static extern void switch_event_event_id_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_event_id_get")] + public static extern int switch_event_event_id_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_priority_set")] + public static extern void switch_event_priority_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_priority_get")] + public static extern int switch_event_priority_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_owner_set")] + public static extern void switch_event_owner_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_owner_get")] + public static extern string switch_event_owner_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_subclass_name_set")] + public static extern void switch_event_subclass_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_subclass_name_get")] + public static extern string switch_event_subclass_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_headers_set")] + public static extern void switch_event_headers_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_headers_get")] + public static extern IntPtr switch_event_headers_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_last_header_set")] + public static extern void switch_event_last_header_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_last_header_get")] + public static extern IntPtr switch_event_last_header_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_body_set")] + public static extern void switch_event_body_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_body_get")] + public static extern string switch_event_body_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_bind_user_data_set")] + public static extern void switch_event_bind_user_data_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_bind_user_data_get")] + public static extern IntPtr switch_event_bind_user_data_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_event_user_data_set")] + public static extern void switch_event_event_user_data_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_event_user_data_get")] + public static extern IntPtr switch_event_event_user_data_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_key_set")] + public static extern void switch_event_key_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_key_get")] + public static extern uint switch_event_key_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_next_set")] + public static extern void switch_event_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_next_get")] + public static extern IntPtr switch_event_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_flags_set")] + public static extern void switch_event_flags_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_flags_get")] + public static extern int switch_event_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_event")] + public static extern IntPtr new_switch_event(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_event")] + public static extern void delete_switch_event(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_init")] + public static extern int switch_event_init(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_shutdown")] + public static extern int switch_event_shutdown(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_create_subclass_detailed")] + public static extern int switch_event_create_subclass_detailed(string jarg1, string jarg2, int jarg3, HandleRef jarg4, int jarg5, string jarg6); + + [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_body")] + public static extern string switch_event_get_body(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_set_subclass_name")] + public static extern int switch_event_set_subclass_name(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_add_header_string")] + public static extern int switch_event_add_header_string(HandleRef jarg1, int jarg2, string jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_del_header_val")] + public static extern int switch_event_del_header_val(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_destroy")] + public static extern void switch_event_destroy(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_dup")] + public static extern int switch_event_dup(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_merge")] + public static extern void switch_event_merge(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_fire_detailed")] + public static extern int switch_event_fire_detailed(string jarg1, string jarg2, int jarg3, HandleRef jarg4, HandleRef jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_prep_for_delivery_detailed")] + public static extern void switch_event_prep_for_delivery_detailed(string jarg1, string jarg2, int jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_bind")] + public static extern int switch_event_bind(string jarg1, int jarg2, string jarg3, HandleRef jarg4, HandleRef jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_bind_removable")] + public static extern int switch_event_bind_removable(string jarg1, int jarg2, string jarg3, HandleRef jarg4, HandleRef jarg5, HandleRef jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_unbind")] + public static extern int switch_event_unbind(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_unbind_callback")] + public static extern int switch_event_unbind_callback(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_name")] + public static extern string switch_event_name(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_name_event")] + public static extern int switch_name_event(string jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_reserve_subclass_detailed")] + public static extern int switch_event_reserve_subclass_detailed(string jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_free_subclass_detailed")] + public static extern int switch_event_free_subclass_detailed(string jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_serialize")] + public static extern int switch_event_serialize(HandleRef jarg1, ref string jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_serialize_json")] + public static extern int switch_event_serialize_json(HandleRef jarg1, ref string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_create_json")] + public static extern int switch_event_create_json(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_create_brackets")] + public static extern int switch_event_create_brackets(string jarg1, char jarg2, char jarg3, char jarg4, HandleRef jarg5, ref string jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_running")] + public static extern int switch_event_running(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_expand_headers")] + public static extern string switch_event_expand_headers(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_create_pres_in_detailed")] + public static extern int switch_event_create_pres_in_detailed(string jarg1, string jarg2, int jarg3, string jarg4, string jarg5, string jarg6, string jarg7, string jarg8, string jarg9, string jarg10, int jarg11, string jarg12, string jarg13, string jarg14, string jarg15); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_create_plain")] + public static extern int switch_event_create_plain(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_deliver")] + public static extern void switch_event_deliver(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_event_build_param_string")] + public static extern string switch_event_build_param_string(HandleRef jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_RESAMPLE_QUALITY_get")] + public static extern int SWITCH_RESAMPLE_QUALITY_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_resampler_set")] + public static extern void switch_audio_resampler_t_resampler_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_resampler_get")] + public static extern IntPtr switch_audio_resampler_t_resampler_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_from_rate_set")] + public static extern void switch_audio_resampler_t_from_rate_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_from_rate_get")] + public static extern int switch_audio_resampler_t_from_rate_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_to_rate_set")] + public static extern void switch_audio_resampler_t_to_rate_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_to_rate_get")] + public static extern int switch_audio_resampler_t_to_rate_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_factor_set")] + public static extern void switch_audio_resampler_t_factor_set(HandleRef jarg1, double jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_factor_get")] + public static extern double switch_audio_resampler_t_factor_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_rfactor_set")] + public static extern void switch_audio_resampler_t_rfactor_set(HandleRef jarg1, double jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_rfactor_get")] + public static extern double switch_audio_resampler_t_rfactor_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_to_set")] + public static extern void switch_audio_resampler_t_to_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_to_get")] + public static extern IntPtr switch_audio_resampler_t_to_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_to_len_set")] + public static extern void switch_audio_resampler_t_to_len_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_to_len_get")] + public static extern uint switch_audio_resampler_t_to_len_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_to_size_set")] + public static extern void switch_audio_resampler_t_to_size_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_audio_resampler_t_to_size_get")] + public static extern uint switch_audio_resampler_t_to_size_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_audio_resampler_t")] + public static extern IntPtr new_switch_audio_resampler_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_audio_resampler_t")] + public static extern void delete_switch_audio_resampler_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_resample_perform_create")] + public static extern int switch_resample_perform_create(HandleRef jarg1, uint jarg2, uint jarg3, uint jarg4, int jarg5, uint jarg6, string jarg7, string jarg8, int jarg9); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_resample_destroy")] + public static extern void switch_resample_destroy(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_resample_process")] + public static extern uint switch_resample_process(HandleRef jarg1, HandleRef jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_float_to_short")] + public static extern IntPtr switch_float_to_short(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_char_to_float")] + public static extern int switch_char_to_float(string jarg1, HandleRef jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_float_to_char")] + public static extern int switch_float_to_char(HandleRef jarg1, string jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_short_to_float")] + public static extern int switch_short_to_float(HandleRef jarg1, HandleRef jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_swap_linear")] + public static extern void switch_swap_linear(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_generate_sln_silence")] + public static extern void switch_generate_sln_silence(HandleRef jarg1, uint jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_change_sln_volume")] + public static extern void switch_change_sln_volume(HandleRef jarg1, uint jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_merge_sln")] + public static extern uint switch_merge_sln(HandleRef jarg1, uint jarg2, HandleRef jarg3, uint jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_mux_channels")] + public static extern void switch_mux_channels(HandleRef jarg1, HandleRef jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_session_set")] + public static extern void switch_unicast_conninfo_session_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_session_get")] + public static extern IntPtr switch_unicast_conninfo_session_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_read_codec_set")] + public static extern void switch_unicast_conninfo_read_codec_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_read_codec_get")] + public static extern IntPtr switch_unicast_conninfo_read_codec_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_write_frame_set")] + public static extern void switch_unicast_conninfo_write_frame_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_write_frame_get")] + public static extern IntPtr switch_unicast_conninfo_write_frame_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_write_frame_data_set")] + public static extern void switch_unicast_conninfo_write_frame_data_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_write_frame_data_get")] + public static extern IntPtr switch_unicast_conninfo_write_frame_data_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_socket_set")] + public static extern void switch_unicast_conninfo_socket_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_socket_get")] + public static extern IntPtr switch_unicast_conninfo_socket_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_local_ip_set")] + public static extern void switch_unicast_conninfo_local_ip_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_local_ip_get")] + public static extern string switch_unicast_conninfo_local_ip_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_local_port_set")] + public static extern void switch_unicast_conninfo_local_port_set(HandleRef jarg1, ushort jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_local_port_get")] + public static extern ushort switch_unicast_conninfo_local_port_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_remote_ip_set")] + public static extern void switch_unicast_conninfo_remote_ip_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_remote_ip_get")] + public static extern string switch_unicast_conninfo_remote_ip_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_remote_port_set")] + public static extern void switch_unicast_conninfo_remote_port_set(HandleRef jarg1, ushort jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_remote_port_get")] + public static extern ushort switch_unicast_conninfo_remote_port_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_local_addr_set")] + public static extern void switch_unicast_conninfo_local_addr_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_local_addr_get")] + public static extern IntPtr switch_unicast_conninfo_local_addr_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_remote_addr_set")] + public static extern void switch_unicast_conninfo_remote_addr_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_remote_addr_get")] + public static extern IntPtr switch_unicast_conninfo_remote_addr_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_flag_mutex_set")] + public static extern void switch_unicast_conninfo_flag_mutex_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_flag_mutex_get")] + public static extern IntPtr switch_unicast_conninfo_flag_mutex_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_flags_set")] + public static extern void switch_unicast_conninfo_flags_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_flags_get")] + public static extern int switch_unicast_conninfo_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_type_set")] + public static extern void switch_unicast_conninfo_type_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_type_get")] + public static extern int switch_unicast_conninfo_type_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_transport_set")] + public static extern void switch_unicast_conninfo_transport_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_transport_get")] + public static extern int switch_unicast_conninfo_transport_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_stream_id_set")] + public static extern void switch_unicast_conninfo_stream_id_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_unicast_conninfo_stream_id_get")] + public static extern int switch_unicast_conninfo_stream_id_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_unicast_conninfo")] + public static extern IntPtr new_switch_unicast_conninfo(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_unicast_conninfo")] + public static extern void delete_switch_unicast_conninfo(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_deactivate_unicast")] + public static extern int switch_ivr_deactivate_unicast(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_activate_unicast")] + public static extern int switch_ivr_activate_unicast(HandleRef jarg1, string jarg2, ushort jarg3, string jarg4, ushort jarg5, string jarg6, string jarg7); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_generate_xml_cdr")] + public static extern int switch_ivr_generate_xml_cdr(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_set_xml_profile_data")] + public static extern int switch_ivr_set_xml_profile_data(HandleRef jarg1, HandleRef jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_set_xml_chan_vars")] + public static extern int switch_ivr_set_xml_chan_vars(HandleRef jarg1, HandleRef jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_parse_event")] + public static extern int switch_ivr_parse_event(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_parse_all_events")] + public static extern int switch_ivr_parse_all_events(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_parse_next_event")] + public static extern int switch_ivr_parse_next_event(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_parse_all_messages")] + public static extern int switch_ivr_parse_all_messages(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_sleep")] + public static extern int switch_ivr_sleep(HandleRef jarg1, uint jarg2, int jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_park")] + public static extern int switch_ivr_park(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_collect_digits_callback")] + public static extern int switch_ivr_collect_digits_callback(HandleRef jarg1, HandleRef jarg2, uint jarg3, uint jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_collect_digits_count")] + public static extern int switch_ivr_collect_digits_count(HandleRef jarg1, string jarg2, HandleRef jarg3, HandleRef jarg4, string jarg5, string jarg6, uint jarg7, uint jarg8, uint jarg9); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_detect_speech")] + public static extern int switch_ivr_detect_speech(HandleRef jarg1, string jarg2, string jarg3, string jarg4, string jarg5, HandleRef jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_stop_detect_speech")] + public static extern int switch_ivr_stop_detect_speech(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_pause_detect_speech")] + public static extern int switch_ivr_pause_detect_speech(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_resume_detect_speech")] + public static extern int switch_ivr_resume_detect_speech(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_detect_speech_load_grammar")] + public static extern int switch_ivr_detect_speech_load_grammar(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_detect_speech_unload_grammar")] + public static extern int switch_ivr_detect_speech_unload_grammar(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_set_param_detect_speech")] + public static extern int switch_ivr_set_param_detect_speech(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_record_session")] + public static extern int switch_ivr_record_session(HandleRef jarg1, string jarg2, uint jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_eavesdrop_session")] + public static extern int switch_ivr_eavesdrop_session(HandleRef jarg1, string jarg2, string jarg3, uint jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_displace_session")] + public static extern int switch_ivr_displace_session(HandleRef jarg1, string jarg2, uint jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_stop_displace_session")] + public static extern int switch_ivr_stop_displace_session(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_stop_record_session")] + public static extern int switch_ivr_stop_record_session(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_session_audio")] + public static extern int switch_ivr_session_audio(HandleRef jarg1, string jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_stop_session_audio")] + public static extern int switch_ivr_stop_session_audio(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_inband_dtmf_session")] + public static extern int switch_ivr_inband_dtmf_session(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_stop_inband_dtmf_session")] + public static extern int switch_ivr_stop_inband_dtmf_session(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_inband_dtmf_generate_session")] + public static extern int switch_ivr_inband_dtmf_generate_session(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_stop_inband_dtmf_generate_session")] + public static extern int switch_ivr_stop_inband_dtmf_generate_session(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_session_echo")] + public static extern void switch_ivr_session_echo(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_stop_tone_detect_session")] + public static extern int switch_ivr_stop_tone_detect_session(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_tone_detect_session")] + public static extern int switch_ivr_tone_detect_session(HandleRef jarg1, string jarg2, string jarg3, string jarg4, HandleRef jarg5, int jarg6, string jarg7, string jarg8, HandleRef jarg9); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_play_file")] + public static extern int switch_ivr_play_file(HandleRef jarg1, HandleRef jarg2, string jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_wait_for_silence")] + public static extern int switch_ivr_wait_for_silence(HandleRef jarg1, uint jarg2, uint jarg3, uint jarg4, uint jarg5, string jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_gentones")] + public static extern int switch_ivr_gentones(HandleRef jarg1, string jarg2, int jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_record_file")] + public static extern int switch_ivr_record_file(HandleRef jarg1, HandleRef jarg2, string jarg3, HandleRef jarg4, uint jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_play_and_get_digits")] + public static extern int switch_play_and_get_digits(HandleRef jarg1, uint jarg2, uint jarg3, uint jarg4, uint jarg5, string jarg6, string jarg7, string jarg8, string jarg9, string jarg10, uint jarg11, string jarg12); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_speak_text_handle")] + public static extern int switch_ivr_speak_text_handle(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4, string jarg5, HandleRef jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_clear_speech_cache")] + public static extern void switch_ivr_clear_speech_cache(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_speak_text")] + public static extern int switch_ivr_speak_text(HandleRef jarg1, string jarg2, string jarg3, string jarg4, HandleRef jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_originate")] + public static extern int switch_ivr_originate(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, string jarg4, uint jarg5, HandleRef jarg6, string jarg7, string jarg8, HandleRef jarg9, HandleRef jarg10, uint jarg11, HandleRef jarg12); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_enterprise_originate")] + public static extern int switch_ivr_enterprise_originate(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, string jarg4, uint jarg5, HandleRef jarg6, string jarg7, string jarg8, HandleRef jarg9, HandleRef jarg10, uint jarg11); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_bridge_display")] + public static extern void switch_ivr_bridge_display(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_multi_threaded_bridge")] + public static extern int switch_ivr_multi_threaded_bridge(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4, HandleRef jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_signal_bridge")] + public static extern int switch_ivr_signal_bridge(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_session_transfer")] + public static extern int switch_ivr_session_transfer(HandleRef jarg1, string jarg2, string jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_schedule_transfer")] + public static extern uint switch_ivr_schedule_transfer(HandleRef jarg1, string jarg2, string jarg3, string jarg4, string jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_schedule_hangup")] + public static extern uint switch_ivr_schedule_hangup(HandleRef jarg1, string jarg2, int jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_uuid_bridge")] + public static extern int switch_ivr_uuid_bridge(string jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_media")] + public static extern int switch_ivr_media(string jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_nomedia")] + public static extern int switch_ivr_nomedia(string jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_hold_uuid")] + public static extern int switch_ivr_hold_uuid(string jarg1, string jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_unhold_uuid")] + public static extern int switch_ivr_unhold_uuid(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_hold")] + public static extern int switch_ivr_hold(HandleRef jarg1, string jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_unhold")] + public static extern int switch_ivr_unhold(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_schedule_broadcast")] + public static extern uint switch_ivr_schedule_broadcast(HandleRef jarg1, string jarg2, string jarg3, uint jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_broadcast")] + public static extern int switch_ivr_broadcast(string jarg1, string jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_transfer_variable")] + public static extern int switch_ivr_transfer_variable(HandleRef jarg1, HandleRef jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_digit_stream_parser_new")] + public static extern int switch_ivr_digit_stream_parser_new(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_digit_stream_parser_destroy")] + public static extern int switch_ivr_digit_stream_parser_destroy(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_digit_stream_new")] + public static extern int switch_ivr_digit_stream_new(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_digit_stream_destroy")] + public static extern int switch_ivr_digit_stream_destroy(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_digit_stream_parser_set_event")] + public static extern int switch_ivr_digit_stream_parser_set_event(HandleRef jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_digit_stream_parser_del_event")] + public static extern int switch_ivr_digit_stream_parser_del_event(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_digit_stream_parser_feed")] + public static extern IntPtr switch_ivr_digit_stream_parser_feed(HandleRef jarg1, HandleRef jarg2, char jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_digit_stream_reset")] + public static extern int switch_ivr_digit_stream_reset(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_digit_stream_parser_set_terminator")] + public static extern int switch_ivr_digit_stream_parser_set_terminator(HandleRef jarg1, char jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_menu_init")] + public static extern int switch_ivr_menu_init(HandleRef jarg1, HandleRef jarg2, string jarg3, string jarg4, string jarg5, string jarg6, string jarg7, string jarg8, string jarg9, string jarg10, string jarg11, int jarg12, int jarg13, int jarg14, int jarg15, int jarg16, int jarg17, HandleRef jarg18); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_menu_bind_action")] + public static extern int switch_ivr_menu_bind_action(HandleRef jarg1, int jarg2, string jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_menu_bind_function")] + public static extern int switch_ivr_menu_bind_function(HandleRef jarg1, HandleRef jarg2, string jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_menu_execute")] + public static extern int switch_ivr_menu_execute(HandleRef jarg1, HandleRef jarg2, string jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_menu_stack_free")] + public static extern int switch_ivr_menu_stack_free(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_menu_stack_xml_build")] + public static extern int switch_ivr_menu_stack_xml_build(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_menu_str2action")] + public static extern int switch_ivr_menu_str2action(string jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_menu_stack_xml_add_custom")] + public static extern int switch_ivr_menu_stack_xml_add_custom(HandleRef jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_menu_stack_xml_init")] + public static extern int switch_ivr_menu_stack_xml_init(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_phrase_macro_event")] + public static extern int switch_ivr_phrase_macro_event(HandleRef jarg1, string jarg2, string jarg3, HandleRef jarg4, string jarg5, HandleRef jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_delay_echo")] + public static extern void switch_ivr_delay_echo(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_find_bridged_uuid")] + public static extern int switch_ivr_find_bridged_uuid(string jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_intercept_session")] + public static extern void switch_ivr_intercept_session(HandleRef jarg1, string jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_park_session")] + public static extern void switch_ivr_park_session(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_wait_for_answer")] + public static extern int switch_ivr_wait_for_answer(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_read")] + public static extern int switch_ivr_read(HandleRef jarg1, uint jarg2, uint jarg3, string jarg4, string jarg5, string jarg6, HandleRef jarg7, uint jarg8, string jarg9); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_block_dtmf_session")] + public static extern int switch_ivr_block_dtmf_session(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_unblock_dtmf_session")] + public static extern int switch_ivr_unblock_dtmf_session(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_bind_dtmf_meta_session")] + public static extern int switch_ivr_bind_dtmf_meta_session(HandleRef jarg1, uint jarg2, uint jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_unbind_dtmf_meta_session")] + public static extern int switch_ivr_unbind_dtmf_meta_session(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_soft_hold")] + public static extern int switch_ivr_soft_hold(HandleRef jarg1, string jarg2, string jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_say")] + public static extern int switch_ivr_say(HandleRef jarg1, string jarg2, string jarg3, string jarg4, string jarg5, string jarg6, HandleRef jarg7); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_get_say_method_by_name")] + public static extern int switch_ivr_get_say_method_by_name(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_get_say_gender_by_name")] + public static extern int switch_ivr_get_say_gender_by_name(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_get_say_type_by_name")] + public static extern int switch_ivr_get_say_type_by_name(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_say_spell")] + public static extern int switch_ivr_say_spell(HandleRef jarg1, string jarg2, HandleRef jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_say_ip")] + public static extern int switch_ivr_say_ip(HandleRef jarg1, string jarg2, HandleRef jarg3, HandleRef jarg4, HandleRef jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_set_user")] + public static extern int switch_ivr_set_user(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_sound_test")] + public static extern int switch_ivr_sound_test(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_process_import")] + public static extern void switch_process_import(HandleRef jarg1, HandleRef jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_ivr_uuid_exists")] + public static extern int switch_ivr_uuid_exists(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_RTP_MAX_BUF_LEN_get")] + public static extern int SWITCH_RTP_MAX_BUF_LEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_RTCP_MAX_BUF_LEN_get")] + public static extern int SWITCH_RTCP_MAX_BUF_LEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_RTP_MAX_CRYPTO_LEN_get")] + public static extern int SWITCH_RTP_MAX_CRYPTO_LEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_RTP_KEY_LEN_get")] + public static extern int SWITCH_RTP_KEY_LEN_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_RTP_CRYPTO_KEY_32_get")] + public static extern string SWITCH_RTP_CRYPTO_KEY_32_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_RTP_CRYPTO_KEY_80_get")] + public static extern string SWITCH_RTP_CRYPTO_KEY_80_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_crypto_key_index_set")] + public static extern void switch_rtp_crypto_key_index_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_crypto_key_index_get")] + public static extern uint switch_rtp_crypto_key_index_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_crypto_key_type_set")] + public static extern void switch_rtp_crypto_key_type_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_crypto_key_type_get")] + public static extern int switch_rtp_crypto_key_type_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_crypto_key_key_set")] + public static extern void switch_rtp_crypto_key_key_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_crypto_key_key_get")] + public static extern IntPtr switch_rtp_crypto_key_key_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_crypto_key_keylen_set")] + public static extern void switch_rtp_crypto_key_keylen_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_crypto_key_keylen_get")] + public static extern IntPtr switch_rtp_crypto_key_keylen_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_crypto_key_next_set")] + public static extern void switch_rtp_crypto_key_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_crypto_key_next_get")] + public static extern IntPtr switch_rtp_crypto_key_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_rtp_crypto_key")] + public static extern IntPtr new_switch_rtp_crypto_key(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_rtp_crypto_key")] + public static extern void delete_switch_rtp_crypto_key(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_add_crypto_key")] + public static extern int switch_rtp_add_crypto_key(HandleRef jarg1, int jarg2, uint jarg3, int jarg4, HandleRef jarg5, HandleRef jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_get_random")] + public static extern void switch_rtp_get_random(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_init")] + public static extern void switch_rtp_init(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_shutdown")] + public static extern void switch_rtp_shutdown(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_start_port")] + public static extern ushort switch_rtp_set_start_port(ushort jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_ssrc")] + public static extern int switch_rtp_set_ssrc(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_end_port")] + public static extern ushort switch_rtp_set_end_port(ushort jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_request_port")] + public static extern ushort switch_rtp_request_port(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_release_port")] + public static extern void switch_rtp_release_port(string jarg1, ushort jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_interval")] + public static extern int switch_rtp_set_interval(HandleRef jarg1, uint jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_change_interval")] + public static extern int switch_rtp_change_interval(HandleRef jarg1, uint jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_create")] + public static extern int switch_rtp_create(HandleRef jarg1, byte jarg2, uint jarg3, uint jarg4, uint jarg5, string jarg6, ref string jarg7, HandleRef jarg8); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_new")] + public static extern IntPtr switch_rtp_new(string jarg1, ushort jarg2, string jarg3, ushort jarg4, byte jarg5, uint jarg6, uint jarg7, uint jarg8, string jarg9, ref string jarg10, HandleRef jarg11); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_remote_address")] + public static extern int switch_rtp_set_remote_address(HandleRef jarg1, string jarg2, ushort jarg3, ushort jarg4, int jarg5, ref string jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_get_remote_host")] + public static extern string switch_rtp_get_remote_host(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_get_remote_port")] + public static extern ushort switch_rtp_get_remote_port(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_reset_media_timer")] + public static extern void switch_rtp_reset_media_timer(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_max_missed_packets")] + public static extern void switch_rtp_set_max_missed_packets(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_udptl_mode")] + public static extern int switch_rtp_udptl_mode(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_local_address")] + public static extern int switch_rtp_set_local_address(HandleRef jarg1, string jarg2, ushort jarg3, ref string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_kill_socket")] + public static extern void switch_rtp_kill_socket(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_break")] + public static extern void switch_rtp_break(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_ready")] + public static extern byte switch_rtp_ready(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_destroy")] + public static extern void switch_rtp_destroy(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_activate_ice")] + public static extern int switch_rtp_activate_ice(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_activate_rtcp")] + public static extern int switch_rtp_activate_rtcp(HandleRef jarg1, int jarg2, ushort jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_activate_jitter_buffer")] + public static extern int switch_rtp_activate_jitter_buffer(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_flag")] + public static extern void switch_rtp_set_flag(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_test_flag")] + public static extern uint switch_rtp_test_flag(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_clear_flag")] + public static extern void switch_rtp_clear_flag(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_get_rtp_socket")] + public static extern IntPtr switch_rtp_get_rtp_socket(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_get_default_samples_per_interval")] + public static extern uint switch_rtp_get_default_samples_per_interval(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_default_payload")] + public static extern void switch_rtp_set_default_payload(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_get_default_payload")] + public static extern uint switch_rtp_get_default_payload(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_invald_handler")] + public static extern void switch_rtp_set_invald_handler(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_read")] + public static extern int switch_rtp_read(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4, HandleRef jarg5, uint jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_queue_rfc2833")] + public static extern int switch_rtp_queue_rfc2833(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_queue_rfc2833_in")] + public static extern int switch_rtp_queue_rfc2833_in(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_has_dtmf")] + public static extern IntPtr switch_rtp_has_dtmf(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_dequeue_dtmf")] + public static extern IntPtr switch_rtp_dequeue_dtmf(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_zerocopy_read")] + public static extern int switch_rtp_zerocopy_read(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4, HandleRef jarg5, uint jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_zerocopy_read_frame")] + public static extern int switch_rtp_zerocopy_read_frame(HandleRef jarg1, HandleRef jarg2, uint jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtcp_zerocopy_read_frame")] + public static extern int switch_rtcp_zerocopy_read_frame(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_rtp_flush_read_buffer")] + public static extern void rtp_flush_read_buffer(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_enable_vad")] + public static extern int switch_rtp_enable_vad(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, uint jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_disable_vad")] + public static extern int switch_rtp_disable_vad(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_write_frame")] + public static extern int switch_rtp_write_frame(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_write_manual")] + public static extern int switch_rtp_write_manual(HandleRef jarg1, HandleRef jarg2, uint jarg3, byte jarg4, byte jarg5, uint jarg6, HandleRef jarg7); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_get_ssrc")] + public static extern uint switch_rtp_get_ssrc(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_private")] + public static extern void switch_rtp_set_private(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_telephony_event")] + public static extern void switch_rtp_set_telephony_event(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_telephony_recv_event")] + public static extern void switch_rtp_set_telephony_recv_event(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_set_cng_pt")] + public static extern void switch_rtp_set_cng_pt(HandleRef jarg1, byte jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_get_private")] + public static extern IntPtr switch_rtp_get_private(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_activate_stun_ping")] + public static extern int switch_rtp_activate_stun_ping(HandleRef jarg1, string jarg2, ushort jarg3, uint jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_intentional_bugs")] + public static extern void switch_rtp_intentional_bugs(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_rtp_get_stats")] + public static extern IntPtr switch_rtp_get_stats(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_data_set")] + public static extern void switch_log_node_t_data_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_data_get")] + public static extern string switch_log_node_t_data_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_file_set")] + public static extern void switch_log_node_t_file_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_file_get")] + public static extern string switch_log_node_t_file_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_line_set")] + public static extern void switch_log_node_t_line_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_line_get")] + public static extern uint switch_log_node_t_line_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_func_set")] + public static extern void switch_log_node_t_func_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_func_get")] + public static extern string switch_log_node_t_func_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_level_set")] + public static extern void switch_log_node_t_level_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_level_get")] + public static extern int switch_log_node_t_level_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_timestamp_set")] + public static extern void switch_log_node_t_timestamp_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_timestamp_get")] + public static extern IntPtr switch_log_node_t_timestamp_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_content_set")] + public static extern void switch_log_node_t_content_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_content_get")] + public static extern string switch_log_node_t_content_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_userdata_set")] + public static extern void switch_log_node_t_userdata_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_userdata_get")] + public static extern string switch_log_node_t_userdata_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_channel_set")] + public static extern void switch_log_node_t_channel_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_t_channel_get")] + public static extern int switch_log_node_t_channel_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_log_node_t")] + public static extern IntPtr new_switch_log_node_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_log_node_t")] + public static extern void delete_switch_log_node_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_init")] + public static extern int switch_log_init(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_shutdown")] + public static extern int switch_log_shutdown(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_bind_logger")] + public static extern int switch_log_bind_logger(HandleRef jarg1, int jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_unbind_logger")] + public static extern int switch_log_unbind_logger(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_level2str")] + public static extern string switch_log_level2str(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_str2level")] + public static extern int switch_log_str2level(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_str2mask")] + public static extern uint switch_log_str2mask(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_dup")] + public static extern IntPtr switch_log_node_dup(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_log_node_free")] + public static extern void switch_log_node_free(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_XML_BUFSIZE_get")] + public static extern int SWITCH_XML_BUFSIZE_get(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_name_set")] + public static extern void switch_xml_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_name_get")] + public static extern string switch_xml_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_attr_set")] + public static extern void switch_xml_attr_set(HandleRef jarg1, ref string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_attr_get")] + public static extern string switch_xml_attr_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_txt_set")] + public static extern void switch_xml_txt_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_txt_get")] + public static extern string switch_xml_txt_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_free_path_set")] + public static extern void switch_xml_free_path_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_free_path_get")] + public static extern string switch_xml_free_path_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_off_set")] + public static extern void switch_xml_off_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_off_get")] + public static extern IntPtr switch_xml_off_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_next_set")] + public static extern void switch_xml_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_next_get")] + public static extern IntPtr switch_xml_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_sibling_set")] + public static extern void switch_xml_sibling_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_sibling_get")] + public static extern IntPtr switch_xml_sibling_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_ordered_set")] + public static extern void switch_xml_ordered_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_ordered_get")] + public static extern IntPtr switch_xml_ordered_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_child_set")] + public static extern void switch_xml_child_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_child_get")] + public static extern IntPtr switch_xml_child_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_parent_set")] + public static extern void switch_xml_parent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_parent_get")] + public static extern IntPtr switch_xml_parent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_flags_set")] + public static extern void switch_xml_flags_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_flags_get")] + public static extern uint switch_xml_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_is_switch_xml_root_t_set")] + public static extern void switch_xml_is_switch_xml_root_t_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_is_switch_xml_root_t_get")] + public static extern int switch_xml_is_switch_xml_root_t_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_xml")] + public static extern IntPtr new_switch_xml(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_xml")] + public static extern void delete_switch_xml(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_parse_str_dynamic")] + public static extern IntPtr switch_xml_parse_str_dynamic(string jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_parse_str")] + public static extern IntPtr switch_xml_parse_str(string jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_parse_fd")] + public static extern IntPtr switch_xml_parse_fd(int jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_parse_file")] + public static extern IntPtr switch_xml_parse_file(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_parse_file_simple")] + public static extern IntPtr switch_xml_parse_file_simple(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_parse_fp")] + public static extern IntPtr switch_xml_parse_fp(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_child")] + public static extern IntPtr switch_xml_child(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_find_child")] + public static extern IntPtr switch_xml_find_child(HandleRef jarg1, string jarg2, string jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_find_child_multi")] + public static extern IntPtr switch_xml_find_child_multi(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_attr")] + public static extern string switch_xml_attr(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_attr_soft")] + public static extern string switch_xml_attr_soft(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_get")] + public static extern IntPtr switch_xml_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_toxml")] + public static extern string switch_xml_toxml(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_toxml_buf")] + public static extern string switch_xml_toxml_buf(HandleRef jarg1, string jarg2, HandleRef jarg3, HandleRef jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_free")] + public static extern void switch_xml_free(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_free_in_thread")] + public static extern void switch_xml_free_in_thread(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_error")] + public static extern string switch_xml_error(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_new")] + public static extern IntPtr switch_xml_new(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_add_child")] + public static extern IntPtr switch_xml_add_child(HandleRef jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_set_txt")] + public static extern IntPtr switch_xml_set_txt(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_set_attr")] + public static extern IntPtr switch_xml_set_attr(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_set_flag")] + public static extern IntPtr switch_xml_set_flag(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_cut")] + public static extern IntPtr switch_xml_cut(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_insert")] + public static extern IntPtr switch_xml_insert(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_open_root")] + public static extern IntPtr switch_xml_open_root(byte jarg1, ref string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_init")] + public static extern int switch_xml_init(HandleRef jarg1, ref string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_destroy")] + public static extern int switch_xml_destroy(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_root")] + public static extern IntPtr switch_xml_root(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate")] + public static extern int switch_xml_locate(string jarg1, string jarg2, string jarg3, string jarg4, HandleRef jarg5, HandleRef jarg6, HandleRef jarg7, int jarg8); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate_domain")] + public static extern int switch_xml_locate_domain(string jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate_group")] + public static extern int switch_xml_locate_group(string jarg1, string jarg2, HandleRef jarg3, HandleRef jarg4, HandleRef jarg5, HandleRef jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate_user")] + public static extern int switch_xml_locate_user(string jarg1, string jarg2, string jarg3, string jarg4, HandleRef jarg5, HandleRef jarg6, HandleRef jarg7, HandleRef jarg8, HandleRef jarg9); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_locate_user_in_domain")] + public static extern int switch_xml_locate_user_in_domain(string jarg1, HandleRef jarg2, HandleRef jarg3, HandleRef jarg4); + + [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_merge_user")] + public static extern void switch_xml_merge_user(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_dup")] + public static extern IntPtr switch_xml_dup(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_open_cfg")] + public static extern IntPtr switch_xml_open_cfg(string jarg1, HandleRef jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_set_binding_sections")] + public static extern void switch_xml_set_binding_sections(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_set_binding_user_data")] + public static extern void switch_xml_set_binding_user_data(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_get_binding_sections")] + public static extern uint switch_xml_get_binding_sections(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_get_binding_user_data")] + public static extern IntPtr switch_xml_get_binding_user_data(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_bind_search_function_ret")] + public static extern int switch_xml_bind_search_function_ret(HandleRef jarg1, uint jarg2, HandleRef jarg3, HandleRef jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_unbind_search_function")] + public static extern int switch_xml_unbind_search_function(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_unbind_search_function_ptr")] + public static extern int switch_xml_unbind_search_function_ptr(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_parse_section_string")] + public static extern uint switch_xml_parse_section_string(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_xml_std_datetime_check")] + public static extern int switch_xml_std_datetime_check(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_outgoing_channel_outgoing_channel_set")] + public static extern void switch_io_event_hook_outgoing_channel_outgoing_channel_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_outgoing_channel_outgoing_channel_get")] + public static extern IntPtr switch_io_event_hook_outgoing_channel_outgoing_channel_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_outgoing_channel_next_set")] + public static extern void switch_io_event_hook_outgoing_channel_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_outgoing_channel_next_get")] + public static extern IntPtr switch_io_event_hook_outgoing_channel_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_io_event_hook_outgoing_channel")] + public static extern IntPtr new_switch_io_event_hook_outgoing_channel(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_io_event_hook_outgoing_channel")] + public static extern void delete_switch_io_event_hook_outgoing_channel(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_receive_message_receive_message_set")] + public static extern void switch_io_event_hook_receive_message_receive_message_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_receive_message_receive_message_get")] + public static extern IntPtr switch_io_event_hook_receive_message_receive_message_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_receive_message_next_set")] + public static extern void switch_io_event_hook_receive_message_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_receive_message_next_get")] + public static extern IntPtr switch_io_event_hook_receive_message_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_io_event_hook_receive_message")] + public static extern IntPtr new_switch_io_event_hook_receive_message(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_io_event_hook_receive_message")] + public static extern void delete_switch_io_event_hook_receive_message(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_receive_event_receive_event_set")] + public static extern void switch_io_event_hook_receive_event_receive_event_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_receive_event_receive_event_get")] + public static extern IntPtr switch_io_event_hook_receive_event_receive_event_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_receive_event_next_set")] + public static extern void switch_io_event_hook_receive_event_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_receive_event_next_get")] + public static extern IntPtr switch_io_event_hook_receive_event_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_io_event_hook_receive_event")] + public static extern IntPtr new_switch_io_event_hook_receive_event(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_io_event_hook_receive_event")] + public static extern void delete_switch_io_event_hook_receive_event(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_read_frame_read_frame_set")] + public static extern void switch_io_event_hook_read_frame_read_frame_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_read_frame_read_frame_get")] + public static extern IntPtr switch_io_event_hook_read_frame_read_frame_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_read_frame_next_set")] + public static extern void switch_io_event_hook_read_frame_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_read_frame_next_get")] + public static extern IntPtr switch_io_event_hook_read_frame_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_io_event_hook_read_frame")] + public static extern IntPtr new_switch_io_event_hook_read_frame(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_io_event_hook_read_frame")] + public static extern void delete_switch_io_event_hook_read_frame(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_video_read_frame_video_read_frame_set")] + public static extern void switch_io_event_hook_video_read_frame_video_read_frame_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_video_read_frame_video_read_frame_get")] + public static extern IntPtr switch_io_event_hook_video_read_frame_video_read_frame_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_video_read_frame_next_set")] + public static extern void switch_io_event_hook_video_read_frame_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_video_read_frame_next_get")] + public static extern IntPtr switch_io_event_hook_video_read_frame_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_io_event_hook_video_read_frame")] + public static extern IntPtr new_switch_io_event_hook_video_read_frame(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_io_event_hook_video_read_frame")] + public static extern void delete_switch_io_event_hook_video_read_frame(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_write_frame_write_frame_set")] + public static extern void switch_io_event_hook_write_frame_write_frame_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_write_frame_write_frame_get")] + public static extern IntPtr switch_io_event_hook_write_frame_write_frame_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_write_frame_next_set")] + public static extern void switch_io_event_hook_write_frame_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_write_frame_next_get")] + public static extern IntPtr switch_io_event_hook_write_frame_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_io_event_hook_write_frame")] + public static extern IntPtr new_switch_io_event_hook_write_frame(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_io_event_hook_write_frame")] + public static extern void delete_switch_io_event_hook_write_frame(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_video_write_frame_video_write_frame_set")] + public static extern void switch_io_event_hook_video_write_frame_video_write_frame_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_video_write_frame_video_write_frame_get")] + public static extern IntPtr switch_io_event_hook_video_write_frame_video_write_frame_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_video_write_frame_next_set")] + public static extern void switch_io_event_hook_video_write_frame_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_video_write_frame_next_get")] + public static extern IntPtr switch_io_event_hook_video_write_frame_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_io_event_hook_video_write_frame")] + public static extern IntPtr new_switch_io_event_hook_video_write_frame(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_io_event_hook_video_write_frame")] + public static extern void delete_switch_io_event_hook_video_write_frame(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_kill_channel_kill_channel_set")] + public static extern void switch_io_event_hook_kill_channel_kill_channel_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_kill_channel_kill_channel_get")] + public static extern IntPtr switch_io_event_hook_kill_channel_kill_channel_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_kill_channel_next_set")] + public static extern void switch_io_event_hook_kill_channel_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_kill_channel_next_get")] + public static extern IntPtr switch_io_event_hook_kill_channel_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_io_event_hook_kill_channel")] + public static extern IntPtr new_switch_io_event_hook_kill_channel(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_io_event_hook_kill_channel")] + public static extern void delete_switch_io_event_hook_kill_channel(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_send_dtmf_send_dtmf_set")] + public static extern void switch_io_event_hook_send_dtmf_send_dtmf_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_send_dtmf_send_dtmf_get")] + public static extern IntPtr switch_io_event_hook_send_dtmf_send_dtmf_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_send_dtmf_next_set")] + public static extern void switch_io_event_hook_send_dtmf_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_send_dtmf_next_get")] + public static extern IntPtr switch_io_event_hook_send_dtmf_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_io_event_hook_send_dtmf")] + public static extern IntPtr new_switch_io_event_hook_send_dtmf(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_io_event_hook_send_dtmf")] + public static extern void delete_switch_io_event_hook_send_dtmf(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_recv_dtmf_recv_dtmf_set")] + public static extern void switch_io_event_hook_recv_dtmf_recv_dtmf_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_recv_dtmf_recv_dtmf_get")] + public static extern IntPtr switch_io_event_hook_recv_dtmf_recv_dtmf_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_recv_dtmf_next_set")] + public static extern void switch_io_event_hook_recv_dtmf_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_recv_dtmf_next_get")] + public static extern IntPtr switch_io_event_hook_recv_dtmf_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_io_event_hook_recv_dtmf")] + public static extern IntPtr new_switch_io_event_hook_recv_dtmf(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_io_event_hook_recv_dtmf")] + public static extern void delete_switch_io_event_hook_recv_dtmf(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_state_change_state_change_set")] + public static extern void switch_io_event_hook_state_change_state_change_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_state_change_state_change_get")] + public static extern IntPtr switch_io_event_hook_state_change_state_change_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_state_change_next_set")] + public static extern void switch_io_event_hook_state_change_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_state_change_next_get")] + public static extern IntPtr switch_io_event_hook_state_change_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_io_event_hook_state_change")] + public static extern IntPtr new_switch_io_event_hook_state_change(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_io_event_hook_state_change")] + public static extern void delete_switch_io_event_hook_state_change(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_resurrect_session_resurrect_session_set")] + public static extern void switch_io_event_hook_resurrect_session_resurrect_session_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_resurrect_session_resurrect_session_get")] + public static extern IntPtr switch_io_event_hook_resurrect_session_resurrect_session_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_resurrect_session_next_set")] + public static extern void switch_io_event_hook_resurrect_session_next_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hook_resurrect_session_next_get")] + public static extern IntPtr switch_io_event_hook_resurrect_session_next_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_io_event_hook_resurrect_session")] + public static extern IntPtr new_switch_io_event_hook_resurrect_session(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_io_event_hook_resurrect_session")] + public static extern void delete_switch_io_event_hook_resurrect_session(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_outgoing_channel_set")] + public static extern void switch_io_event_hooks_outgoing_channel_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_outgoing_channel_get")] + public static extern IntPtr switch_io_event_hooks_outgoing_channel_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_receive_message_set")] + public static extern void switch_io_event_hooks_receive_message_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_receive_message_get")] + public static extern IntPtr switch_io_event_hooks_receive_message_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_receive_event_set")] + public static extern void switch_io_event_hooks_receive_event_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_receive_event_get")] + public static extern IntPtr switch_io_event_hooks_receive_event_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_read_frame_set")] + public static extern void switch_io_event_hooks_read_frame_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_read_frame_get")] + public static extern IntPtr switch_io_event_hooks_read_frame_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_video_read_frame_set")] + public static extern void switch_io_event_hooks_video_read_frame_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_video_read_frame_get")] + public static extern IntPtr switch_io_event_hooks_video_read_frame_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_write_frame_set")] + public static extern void switch_io_event_hooks_write_frame_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_write_frame_get")] + public static extern IntPtr switch_io_event_hooks_write_frame_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_video_write_frame_set")] + public static extern void switch_io_event_hooks_video_write_frame_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_video_write_frame_get")] + public static extern IntPtr switch_io_event_hooks_video_write_frame_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_kill_channel_set")] + public static extern void switch_io_event_hooks_kill_channel_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_kill_channel_get")] + public static extern IntPtr switch_io_event_hooks_kill_channel_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_send_dtmf_set")] + public static extern void switch_io_event_hooks_send_dtmf_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_send_dtmf_get")] + public static extern IntPtr switch_io_event_hooks_send_dtmf_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_recv_dtmf_set")] + public static extern void switch_io_event_hooks_recv_dtmf_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_recv_dtmf_get")] + public static extern IntPtr switch_io_event_hooks_recv_dtmf_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_state_change_set")] + public static extern void switch_io_event_hooks_state_change_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_state_change_get")] + public static extern IntPtr switch_io_event_hooks_state_change_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_resurrect_session_set")] + public static extern void switch_io_event_hooks_resurrect_session_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_io_event_hooks_resurrect_session_get")] + public static extern IntPtr switch_io_event_hooks_resurrect_session_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_io_event_hooks")] + public static extern IntPtr new_switch_io_event_hooks(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_io_event_hooks")] + public static extern void delete_switch_io_event_hooks(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_add_outgoing_channel")] + public static extern int switch_core_event_hook_add_outgoing_channel(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_add_receive_message")] + public static extern int switch_core_event_hook_add_receive_message(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_add_receive_event")] + public static extern int switch_core_event_hook_add_receive_event(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_add_state_change")] + public static extern int switch_core_event_hook_add_state_change(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_add_read_frame")] + public static extern int switch_core_event_hook_add_read_frame(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_add_write_frame")] + public static extern int switch_core_event_hook_add_write_frame(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_add_video_read_frame")] + public static extern int switch_core_event_hook_add_video_read_frame(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_add_video_write_frame")] + public static extern int switch_core_event_hook_add_video_write_frame(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_add_kill_channel")] + public static extern int switch_core_event_hook_add_kill_channel(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_add_send_dtmf")] + public static extern int switch_core_event_hook_add_send_dtmf(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_add_recv_dtmf")] + public static extern int switch_core_event_hook_add_recv_dtmf(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_add_resurrect_session")] + public static extern int switch_core_event_hook_add_resurrect_session(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_remove_outgoing_channel")] + public static extern int switch_core_event_hook_remove_outgoing_channel(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_remove_receive_message")] + public static extern int switch_core_event_hook_remove_receive_message(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_remove_receive_event")] + public static extern int switch_core_event_hook_remove_receive_event(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_remove_state_change")] + public static extern int switch_core_event_hook_remove_state_change(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_remove_read_frame")] + public static extern int switch_core_event_hook_remove_read_frame(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_remove_write_frame")] + public static extern int switch_core_event_hook_remove_write_frame(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_remove_video_read_frame")] + public static extern int switch_core_event_hook_remove_video_read_frame(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_remove_video_write_frame")] + public static extern int switch_core_event_hook_remove_video_write_frame(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_remove_kill_channel")] + public static extern int switch_core_event_hook_remove_kill_channel(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_remove_send_dtmf")] + public static extern int switch_core_event_hook_remove_send_dtmf(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_remove_recv_dtmf")] + public static extern int switch_core_event_hook_remove_recv_dtmf(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_core_event_hook_remove_resurrect_session")] + public static extern int switch_core_event_hook_remove_resurrect_session(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_task_created_set")] + public static extern void switch_scheduler_task_created_set(HandleRef jarg1, long jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_task_created_get")] + public static extern long switch_scheduler_task_created_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_task_runtime_set")] + public static extern void switch_scheduler_task_runtime_set(HandleRef jarg1, long jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_task_runtime_get")] + public static extern long switch_scheduler_task_runtime_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_task_cmd_id_set")] + public static extern void switch_scheduler_task_cmd_id_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_task_cmd_id_get")] + public static extern uint switch_scheduler_task_cmd_id_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_task_group_set")] + public static extern void switch_scheduler_task_group_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_task_group_get")] + public static extern string switch_scheduler_task_group_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_task_cmd_arg_set")] + public static extern void switch_scheduler_task_cmd_arg_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_task_cmd_arg_get")] + public static extern IntPtr switch_scheduler_task_cmd_arg_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_task_task_id_set")] + public static extern void switch_scheduler_task_task_id_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_task_task_id_get")] + public static extern uint switch_scheduler_task_task_id_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_scheduler_task")] + public static extern IntPtr new_switch_scheduler_task(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_scheduler_task")] + public static extern void delete_switch_scheduler_task(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_add_task")] + public static extern uint switch_scheduler_add_task(HandleRef jarg1, HandleRef jarg2, string jarg3, string jarg4, uint jarg5, HandleRef jarg6, uint jarg7); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_del_task_id")] + public static extern uint switch_scheduler_del_task_id(uint jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_del_task_group")] + public static extern uint switch_scheduler_del_task_group(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_task_thread_start")] + public static extern void switch_scheduler_task_thread_start(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_scheduler_task_thread_stop")] + public static extern void switch_scheduler_task_thread_stop(); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_file_set")] + public static extern void switch_config_file_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_file_get")] + public static extern IntPtr switch_config_file_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_path_set")] + public static extern void switch_config_path_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_path_get")] + public static extern string switch_config_path_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_category_set")] + public static extern void switch_config_category_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_category_get")] + public static extern string switch_config_category_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_section_set")] + public static extern void switch_config_section_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_section_get")] + public static extern string switch_config_section_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_buf_set")] + public static extern void switch_config_buf_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_buf_get")] + public static extern string switch_config_buf_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_lineno_set")] + public static extern void switch_config_lineno_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_lineno_get")] + public static extern int switch_config_lineno_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_catno_set")] + public static extern void switch_config_catno_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_catno_get")] + public static extern int switch_config_catno_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_sectno_set")] + public static extern void switch_config_sectno_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_sectno_get")] + public static extern int switch_config_sectno_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_lockto_set")] + public static extern void switch_config_lockto_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_lockto_get")] + public static extern int switch_config_lockto_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_switch_config")] + public static extern IntPtr new_switch_config(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_switch_config")] + public static extern void delete_switch_config(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_open_file")] + public static extern int switch_config_open_file(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_close_file")] + public static extern void switch_config_close_file(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_switch_config_next_pair")] + public static extern int switch_config_next_pair(HandleRef jarg1, ref string jarg2, ref string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_consoleLog")] + public static extern void consoleLog(string jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_consoleCleanLog")] + public static extern void consoleCleanLog(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_IvrMenu")] + public static extern IntPtr new_IvrMenu(HandleRef jarg1, string jarg2, string jarg3, string jarg4, string jarg5, string jarg6, string jarg7, string jarg8, string jarg9, string jarg10, int jarg11, int jarg12, int jarg13, int jarg14, int jarg15, int jarg16); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_IvrMenu")] + public static extern void delete_IvrMenu(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_IvrMenu_bindAction")] + public static extern void IvrMenu_bindAction(HandleRef jarg1, string jarg2, string jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_IvrMenu_Execute")] + public static extern void IvrMenu_Execute(HandleRef jarg1, HandleRef jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_new_Api")] + public static extern IntPtr new_Api(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_Api")] + public static extern void delete_Api(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_Api_Execute")] + public static extern string Api_Execute(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_Api_ExecuteString")] + public static extern string Api_ExecuteString(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_Api_getTime")] + public static extern string Api_getTime(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_input_callback_state_t_function_set")] + public static extern void input_callback_state_t_function_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_input_callback_state_t_function_get")] + public static extern IntPtr input_callback_state_t_function_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_input_callback_state_t_threadState_set")] + public static extern void input_callback_state_t_threadState_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_input_callback_state_t_threadState_get")] + public static extern IntPtr input_callback_state_t_threadState_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_input_callback_state_t_extra_set")] + public static extern void input_callback_state_t_extra_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_input_callback_state_t_extra_get")] + public static extern IntPtr input_callback_state_t_extra_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_input_callback_state_t_funcargs_set")] + public static extern void input_callback_state_t_funcargs_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_input_callback_state_t_funcargs_get")] + public static extern string input_callback_state_t_funcargs_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_input_callback_state_t")] + public static extern IntPtr new_input_callback_state_t(); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_input_callback_state_t")] + public static extern void delete_input_callback_state_t(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_DTMF_digit_set")] + public static extern void DTMF_digit_set(HandleRef jarg1, char jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_DTMF_digit_get")] + public static extern char DTMF_digit_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_DTMF_duration_set")] + public static extern void DTMF_duration_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_DTMF_duration_get")] + public static extern uint DTMF_duration_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_DTMF")] + public static extern IntPtr new_DTMF(char jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_DTMF")] + public static extern void delete_DTMF(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_Stream__SWIG_0")] + public static extern IntPtr new_Stream__SWIG_0(); + + [DllImport("mod_managed", EntryPoint="CSharp_new_Stream__SWIG_1")] + public static extern IntPtr new_Stream__SWIG_1(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_Stream")] + public static extern void delete_Stream(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_Stream_Write")] + public static extern void Stream_Write(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_Stream_get_data")] + public static extern string Stream_get_data(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_InternalEvent_set")] + public static extern void Event_InternalEvent_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_InternalEvent_get")] + public static extern IntPtr Event_InternalEvent_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_serialized_string_set")] + public static extern void Event_serialized_string_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_serialized_string_get")] + public static extern string Event_serialized_string_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_mine_set")] + public static extern void Event_mine_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_mine_get")] + public static extern int Event_mine_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_Event__SWIG_0")] + public static extern IntPtr new_Event__SWIG_0(string jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_new_Event__SWIG_1")] + public static extern IntPtr new_Event__SWIG_1(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_Event")] + public static extern void delete_Event(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_Serialize")] + public static extern string Event_Serialize(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_SetPriority")] + public static extern bool Event_SetPriority(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_GetHeader")] + public static extern string Event_GetHeader(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_GetBody")] + public static extern string Event_GetBody(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_GetEventType")] + public static extern string Event_GetEventType(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_AddBody")] + public static extern bool Event_AddBody(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_AddHeader")] + public static extern bool Event_AddHeader(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_DeleteHeader")] + public static extern bool Event_DeleteHeader(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_Event_Fire")] + public static extern bool Event_Fire(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_events_set")] + public static extern void EventConsumer_events_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_events_get")] + public static extern IntPtr EventConsumer_events_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_e_event_id_set")] + public static extern void EventConsumer_e_event_id_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_e_event_id_get")] + public static extern int EventConsumer_e_event_id_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_e_callback_set")] + public static extern void EventConsumer_e_callback_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_e_callback_get")] + public static extern string EventConsumer_e_callback_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_e_subclass_name_set")] + public static extern void EventConsumer_e_subclass_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_e_subclass_name_get")] + public static extern string EventConsumer_e_subclass_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_e_cb_arg_set")] + public static extern void EventConsumer_e_cb_arg_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_e_cb_arg_get")] + public static extern string EventConsumer_e_cb_arg_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_enodes_set")] + public static extern void EventConsumer_enodes_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_enodes_get")] + public static extern IntPtr EventConsumer_enodes_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_node_index_set")] + public static extern void EventConsumer_node_index_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_node_index_get")] + public static extern uint EventConsumer_node_index_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_EventConsumer")] + public static extern IntPtr new_EventConsumer(string jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_EventConsumer")] + public static extern void delete_EventConsumer(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_bind")] + public static extern int EventConsumer_bind(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_EventConsumer_pop")] + public static extern IntPtr EventConsumer_pop(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_CoreSession")] + public static extern void delete_CoreSession(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_InternalSession_set")] + public static extern void CoreSession_InternalSession_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_InternalSession_get")] + public static extern IntPtr CoreSession_InternalSession_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_channel_set")] + public static extern void CoreSession_channel_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_channel_get")] + public static extern IntPtr CoreSession_channel_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_flags_set")] + public static extern void CoreSession_flags_set(HandleRef jarg1, uint jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_flags_get")] + public static extern uint CoreSession_flags_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_allocated_set")] + public static extern void CoreSession_allocated_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_allocated_get")] + public static extern int CoreSession_allocated_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_cb_state_set")] + public static extern void CoreSession_cb_state_set(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_cb_state_get")] + public static extern IntPtr CoreSession_cb_state_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_HookState_set")] + public static extern void CoreSession_HookState_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_HookState_get")] + public static extern int CoreSession_HookState_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_cause_set")] + public static extern void CoreSession_cause_set(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_cause_get")] + public static extern int CoreSession_cause_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_uuid_set")] + public static extern void CoreSession_uuid_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_uuid_get")] + public static extern string CoreSession_uuid_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_tts_name_set")] + public static extern void CoreSession_tts_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_tts_name_get")] + public static extern string CoreSession_tts_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_voice_name_set")] + public static extern void CoreSession_voice_name_set(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_voice_name_get")] + public static extern string CoreSession_voice_name_get(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_Answer")] + public static extern int CoreSession_Answer(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_preAnswer")] + public static extern int CoreSession_preAnswer(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_Hangup")] + public static extern void CoreSession_Hangup(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_hangupState")] + public static extern void CoreSession_hangupState(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_SetVariable")] + public static extern void CoreSession_SetVariable(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_SetPrivate")] + public static extern void CoreSession_SetPrivate(HandleRef jarg1, string jarg2, HandleRef jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_GetPrivate")] + public static extern IntPtr CoreSession_GetPrivate(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_GetVariable")] + public static extern string CoreSession_GetVariable(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_Say")] + public static extern void CoreSession_Say(HandleRef jarg1, string jarg2, string jarg3, string jarg4, string jarg5, string jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_SayPhrase")] + public static extern void CoreSession_SayPhrase(HandleRef jarg1, string jarg2, string jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_hangupCause")] + public static extern string CoreSession_hangupCause(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_getState")] + public static extern string CoreSession_getState(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_RecordFile")] + public static extern int CoreSession_RecordFile(HandleRef jarg1, string jarg2, int jarg3, int jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_originate")] + public static extern int CoreSession_originate(HandleRef jarg1, HandleRef jarg2, string jarg3, int jarg4, HandleRef jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_destroy")] + public static extern void CoreSession_destroy(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_Speak")] + public static extern int CoreSession_Speak(HandleRef jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_SetTtsParameters")] + public static extern void CoreSession_SetTtsParameters(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_CollectDigits__SWIG_0")] + public static extern int CoreSession_CollectDigits__SWIG_0(HandleRef jarg1, int jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_CollectDigits__SWIG_1")] + public static extern int CoreSession_CollectDigits__SWIG_1(HandleRef jarg1, int jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_GetDigits__SWIG_0")] + public static extern string CoreSession_GetDigits__SWIG_0(HandleRef jarg1, int jarg2, string jarg3, int jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_GetDigits__SWIG_1")] + public static extern string CoreSession_GetDigits__SWIG_1(HandleRef jarg1, int jarg2, string jarg3, int jarg4, int jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_Transfer")] + public static extern int CoreSession_Transfer(HandleRef jarg1, string jarg2, string jarg3, string jarg4); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_read")] + public static extern string CoreSession_read(HandleRef jarg1, int jarg2, int jarg3, string jarg4, int jarg5, string jarg6); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_PlayAndGetDigits")] + public static extern string CoreSession_PlayAndGetDigits(HandleRef jarg1, int jarg2, int jarg3, int jarg4, int jarg5, string jarg6, string jarg7, string jarg8, string jarg9, string jarg10); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_StreamFile")] + public static extern int CoreSession_StreamFile(HandleRef jarg1, string jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_sleep")] + public static extern int CoreSession_sleep(HandleRef jarg1, int jarg2, int jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_flushEvents")] + public static extern int CoreSession_flushEvents(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_flushDigits")] + public static extern int CoreSession_flushDigits(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_SetAutoHangup")] + public static extern int CoreSession_SetAutoHangup(HandleRef jarg1, bool jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_Ready")] + public static extern bool CoreSession_Ready(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_bridged")] + public static extern bool CoreSession_bridged(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_answered")] + public static extern bool CoreSession_answered(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_mediaReady")] + public static extern bool CoreSession_mediaReady(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_waitForAnswer")] + public static extern void CoreSession_waitForAnswer(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_Execute")] + public static extern void CoreSession_Execute(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_sendEvent")] + public static extern void CoreSession_sendEvent(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_setEventData")] + public static extern void CoreSession_setEventData(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_getXMLCDR")] + public static extern string CoreSession_getXMLCDR(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_begin_allow_threads")] + public static extern bool CoreSession_begin_allow_threads(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_end_allow_threads")] + public static extern bool CoreSession_end_allow_threads(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_GetUuid")] + public static extern string CoreSession_GetUuid(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_get_cb_args")] + public static extern IntPtr CoreSession_get_cb_args(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_CoreSession_check_hangup_hook")] + public static extern void CoreSession_check_hangup_hook(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_console_log")] + public static extern void console_log(string jarg1, string jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_console_clean_log")] + public static extern void console_clean_log(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_msleep")] + public static extern void msleep(uint jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_bridge")] + public static extern void bridge(HandleRef jarg1, HandleRef jarg2); + + [DllImport("mod_managed", EntryPoint="CSharp_hanguphook")] + public static extern int hanguphook(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_dtmf_callback")] + public static extern int dtmf_callback(HandleRef jarg1, HandleRef jarg2, int jarg3, HandleRef jarg4, uint jarg5); + + [DllImport("mod_managed", EntryPoint="CSharp_new_ManagedSession__SWIG_0")] + public static extern IntPtr new_ManagedSession__SWIG_0(); + + [DllImport("mod_managed", EntryPoint="CSharp_new_ManagedSession__SWIG_1")] + public static extern IntPtr new_ManagedSession__SWIG_1(string jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_new_ManagedSession__SWIG_2")] + public static extern IntPtr new_ManagedSession__SWIG_2(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_delete_ManagedSession")] + public static extern void delete_ManagedSession(HandleRef jarg1); + + [DllImport("mod_managed", EntryPoint="CSharp_ManagedSession_SWIGUpcast")] + public static extern IntPtr ManagedSession_SWIGUpcast(IntPtr jarg1); +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 input_callback_state_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal input_callback_state_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(input_callback_state_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~input_callback_state_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_input_callback_state_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_void function { + set { + freeswitchPINVOKE.input_callback_state_t_function_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.input_callback_state_t_function_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_void threadState { + set { + freeswitchPINVOKE.input_callback_state_t_threadState_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.input_callback_state_t_threadState_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_void extra { + set { + freeswitchPINVOKE.input_callback_state_t_extra_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.input_callback_state_t_extra_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public string funcargs { + set { + freeswitchPINVOKE.input_callback_state_t_funcargs_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.input_callback_state_t_funcargs_get(swigCPtr); + return ret; + } + } + + public input_callback_state_t() : this(freeswitchPINVOKE.new_input_callback_state_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 IvrMenu : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal IvrMenu(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(IvrMenu obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~IvrMenu() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_IvrMenu(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public IvrMenu(IvrMenu main, string name, string greeting_sound, string short_greeting_sound, string invalid_sound, string exit_sound, string confirm_macro, string confirm_key, string tts_engine, string tts_voice, int confirm_attempts, int inter_timeout, int digit_len, int timeout, int max_failures, int max_timeouts) : this(freeswitchPINVOKE.new_IvrMenu(IvrMenu.getCPtr(main), name, greeting_sound, short_greeting_sound, invalid_sound, exit_sound, confirm_macro, confirm_key, tts_engine, tts_voice, confirm_attempts, inter_timeout, digit_len, timeout, max_failures, max_timeouts), true) { + } + + public void bindAction(string action, string arg, string bind) { + freeswitchPINVOKE.IvrMenu_bindAction(swigCPtr, action, arg, bind); + } + + public void Execute(CoreSession session, string name) { + freeswitchPINVOKE.IvrMenu_Execute(swigCPtr, CoreSession.getCPtr(session), name); + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 partial class ManagedSession : CoreSession { + private HandleRef swigCPtr; + + internal ManagedSession(IntPtr cPtr, bool cMemoryOwn) : base(freeswitchPINVOKE.ManagedSession_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(ManagedSession obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~ManagedSession() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_ManagedSession(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public ManagedSession() : this(freeswitchPINVOKE.new_ManagedSession__SWIG_0(), true) { + } + + public ManagedSession(string uuid) : this(freeswitchPINVOKE.new_ManagedSession__SWIG_1(uuid), true) { + } + + public ManagedSession(SWIGTYPE_p_switch_core_session session) : this(freeswitchPINVOKE.new_ManagedSession__SWIG_2(SWIGTYPE_p_switch_core_session.getCPtr(session)), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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), + S_RDLOCK = (1 << 2) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 partial class Stream : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal Stream(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(Stream obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~Stream() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_Stream(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public Stream() : this(freeswitchPINVOKE.new_Stream__SWIG_0(), true) { + } + + public Stream(switch_stream_handle arg0) : this(freeswitchPINVOKE.new_Stream__SWIG_1(switch_stream_handle.getCPtr(arg0)), true) { + } + + public void Write(string data) { + freeswitchPINVOKE.Stream_Write(swigCPtr, data); + } + + public string get_data() { + string ret = freeswitchPINVOKE.Stream_get_data(swigCPtr); + return ret; + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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_apr_pool_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_apr_pool_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_apr_pool_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_apr_pool_t 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.0 + * + * 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_FILE { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_FILE(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_FILE() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_FILE 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.0 + * + * 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_float { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_float(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_float() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_float 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.0 + * + * 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_char_enum_switch_management_action_t_p_char_switch_size_t__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_char_enum_switch_management_action_t_p_char_switch_size_t__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_char_enum_switch_management_action_t_p_char_switch_size_t__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_char_enum_switch_management_action_t_p_char_switch_size_t__switch_status_t 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.0 + * + * 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_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t 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.0 + * + * 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_p_switch_loadable_module_interface_p_apr_pool_t__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_p_switch_loadable_module_interface_p_apr_pool_t__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_p_switch_loadable_module_interface_p_apr_pool_t__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_p_switch_loadable_module_interface_p_apr_pool_t__switch_status_t 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.0 + * + * 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_p_p_switch_console_callback_match__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_p_switch_console_callback_match__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_p_switch_console_callback_match__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_p_switch_console_callback_match__switch_status_t 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.0 + * + * 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_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char__switch_status_t 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.0 + * + * 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_p_q_const__char_p_q_const__char_p_switch_event_t_p_void__p_switch_xml { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_switch_event_t_p_void__p_switch_xml(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_switch_event_t_p_void__p_switch_xml() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_switch_event_t_p_void__p_switch_xml 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.0 + * + * 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_p_unsigned_long__int { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_unsigned_long__int(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_unsigned_long__int() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_unsigned_long__int 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.0 + * + * 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; + + internal SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t 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.0 + * + * 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_switch_core_session_p_switch_stream_handle__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_q_const__char_p_switch_core_session_p_switch_stream_handle__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_q_const__char_p_switch_core_session_p_switch_stream_handle__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_q_const__char_p_switch_core_session_p_switch_stream_handle__switch_status_t 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.0 + * + * 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__switch_log_node_t_enum_switch_log_level_t__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_q_const__switch_log_node_t_enum_switch_log_level_t__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_q_const__switch_log_node_t_enum_switch_log_level_t__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_q_const__switch_log_node_t_enum_switch_log_level_t__switch_status_t 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.0 + * + * 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__void_p_q_const__void_p_void__switch_bool_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_q_const__void_p_q_const__void_p_void__switch_bool_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_q_const__void_p_q_const__void_p_void__switch_bool_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_q_const__void_p_q_const__void_p_void__switch_bool_t 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.0 + * + * 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_switch_asr_handle_p_char_double__void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_asr_handle_p_char_double__void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_asr_handle_p_char_double__void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_asr_handle_p_char_double__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.0 + * + * 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_switch_asr_handle_p_char_int__void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_asr_handle_p_char_int__void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_asr_handle_p_char_int__void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_asr_handle_p_char_int__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.0 + * + * 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_switch_asr_handle_p_char_p_q_const__char__void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_asr_handle_p_char_p_q_const__char__void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_asr_handle_p_char_p_q_const__char__void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_asr_handle_p_char_p_q_const__char__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.0 + * + * 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_switch_asr_handle_p_p_char_p_unsigned_long__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_asr_handle_p_p_char_p_unsigned_long__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_asr_handle_p_p_char_p_unsigned_long__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_asr_handle_p_p_char_p_unsigned_long__switch_status_t 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.0 + * + * 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_switch_asr_handle_p_q_const__char_int_p_q_const__char_p_unsigned_long__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_int_p_q_const__char_p_unsigned_long__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_int_p_q_const__char_p_unsigned_long__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_int_p_q_const__char_p_unsigned_long__switch_status_t 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.0 + * + * 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_switch_asr_handle_p_q_const__char_p_q_const__char__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_p_q_const__char__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_p_q_const__char__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_p_q_const__char__switch_status_t 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.0 + * + * 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_switch_asr_handle_p_q_const__char__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t 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.0 + * + * 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_switch_asr_handle_p_unsigned_long__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t 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.0 + * + * 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_switch_asr_handle_p_void_unsigned_int_p_unsigned_long__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_asr_handle_p_void_unsigned_int_p_unsigned_long__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_asr_handle_p_void_unsigned_int_p_unsigned_long__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_asr_handle_p_void_unsigned_int_p_unsigned_long__switch_status_t 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.0 + * + * 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_switch_asr_handle__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t 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.0 + * + * 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_switch_codec_p_switch_codec_p_void_unsigned_long_unsigned_long_p_void_p_unsigned_long_p_unsigned_long_p_unsigned_int__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_codec_p_switch_codec_p_void_unsigned_long_unsigned_long_p_void_p_unsigned_long_p_unsigned_long_p_unsigned_int__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_codec_p_switch_codec_p_void_unsigned_long_unsigned_long_p_void_p_unsigned_long_p_unsigned_long_p_unsigned_int__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_codec_p_switch_codec_p_void_unsigned_long_unsigned_long_p_void_p_unsigned_long_p_unsigned_long_p_unsigned_int__switch_status_t 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.0 + * + * 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_switch_codec_unsigned_long_p_q_const__switch_codec_settings__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_codec_unsigned_long_p_q_const__switch_codec_settings__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_codec_unsigned_long_p_q_const__switch_codec_settings__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_codec_unsigned_long_p_q_const__switch_codec_settings__switch_status_t 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.0 + * + * 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_switch_codec__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_codec__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_codec__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_codec__switch_status_t 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.0 + * + * 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_switch_core_session_int__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t 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.0 + * + * 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_switch_core_session_p_char_p_switch_say_args_t_p_switch_input_args_t__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_char_p_switch_say_args_t_p_switch_input_args_t__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_char_p_switch_say_args_t_p_switch_input_args_t__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_char_p_switch_say_args_t_p_switch_input_args_t__switch_status_t 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.0 + * + * 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_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t 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.0 + * + * 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_switch_core_session_p_q_const__char_p_q_const__char_q_const__int_q_const__int__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char_q_const__int_q_const__int__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char_q_const__int_q_const__int__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char_q_const__int_q_const__int__switch_status_t 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.0 + * + * 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_switch_core_session_p_q_const__char_p_q_const__char__switch_bool_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char__switch_bool_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char__switch_bool_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char__switch_bool_t 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.0 + * + * 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_switch_core_session_p_q_const__char_p_q_const__char__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char__switch_status_t 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.0 + * + * 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_switch_core_session_p_q_const__char__void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_q_const__char__void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_q_const__char__void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_q_const__char__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.0 + * + * 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_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t 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.0 + * + * 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_switch_core_session_p_q_const__switch_dtmf_t__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t__switch_status_t 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.0 + * + * 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_switch_core_session_p_switch_core_session_message__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t 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.0 + * + * 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_switch_core_session_p_switch_event_p_switch_caller_profile_p_p_switch_core_session_p_p_apr_pool_t_unsigned_long_p_enum_switch_call_cause_t__switch_call_cause_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_p_switch_core_session_p_p_apr_pool_t_unsigned_long_p_enum_switch_call_cause_t__switch_call_cause_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_p_switch_core_session_p_p_apr_pool_t_unsigned_long_p_enum_switch_call_cause_t__switch_call_cause_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_p_switch_core_session_p_p_apr_pool_t_unsigned_long_p_enum_switch_call_cause_t__switch_call_cause_t 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.0 + * + * 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_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_unsigned_long__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_unsigned_long__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_unsigned_long__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_unsigned_long__switch_status_t 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.0 + * + * 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_switch_core_session_p_switch_event__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t 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.0 + * + * 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_switch_core_session_p_switch_frame_p_void__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_p_void__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_p_void__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_p_void__switch_status_t 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.0 + * + * 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_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t 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.0 + * + * 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_switch_core_session_p_void_enum_switch_input_type_t_p_void_unsigned_int__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_p_void_enum_switch_input_type_t_p_void_unsigned_int__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_p_void_enum_switch_input_type_t_p_void_unsigned_int__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_p_void_enum_switch_input_type_t_p_void_unsigned_int__switch_status_t 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.0 + * + * 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_switch_core_session_t_p_void_p_switch_caller_profile_t__p_switch_caller_extension { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session_t_p_void_p_switch_caller_profile_t__p_switch_caller_extension(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session_t_p_void_p_switch_caller_profile_t__p_switch_caller_extension() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session_t_p_void_p_switch_caller_profile_t__p_switch_caller_extension 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.0 + * + * 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_switch_core_session__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_core_session__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_core_session__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_core_session__switch_status_t 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.0 + * + * 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_switch_directory_handle_p_char_p_char_p_char__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_directory_handle_p_char_p_char_p_char__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_directory_handle_p_char_p_char_p_char__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_directory_handle_p_char_p_char_p_char__switch_status_t 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.0 + * + * 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_switch_directory_handle_p_char_p_char__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_directory_handle_p_char_p_char__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_directory_handle_p_char_p_char__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_directory_handle_p_char_p_char__switch_status_t 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.0 + * + * 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_switch_directory_handle_p_p_char_p_p_char__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_directory_handle_p_p_char_p_p_char__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_directory_handle_p_p_char_p_p_char__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_directory_handle_p_p_char_p_p_char__switch_status_t 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.0 + * + * 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_switch_directory_handle__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_directory_handle__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_directory_handle__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_directory_handle__switch_status_t 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.0 + * + * 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_switch_event__void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_event__void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_event__void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_event__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.0 + * + * 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_switch_file_handle_enum_switch_audio_col_t_p_p_q_const__char__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_file_handle_enum_switch_audio_col_t_p_p_q_const__char__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_file_handle_enum_switch_audio_col_t_p_p_q_const__char__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_file_handle_enum_switch_audio_col_t_p_p_q_const__char__switch_status_t 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.0 + * + * 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_switch_file_handle_enum_switch_audio_col_t_p_q_const__char__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_file_handle_enum_switch_audio_col_t_p_q_const__char__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_file_handle_enum_switch_audio_col_t_p_q_const__char__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_file_handle_enum_switch_audio_col_t_p_q_const__char__switch_status_t 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.0 + * + * 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_switch_file_handle_long_long__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_file_handle_long_long__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_file_handle_long_long__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_file_handle_long_long__switch_status_t 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.0 + * + * 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_switch_file_handle_p_q_const__char__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_file_handle_p_q_const__char__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_file_handle_p_q_const__char__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_file_handle_p_q_const__char__switch_status_t 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.0 + * + * 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_switch_file_handle_p_unsigned_int_long_long_int__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_file_handle_p_unsigned_int_long_long_int__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_file_handle_p_unsigned_int_long_long_int__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_file_handle_p_unsigned_int_long_long_int__switch_status_t 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.0 + * + * 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_switch_file_handle_p_void_p_switch_size_t__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_file_handle_p_void_p_switch_size_t__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_file_handle_p_void_p_switch_size_t__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_file_handle_p_void_p_switch_size_t__switch_status_t 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.0 + * + * 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_switch_file_handle__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_file_handle__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_file_handle__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_file_handle__switch_status_t 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.0 + * + * 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_switch_ivr_menu_p_char_p_char_size_t_p_void__switch_ivr_action_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_ivr_menu_p_char_p_char_size_t_p_void__switch_ivr_action_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_ivr_menu_p_char_p_char_size_t_p_void__switch_ivr_action_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_ivr_menu_p_char_p_char_size_t_p_void__switch_ivr_action_t 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.0 + * + * 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_switch_media_bug_p_void_enum_switch_abc_type_t__switch_bool_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_media_bug_p_void_enum_switch_abc_type_t__switch_bool_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_media_bug_p_void_enum_switch_abc_type_t__switch_bool_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_media_bug_p_void_enum_switch_abc_type_t__switch_bool_t 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.0 + * + * 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_switch_rtp_p_switch_socket_t_p_void_switch_size_t_p_switch_sockaddr_t__void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_rtp_p_switch_socket_t_p_void_switch_size_t_p_switch_sockaddr_t__void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_rtp_p_switch_socket_t_p_void_switch_size_t_p_switch_sockaddr_t__void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_rtp_p_switch_socket_t_p_void_switch_size_t_p_switch_sockaddr_t__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.0 + * + * 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_switch_scheduler_task__void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_scheduler_task__void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_scheduler_task__void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_scheduler_task__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.0 + * + * 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_switch_speech_handle_p_char_double__void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_speech_handle_p_char_double__void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_speech_handle_p_char_double__void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_speech_handle_p_char_double__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.0 + * + * 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_switch_speech_handle_p_char_int__void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_speech_handle_p_char_int__void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_speech_handle_p_char_int__void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_speech_handle_p_char_int__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.0 + * + * 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_switch_speech_handle_p_char_p_q_const__char__void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_q_const__char__void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_q_const__char__void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_q_const__char__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.0 + * + * 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_switch_speech_handle_p_char_p_unsigned_long__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_unsigned_long__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_unsigned_long__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_unsigned_long__switch_status_t 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.0 + * + * 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_switch_speech_handle_p_q_const__char_int_p_unsigned_long__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_speech_handle_p_q_const__char_int_p_unsigned_long__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_speech_handle_p_q_const__char_int_p_unsigned_long__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_speech_handle_p_q_const__char_int_p_unsigned_long__switch_status_t 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.0 + * + * 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_switch_speech_handle_p_unsigned_long__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_speech_handle_p_unsigned_long__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_speech_handle_p_unsigned_long__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_speech_handle_p_unsigned_long__switch_status_t 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.0 + * + * 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_switch_speech_handle_p_void_p_switch_size_t_p_unsigned_long__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_speech_handle_p_void_p_switch_size_t_p_unsigned_long__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_speech_handle_p_void_p_switch_size_t_p_unsigned_long__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_speech_handle_p_void_p_switch_size_t_p_unsigned_long__switch_status_t 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.0 + * + * 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_switch_speech_handle__void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_speech_handle__void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_speech_handle__void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_speech_handle__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.0 + * + * 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_switch_stream_handle_p_q_const__char_v_______switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_stream_handle_p_q_const__char_v_______switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_stream_handle_p_q_const__char_v_______switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_stream_handle_p_q_const__char_v_______switch_status_t 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.0 + * + * 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_switch_stream_handle_p_unsigned_char_switch_size_t__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_stream_handle_p_unsigned_char_switch_size_t__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_stream_handle_p_unsigned_char_switch_size_t__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_stream_handle_p_unsigned_char_switch_size_t__switch_status_t 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.0 + * + * 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_switch_thread_t_p_void__p_void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_thread_t_p_void__p_void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_thread_t_p_void__p_void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_thread_t_p_void__p_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.0 + * + * 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_switch_timer_enum_switch_bool_t__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_timer_enum_switch_bool_t__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_timer_enum_switch_bool_t__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_timer_enum_switch_bool_t__switch_status_t 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.0 + * + * 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_switch_timer__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_switch_timer__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_switch_timer__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_switch_timer__switch_status_t 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.0 + * + * 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_void_int_p_p_char_p_p_char__int { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_void_int_p_p_char_p_p_char__int(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_void_int_p_p_char_p_p_char__int() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_p_void_int_p_p_char_p_p_char__int 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.0 + * + * 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_void__void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_p_void__void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_p_void__void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_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.0 + * + * 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_void__p_char { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_void__p_char(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_void__p_char() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_void__p_char 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.0 + * + * 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_void__switch_status_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_f_void__switch_status_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_f_void__switch_status_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_f_void__switch_status_t 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.0 + * + * 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_HashElem { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_HashElem(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_HashElem() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_HashElem 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.0 + * + * 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_int { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_int(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_int() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_int 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.0 + * + * 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_p_apr_pool_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_apr_pool_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_apr_pool_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_apr_pool_t 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.0 + * + * 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_p_char { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_char(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_char() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_char 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.0 + * + * 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_p_p_char { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_p_char(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_p_char() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_p_char 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.0 + * + * 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_p_real_pcre { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_real_pcre(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_real_pcre() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_real_pcre 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.0 + * + * 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_p_sqlite3 { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_sqlite3(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_sqlite3() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_sqlite3 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.0 + * + * 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_p_sqlite3_stmt { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_sqlite3_stmt(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_sqlite3_stmt() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_sqlite3_stmt 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.0 + * + * 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_p_switch_audio_resampler_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_audio_resampler_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_audio_resampler_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_audio_resampler_t 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.0 + * + * 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_p_switch_buffer { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_buffer(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_buffer() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_buffer 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.0 + * + * 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_p_switch_cache_db_handle_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_cache_db_handle_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_cache_db_handle_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_cache_db_handle_t 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.0 + * + * 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_p_switch_caller_extension { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_caller_extension(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_caller_extension() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_caller_extension 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.0 + * + * 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_p_switch_channel { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_channel(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_channel() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_channel 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.0 + * + * 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_p_switch_console_callback_match { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_console_callback_match(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_console_callback_match() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_console_callback_match 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.0 + * + * 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_p_switch_core_port_allocator { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_core_port_allocator(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_core_port_allocator() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_core_port_allocator 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.0 + * + * 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_p_switch_core_session { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_core_session(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_core_session() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_core_session 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.0 + * + * 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_p_switch_core_session_message { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_core_session_message(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_core_session_message() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_core_session_message 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.0 + * + * 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_p_switch_event { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_event(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_event() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_event 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.0 + * + * 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_p_switch_event_node { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_event_node(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_event_node() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_event_node 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.0 + * + * 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_p_switch_frame { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_frame(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_frame() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_frame 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.0 + * + * 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_p_switch_hash { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_hash(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_hash() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_hash 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.0 + * + * 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_p_switch_ivr_digit_stream { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_ivr_digit_stream(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_ivr_digit_stream() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_ivr_digit_stream 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.0 + * + * 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_p_switch_ivr_digit_stream_parser { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_ivr_digit_stream_parser(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_ivr_digit_stream_parser() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_ivr_digit_stream_parser 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.0 + * + * 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_p_switch_ivr_menu { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_ivr_menu(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_ivr_menu() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_ivr_menu 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.0 + * + * 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_p_switch_ivr_menu_xml_ctx { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_ivr_menu_xml_ctx(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_ivr_menu_xml_ctx() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_ivr_menu_xml_ctx 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.0 + * + * 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_p_switch_log_node_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_log_node_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_log_node_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_log_node_t 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.0 + * + * 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_p_switch_media_bug { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_media_bug(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_media_bug() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_media_bug 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.0 + * + * 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_p_switch_network_list { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_network_list(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_network_list() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_network_list 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.0 + * + * 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_p_switch_rtp { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_rtp(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_rtp() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_rtp 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.0 + * + * 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_p_switch_xml { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_xml(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_xml() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_xml 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.0 + * + * 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_p_switch_xml_binding { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_switch_xml_binding(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_switch_xml_binding() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_switch_xml_binding 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.0 + * + * 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_p_void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_p_void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_p_void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_p_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.0 + * + * 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_real_pcre { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_real_pcre(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_real_pcre() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_real_pcre 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.0 + * + * 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_short { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_short(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_short() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_short 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.0 + * + * 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_sockaddr { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_sockaddr(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_sockaddr() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_sockaddr 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.0 + * + * 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_sockaddr_in6 { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_sockaddr_in6(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_sockaddr_in6() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_sockaddr_in6 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.0 + * + * 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_socklen_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_socklen_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_socklen_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_socklen_t 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.0 + * + * 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_sqlite3 { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_sqlite3(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_sqlite3() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_sqlite3 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.0 + * + * 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_sqlite3_stmt { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_sqlite3_stmt(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_sqlite3_stmt() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_sqlite3_stmt 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.0 + * + * 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_switch_buffer { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_buffer(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_buffer() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_buffer 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.0 + * + * 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_switch_call_cause_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_call_cause_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_call_cause_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_call_cause_t 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.0 + * + * 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_switch_channel { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_channel(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_channel() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_channel 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.0 + * + * 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_switch_core_port_allocator { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_core_port_allocator(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_core_port_allocator() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_core_port_allocator 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.0 + * + * 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_switch_core_session { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_core_session(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_core_session() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_core_session 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.0 + * + * 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_switch_event_types_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_event_types_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_event_types_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_event_types_t 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.0 + * + * 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_switch_file_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_file_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_file_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_file_t 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.0 + * + * 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_switch_hash { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_hash(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_hash() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_hash 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.0 + * + * 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_switch_interval_time_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_interval_time_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_interval_time_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_interval_time_t 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.0 + * + * 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_switch_ivr_action_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_ivr_action_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_ivr_action_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_ivr_action_t 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.0 + * + * 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_switch_ivr_digit_stream { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_ivr_digit_stream(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_ivr_digit_stream() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_ivr_digit_stream 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.0 + * + * 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_switch_ivr_digit_stream_parser { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_ivr_digit_stream_parser(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_ivr_digit_stream_parser() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_ivr_digit_stream_parser 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.0 + * + * 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_switch_ivr_menu { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_ivr_menu(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_ivr_menu() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_ivr_menu 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.0 + * + * 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_switch_ivr_menu_xml_ctx { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_ivr_menu_xml_ctx(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_ivr_menu_xml_ctx() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_ivr_menu_xml_ctx 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.0 + * + * 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_switch_loadable_module_interface { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_loadable_module_interface(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_loadable_module_interface() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_loadable_module_interface 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.0 + * + * 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_switch_media_bug { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_media_bug(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_media_bug() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_media_bug 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.0 + * + * 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_switch_mutex_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_mutex_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_mutex_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_mutex_t 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.0 + * + * 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_switch_network_list { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_network_list(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_network_list() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_network_list 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.0 + * + * 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_switch_odbc_handle { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_odbc_handle(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_odbc_handle() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_odbc_handle 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.0 + * + * 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_switch_pollfd_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_pollfd_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_pollfd_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_pollfd_t 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.0 + * + * 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_switch_queue_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_queue_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_queue_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_queue_t 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.0 + * + * 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_switch_rtcp_frame { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_rtcp_frame(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_rtcp_frame() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_rtcp_frame 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.0 + * + * 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_switch_rtp { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_rtp(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_rtp() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_rtp 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.0 + * + * 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_switch_size_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_size_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_size_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_size_t 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.0 + * + * 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_switch_sockaddr_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_sockaddr_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_sockaddr_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_sockaddr_t 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.0 + * + * 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_switch_socket_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_socket_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_socket_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_socket_t 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.0 + * + * 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_switch_ssize_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_ssize_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_ssize_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_ssize_t 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.0 + * + * 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_switch_thread_rwlock_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_thread_rwlock_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_thread_rwlock_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_thread_rwlock_t 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.0 + * + * 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_switch_time_exp_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_time_exp_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_time_exp_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_time_exp_t 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.0 + * + * 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_switch_time_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_time_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_time_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_time_t 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.0 + * + * 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_switch_xml_binding { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_switch_xml_binding(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_switch_xml_binding() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_switch_xml_binding 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.0 + * + * 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_time_t { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_time_t(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_time_t() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_time_t 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.0 + * + * 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_unsigned_char { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_unsigned_char(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_unsigned_char() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_unsigned_char 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.0 + * + * 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_unsigned_int { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_unsigned_int(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_unsigned_int() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_unsigned_int 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.0 + * + * 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_unsigned_long { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_unsigned_long(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_unsigned_long() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_unsigned_long 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.0 + * + * 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_unsigned_short { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_unsigned_short(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_unsigned_short() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_unsigned_short 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.0 + * + * 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_void { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_void(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_void() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_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.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_abc_type_t { + SWITCH_ABC_TYPE_INIT, + SWITCH_ABC_TYPE_READ, + SWITCH_ABC_TYPE_WRITE, + SWITCH_ABC_TYPE_WRITE_REPLACE, + SWITCH_ABC_TYPE_READ_REPLACE, + SWITCH_ABC_TYPE_READ_PING, + SWITCH_ABC_TYPE_CLOSE +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_api_interface : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_api_interface(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_api_interface obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_api_interface() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_api_interface(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string interface_name { + set { + freeswitchPINVOKE.switch_api_interface_interface_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_api_interface_interface_name_get(swigCPtr); + return ret; + } + } + + public string desc { + set { + freeswitchPINVOKE.switch_api_interface_desc_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_api_interface_desc_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_q_const__char_p_switch_core_session_p_switch_stream_handle__switch_status_t function { + set { + freeswitchPINVOKE.switch_api_interface_function_set(swigCPtr, SWIGTYPE_p_f_p_q_const__char_p_switch_core_session_p_switch_stream_handle__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_api_interface_function_get(swigCPtr); + SWIGTYPE_p_f_p_q_const__char_p_switch_core_session_p_switch_stream_handle__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_q_const__char_p_switch_core_session_p_switch_stream_handle__switch_status_t(cPtr, false); + return ret; + } + } + + public string syntax { + set { + freeswitchPINVOKE.switch_api_interface_syntax_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_api_interface_syntax_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { + set { + freeswitchPINVOKE.switch_api_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_api_interface_rwlock_get(swigCPtr); + SWIGTYPE_p_switch_thread_rwlock_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_thread_rwlock_t(cPtr, false); + return ret; + } + } + + public int refs { + set { + freeswitchPINVOKE.switch_api_interface_refs_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_api_interface_refs_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t reflock { + set { + freeswitchPINVOKE.switch_api_interface_reflock_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_api_interface_reflock_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_loadable_module_interface parent { + set { + freeswitchPINVOKE.switch_api_interface_parent_set(swigCPtr, SWIGTYPE_p_switch_loadable_module_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_api_interface_parent_get(swigCPtr); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + } + + public switch_api_interface next { + set { + freeswitchPINVOKE.switch_api_interface_next_set(swigCPtr, switch_api_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_api_interface_next_get(swigCPtr); + switch_api_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_api_interface(cPtr, false); + return ret; + } + } + + public switch_api_interface() : this(freeswitchPINVOKE.new_switch_api_interface(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_application_flag_enum_t { + SAF_NONE = 0, + SAF_SUPPORT_NOMEDIA = (1 << 0), + SAF_ROUTING_EXEC = (1 << 1), + SAF_MEDIA_TAP = (1 << 2) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_application_interface : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_application_interface(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_application_interface obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_application_interface() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_application_interface(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string interface_name { + set { + freeswitchPINVOKE.switch_application_interface_interface_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_application_interface_interface_name_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_q_const__char__void application_function { + set { + freeswitchPINVOKE.switch_application_interface_application_function_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_q_const__char__void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_application_interface_application_function_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_q_const__char__void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_q_const__char__void(cPtr, false); + return ret; + } + } + + public string long_desc { + set { + freeswitchPINVOKE.switch_application_interface_long_desc_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_application_interface_long_desc_get(swigCPtr); + return ret; + } + } + + public string short_desc { + set { + freeswitchPINVOKE.switch_application_interface_short_desc_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_application_interface_short_desc_get(swigCPtr); + return ret; + } + } + + public string syntax { + set { + freeswitchPINVOKE.switch_application_interface_syntax_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_application_interface_syntax_get(swigCPtr); + return ret; + } + } + + public uint flags { + set { + freeswitchPINVOKE.switch_application_interface_flags_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_application_interface_flags_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { + set { + freeswitchPINVOKE.switch_application_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_application_interface_rwlock_get(swigCPtr); + SWIGTYPE_p_switch_thread_rwlock_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_thread_rwlock_t(cPtr, false); + return ret; + } + } + + public int refs { + set { + freeswitchPINVOKE.switch_application_interface_refs_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_application_interface_refs_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t reflock { + set { + freeswitchPINVOKE.switch_application_interface_reflock_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_application_interface_reflock_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_loadable_module_interface parent { + set { + freeswitchPINVOKE.switch_application_interface_parent_set(swigCPtr, SWIGTYPE_p_switch_loadable_module_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_application_interface_parent_get(swigCPtr); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + } + + public switch_application_interface next { + set { + freeswitchPINVOKE.switch_application_interface_next_set(swigCPtr, switch_application_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_application_interface_next_get(swigCPtr); + switch_application_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_application_interface(cPtr, false); + return ret; + } + } + + public switch_application_interface() : this(freeswitchPINVOKE.new_switch_application_interface(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_app_log : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_app_log(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_app_log obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_app_log() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_app_log(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string app { + set { + freeswitchPINVOKE.switch_app_log_app_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_app_log_app_get(swigCPtr); + return ret; + } + } + + public string arg { + set { + freeswitchPINVOKE.switch_app_log_arg_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_app_log_arg_get(swigCPtr); + return ret; + } + } + + public switch_app_log next { + set { + freeswitchPINVOKE.switch_app_log_next_set(swigCPtr, switch_app_log.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_app_log_next_get(swigCPtr); + switch_app_log ret = (cPtr == IntPtr.Zero) ? null : new switch_app_log(cPtr, false); + return ret; + } + } + + public switch_app_log() : this(freeswitchPINVOKE.new_switch_app_log(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_asr_flag_enum_t { + SWITCH_ASR_FLAG_NONE = 0, + SWITCH_ASR_FLAG_DATA = (1 << 0), + SWITCH_ASR_FLAG_FREE_POOL = (1 << 1), + SWITCH_ASR_FLAG_CLOSED = (1 << 2), + SWITCH_ASR_FLAG_FIRE_EVENTS = (1 << 3), + SWITCH_ASR_FLAG_AUTO_RESUME = (1 << 4) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_asr_handle : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_asr_handle(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_asr_handle obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_asr_handle() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_asr_handle(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public switch_asr_interface asr_interface { + set { + freeswitchPINVOKE.switch_asr_handle_asr_interface_set(swigCPtr, switch_asr_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_handle_asr_interface_get(swigCPtr); + switch_asr_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_asr_interface(cPtr, false); + return ret; + } + } + + public uint flags { + set { + freeswitchPINVOKE.switch_asr_handle_flags_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_asr_handle_flags_get(swigCPtr); + return ret; + } + } + + public string name { + set { + freeswitchPINVOKE.switch_asr_handle_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_asr_handle_name_get(swigCPtr); + return ret; + } + } + + public string codec { + set { + freeswitchPINVOKE.switch_asr_handle_codec_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_asr_handle_codec_get(swigCPtr); + return ret; + } + } + + public uint rate { + set { + freeswitchPINVOKE.switch_asr_handle_rate_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_asr_handle_rate_get(swigCPtr); + return ret; + } + } + + public string grammar { + set { + freeswitchPINVOKE.switch_asr_handle_grammar_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_asr_handle_grammar_get(swigCPtr); + return ret; + } + } + + public string param { + set { + freeswitchPINVOKE.switch_asr_handle_param_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_asr_handle_param_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_apr_pool_t memory_pool { + set { + freeswitchPINVOKE.switch_asr_handle_memory_pool_set(swigCPtr, SWIGTYPE_p_apr_pool_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_handle_memory_pool_get(swigCPtr); + SWIGTYPE_p_apr_pool_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_apr_pool_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_void private_info { + set { + freeswitchPINVOKE.switch_asr_handle_private_info_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_handle_private_info_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public switch_asr_handle() : this(freeswitchPINVOKE.new_switch_asr_handle(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_asr_interface : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_asr_interface(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_asr_interface obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_asr_interface() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_asr_interface(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string interface_name { + set { + freeswitchPINVOKE.switch_asr_interface_interface_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_asr_interface_interface_name_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_int_p_q_const__char_p_unsigned_long__switch_status_t asr_open { + set { + freeswitchPINVOKE.switch_asr_interface_asr_open_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_int_p_q_const__char_p_unsigned_long__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_open_get(swigCPtr); + SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_int_p_q_const__char_p_unsigned_long__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_int_p_q_const__char_p_unsigned_long__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_p_q_const__char__switch_status_t asr_load_grammar { + set { + freeswitchPINVOKE.switch_asr_interface_asr_load_grammar_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_p_q_const__char__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_load_grammar_get(swigCPtr); + SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_p_q_const__char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_p_q_const__char__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t asr_unload_grammar { + set { + freeswitchPINVOKE.switch_asr_interface_asr_unload_grammar_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_unload_grammar_get(swigCPtr); + SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t asr_close { + set { + freeswitchPINVOKE.switch_asr_interface_asr_close_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_close_get(swigCPtr); + SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_asr_handle_p_void_unsigned_int_p_unsigned_long__switch_status_t asr_feed { + set { + freeswitchPINVOKE.switch_asr_interface_asr_feed_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_void_unsigned_int_p_unsigned_long__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_feed_get(swigCPtr); + SWIGTYPE_p_f_p_switch_asr_handle_p_void_unsigned_int_p_unsigned_long__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_void_unsigned_int_p_unsigned_long__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t asr_resume { + set { + freeswitchPINVOKE.switch_asr_interface_asr_resume_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_resume_get(swigCPtr); + SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t asr_pause { + set { + freeswitchPINVOKE.switch_asr_interface_asr_pause_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_pause_get(swigCPtr); + SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t asr_check_results { + set { + freeswitchPINVOKE.switch_asr_interface_asr_check_results_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_check_results_get(swigCPtr); + SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_asr_handle_p_p_char_p_unsigned_long__switch_status_t asr_get_results { + set { + freeswitchPINVOKE.switch_asr_interface_asr_get_results_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_p_char_p_unsigned_long__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_get_results_get(swigCPtr); + SWIGTYPE_p_f_p_switch_asr_handle_p_p_char_p_unsigned_long__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_p_char_p_unsigned_long__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t asr_start_input_timers { + set { + freeswitchPINVOKE.switch_asr_interface_asr_start_input_timers_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_start_input_timers_get(swigCPtr); + SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_asr_handle_p_char_p_q_const__char__void asr_text_param { + set { + freeswitchPINVOKE.switch_asr_interface_asr_text_param_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_char_p_q_const__char__void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_text_param_get(swigCPtr); + SWIGTYPE_p_f_p_switch_asr_handle_p_char_p_q_const__char__void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_char_p_q_const__char__void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_asr_handle_p_char_int__void asr_numeric_param { + set { + freeswitchPINVOKE.switch_asr_interface_asr_numeric_param_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_char_int__void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_numeric_param_get(swigCPtr); + SWIGTYPE_p_f_p_switch_asr_handle_p_char_int__void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_char_int__void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_asr_handle_p_char_double__void asr_float_param { + set { + freeswitchPINVOKE.switch_asr_interface_asr_float_param_set(swigCPtr, SWIGTYPE_p_f_p_switch_asr_handle_p_char_double__void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_asr_float_param_get(swigCPtr); + SWIGTYPE_p_f_p_switch_asr_handle_p_char_double__void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_asr_handle_p_char_double__void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { + set { + freeswitchPINVOKE.switch_asr_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_rwlock_get(swigCPtr); + SWIGTYPE_p_switch_thread_rwlock_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_thread_rwlock_t(cPtr, false); + return ret; + } + } + + public int refs { + set { + freeswitchPINVOKE.switch_asr_interface_refs_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_asr_interface_refs_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t reflock { + set { + freeswitchPINVOKE.switch_asr_interface_reflock_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_reflock_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_loadable_module_interface parent { + set { + freeswitchPINVOKE.switch_asr_interface_parent_set(swigCPtr, SWIGTYPE_p_switch_loadable_module_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_parent_get(swigCPtr); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + } + + public switch_asr_interface next { + set { + freeswitchPINVOKE.switch_asr_interface_next_set(swigCPtr, switch_asr_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_asr_interface_next_get(swigCPtr); + switch_asr_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_asr_interface(cPtr, false); + return ret; + } + } + + public switch_asr_interface() : this(freeswitchPINVOKE.new_switch_asr_interface(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_audio_col_t { + SWITCH_AUDIO_COL_STR_TITLE = 0x01, + SWITCH_AUDIO_COL_STR_COPYRIGHT = 0x02, + SWITCH_AUDIO_COL_STR_SOFTWARE = 0x03, + SWITCH_AUDIO_COL_STR_ARTIST = 0x04, + SWITCH_AUDIO_COL_STR_COMMENT = 0x05, + SWITCH_AUDIO_COL_STR_DATE = 0x06 +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_audio_resampler_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_audio_resampler_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_audio_resampler_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_audio_resampler_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_audio_resampler_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_void resampler { + set { + freeswitchPINVOKE.switch_audio_resampler_t_resampler_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_audio_resampler_t_resampler_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public int from_rate { + set { + freeswitchPINVOKE.switch_audio_resampler_t_from_rate_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_audio_resampler_t_from_rate_get(swigCPtr); + return ret; + } + } + + public int to_rate { + set { + freeswitchPINVOKE.switch_audio_resampler_t_to_rate_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_audio_resampler_t_to_rate_get(swigCPtr); + return ret; + } + } + + public double factor { + set { + freeswitchPINVOKE.switch_audio_resampler_t_factor_set(swigCPtr, value); + } + get { + double ret = freeswitchPINVOKE.switch_audio_resampler_t_factor_get(swigCPtr); + return ret; + } + } + + public double rfactor { + set { + freeswitchPINVOKE.switch_audio_resampler_t_rfactor_set(swigCPtr, value); + } + get { + double ret = freeswitchPINVOKE.switch_audio_resampler_t_rfactor_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_short to { + set { + freeswitchPINVOKE.switch_audio_resampler_t_to_set(swigCPtr, SWIGTYPE_p_short.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_audio_resampler_t_to_get(swigCPtr); + SWIGTYPE_p_short ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_short(cPtr, false); + return ret; + } + } + + public uint to_len { + set { + freeswitchPINVOKE.switch_audio_resampler_t_to_len_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_audio_resampler_t_to_len_get(swigCPtr); + return ret; + } + } + + public uint to_size { + set { + freeswitchPINVOKE.switch_audio_resampler_t_to_size_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_audio_resampler_t_to_size_get(swigCPtr); + return ret; + } + } + + public switch_audio_resampler_t() : this(freeswitchPINVOKE.new_switch_audio_resampler_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_bind_flag_enum_t { + SBF_DIAL_ALEG = (1 << 0), + SBF_EXEC_ALEG = (1 << 1), + SBF_DIAL_BLEG = (1 << 2), + SBF_EXEC_BLEG = (1 << 3), + SBF_EXEC_OPPOSITE = (1 << 4), + SBF_EXEC_SAME = (1 << 5), + SBF_ONCE = (1 << 6), + SBF_EXEC_INLINE = (1 << 7) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_bitpack_mode_t { + SWITCH_BITPACK_MODE_RFC3551, + SWITCH_BITPACK_MODE_AAL2 +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_bitpack_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_bitpack_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_bitpack_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_bitpack_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_bitpack_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_unsigned_char buf { + set { + freeswitchPINVOKE.switch_bitpack_t_buf_set(swigCPtr, SWIGTYPE_p_unsigned_char.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_bitpack_t_buf_get(swigCPtr); + SWIGTYPE_p_unsigned_char ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_char(cPtr, false); + return ret; + } + } + + public uint buflen { + set { + freeswitchPINVOKE.switch_bitpack_t_buflen_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_bitpack_t_buflen_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_unsigned_char cur { + set { + freeswitchPINVOKE.switch_bitpack_t_cur_set(swigCPtr, SWIGTYPE_p_unsigned_char.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_bitpack_t_cur_get(swigCPtr); + SWIGTYPE_p_unsigned_char ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_char(cPtr, false); + return ret; + } + } + + public uint bytes { + set { + freeswitchPINVOKE.switch_bitpack_t_bytes_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_bitpack_t_bytes_get(swigCPtr); + return ret; + } + } + + public uint bits_tot { + set { + freeswitchPINVOKE.switch_bitpack_t_bits_tot_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_bitpack_t_bits_tot_get(swigCPtr); + return ret; + } + } + + public byte bits_cur { + set { + freeswitchPINVOKE.switch_bitpack_t_bits_cur_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_bitpack_t_bits_cur_get(swigCPtr); + return ret; + } + } + + public byte bits_rem { + set { + freeswitchPINVOKE.switch_bitpack_t_bits_rem_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_bitpack_t_bits_rem_get(swigCPtr); + return ret; + } + } + + public byte frame_bits { + set { + freeswitchPINVOKE.switch_bitpack_t_frame_bits_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_bitpack_t_frame_bits_get(swigCPtr); + return ret; + } + } + + public byte shiftby { + set { + freeswitchPINVOKE.switch_bitpack_t_shiftby_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_bitpack_t_shiftby_get(swigCPtr); + return ret; + } + } + + public byte this_byte { + set { + freeswitchPINVOKE.switch_bitpack_t_this_byte_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_bitpack_t_this_byte_get(swigCPtr); + return ret; + } + } + + public byte under { + set { + freeswitchPINVOKE.switch_bitpack_t_under_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_bitpack_t_under_get(swigCPtr); + return ret; + } + } + + public byte over { + set { + freeswitchPINVOKE.switch_bitpack_t_over_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_bitpack_t_over_get(swigCPtr); + return ret; + } + } + + public switch_bitpack_mode_t mode { + set { + freeswitchPINVOKE.switch_bitpack_t_mode_set(swigCPtr, (int)value); + } + get { + switch_bitpack_mode_t ret = (switch_bitpack_mode_t)freeswitchPINVOKE.switch_bitpack_t_mode_get(swigCPtr); + return ret; + } + } + + public switch_bitpack_t() : this(freeswitchPINVOKE.new_switch_bitpack_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_bool_t { + SWITCH_FALSE = 0, + SWITCH_TRUE = 1 +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_cache_db_connection_options_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_cache_db_connection_options_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_cache_db_connection_options_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_cache_db_connection_options_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_cache_db_connection_options_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public switch_cache_db_core_db_options_t core_db_options { + set { + freeswitchPINVOKE.switch_cache_db_connection_options_t_core_db_options_set(swigCPtr, switch_cache_db_core_db_options_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_cache_db_connection_options_t_core_db_options_get(swigCPtr); + switch_cache_db_core_db_options_t ret = (cPtr == IntPtr.Zero) ? null : new switch_cache_db_core_db_options_t(cPtr, false); + return ret; + } + } + + public switch_cache_db_odbc_options_t odbc_options { + set { + freeswitchPINVOKE.switch_cache_db_connection_options_t_odbc_options_set(swigCPtr, switch_cache_db_odbc_options_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_cache_db_connection_options_t_odbc_options_get(swigCPtr); + switch_cache_db_odbc_options_t ret = (cPtr == IntPtr.Zero) ? null : new switch_cache_db_odbc_options_t(cPtr, false); + return ret; + } + } + + public switch_cache_db_connection_options_t() : this(freeswitchPINVOKE.new_switch_cache_db_connection_options_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_cache_db_core_db_options_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_cache_db_core_db_options_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_cache_db_core_db_options_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_cache_db_core_db_options_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_cache_db_core_db_options_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string db_path { + set { + freeswitchPINVOKE.switch_cache_db_core_db_options_t_db_path_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_cache_db_core_db_options_t_db_path_get(swigCPtr); + return ret; + } + } + + public switch_cache_db_core_db_options_t() : this(freeswitchPINVOKE.new_switch_cache_db_core_db_options_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_cache_db_handle_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_cache_db_handle_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_cache_db_handle_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_cache_db_handle_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_cache_db_handle_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string name { + set { + freeswitchPINVOKE.switch_cache_db_handle_t_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_cache_db_handle_t_name_get(swigCPtr); + return ret; + } + } + + public switch_cache_db_handle_type_t type { + set { + freeswitchPINVOKE.switch_cache_db_handle_t_type_set(swigCPtr, (int)value); + } + get { + switch_cache_db_handle_type_t ret = (switch_cache_db_handle_type_t)freeswitchPINVOKE.switch_cache_db_handle_t_type_get(swigCPtr); + return ret; + } + } + + public switch_cache_db_native_handle_t native_handle { + set { + freeswitchPINVOKE.switch_cache_db_handle_t_native_handle_set(swigCPtr, switch_cache_db_native_handle_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_cache_db_handle_t_native_handle_get(swigCPtr); + switch_cache_db_native_handle_t ret = (cPtr == IntPtr.Zero) ? null : new switch_cache_db_native_handle_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_time_t last_used { + set { + freeswitchPINVOKE.switch_cache_db_handle_t_last_used_set(swigCPtr, SWIGTYPE_p_time_t.getCPtr(value)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + } + get { + SWIGTYPE_p_time_t ret = new SWIGTYPE_p_time_t(freeswitchPINVOKE.switch_cache_db_handle_t_last_used_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t mutex { + set { + freeswitchPINVOKE.switch_cache_db_handle_t_mutex_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_cache_db_handle_t_mutex_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t io_mutex { + set { + freeswitchPINVOKE.switch_cache_db_handle_t_io_mutex_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_cache_db_handle_t_io_mutex_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_apr_pool_t pool { + set { + freeswitchPINVOKE.switch_cache_db_handle_t_pool_set(swigCPtr, SWIGTYPE_p_apr_pool_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_cache_db_handle_t_pool_get(swigCPtr); + SWIGTYPE_p_apr_pool_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_apr_pool_t(cPtr, false); + return ret; + } + } + + public int flags { + set { + freeswitchPINVOKE.switch_cache_db_handle_t_flags_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_cache_db_handle_t_flags_get(swigCPtr); + return ret; + } + } + + public uint hash { + set { + freeswitchPINVOKE.switch_cache_db_handle_t_hash_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_cache_db_handle_t_hash_get(swigCPtr); + return ret; + } + } + + public string creator { + set { + freeswitchPINVOKE.switch_cache_db_handle_t_creator_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_cache_db_handle_t_creator_get(swigCPtr); + return ret; + } + } + + public string last_user { + set { + freeswitchPINVOKE.switch_cache_db_handle_t_last_user_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_cache_db_handle_t_last_user_get(swigCPtr); + return ret; + } + } + + public switch_cache_db_handle_t() : this(freeswitchPINVOKE.new_switch_cache_db_handle_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_cache_db_handle_type_t { + SCDB_TYPE_CORE_DB, + SCDB_TYPE_ODBC +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_cache_db_native_handle_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_cache_db_native_handle_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_cache_db_native_handle_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_cache_db_native_handle_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_cache_db_native_handle_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_sqlite3 core_db_dbh { + set { + freeswitchPINVOKE.switch_cache_db_native_handle_t_core_db_dbh_set(swigCPtr, SWIGTYPE_p_sqlite3.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_cache_db_native_handle_t_core_db_dbh_get(swigCPtr); + SWIGTYPE_p_sqlite3 ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_sqlite3(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_odbc_handle odbc_dbh { + set { + freeswitchPINVOKE.switch_cache_db_native_handle_t_odbc_dbh_set(swigCPtr, SWIGTYPE_p_switch_odbc_handle.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_cache_db_native_handle_t_odbc_dbh_get(swigCPtr); + SWIGTYPE_p_switch_odbc_handle ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_odbc_handle(cPtr, false); + return ret; + } + } + + public switch_cache_db_native_handle_t() : this(freeswitchPINVOKE.new_switch_cache_db_native_handle_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_cache_db_odbc_options_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_cache_db_odbc_options_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_cache_db_odbc_options_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_cache_db_odbc_options_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_cache_db_odbc_options_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string dsn { + set { + freeswitchPINVOKE.switch_cache_db_odbc_options_t_dsn_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_cache_db_odbc_options_t_dsn_get(swigCPtr); + return ret; + } + } + + public string user { + set { + freeswitchPINVOKE.switch_cache_db_odbc_options_t_user_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_cache_db_odbc_options_t_user_get(swigCPtr); + return ret; + } + } + + public string pass { + set { + freeswitchPINVOKE.switch_cache_db_odbc_options_t_pass_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_cache_db_odbc_options_t_pass_get(swigCPtr); + return ret; + } + } + + public switch_cache_db_odbc_options_t() : this(freeswitchPINVOKE.new_switch_cache_db_odbc_options_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_caller_application : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_caller_application(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_caller_application obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_caller_application() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_caller_application(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string application_name { + set { + freeswitchPINVOKE.switch_caller_application_application_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_application_application_name_get(swigCPtr); + return ret; + } + } + + public string application_data { + set { + freeswitchPINVOKE.switch_caller_application_application_data_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_application_application_data_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_q_const__char__void application_function { + set { + freeswitchPINVOKE.switch_caller_application_application_function_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_q_const__char__void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_application_application_function_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_q_const__char__void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_q_const__char__void(cPtr, false); + return ret; + } + } + + public switch_caller_application next { + set { + freeswitchPINVOKE.switch_caller_application_next_set(swigCPtr, switch_caller_application.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_application_next_get(swigCPtr); + switch_caller_application ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_application(cPtr, false); + return ret; + } + } + + public switch_caller_application() : this(freeswitchPINVOKE.new_switch_caller_application(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_caller_extension : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_caller_extension(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_caller_extension obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_caller_extension() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_caller_extension(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string extension_name { + set { + freeswitchPINVOKE.switch_caller_extension_extension_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_extension_extension_name_get(swigCPtr); + return ret; + } + } + + public string extension_number { + set { + freeswitchPINVOKE.switch_caller_extension_extension_number_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_extension_extension_number_get(swigCPtr); + return ret; + } + } + + public switch_caller_application current_application { + set { + freeswitchPINVOKE.switch_caller_extension_current_application_set(swigCPtr, switch_caller_application.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_extension_current_application_get(swigCPtr); + switch_caller_application ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_application(cPtr, false); + return ret; + } + } + + public switch_caller_application last_application { + set { + freeswitchPINVOKE.switch_caller_extension_last_application_set(swigCPtr, switch_caller_application.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_extension_last_application_get(swigCPtr); + switch_caller_application ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_application(cPtr, false); + return ret; + } + } + + public switch_caller_application applications { + set { + freeswitchPINVOKE.switch_caller_extension_applications_set(swigCPtr, switch_caller_application.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_extension_applications_get(swigCPtr); + switch_caller_application ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_application(cPtr, false); + return ret; + } + } + + public switch_caller_profile children { + set { + freeswitchPINVOKE.switch_caller_extension_children_set(swigCPtr, switch_caller_profile.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_extension_children_get(swigCPtr); + switch_caller_profile ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_profile(cPtr, false); + return ret; + } + } + + public switch_caller_extension next { + set { + freeswitchPINVOKE.switch_caller_extension_next_set(swigCPtr, switch_caller_extension.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_extension_next_get(swigCPtr); + switch_caller_extension ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_extension(cPtr, false); + return ret; + } + } + + public switch_caller_extension() : this(freeswitchPINVOKE.new_switch_caller_extension(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_caller_profile : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_caller_profile(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_caller_profile obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_caller_profile() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_caller_profile(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string username { + set { + freeswitchPINVOKE.switch_caller_profile_username_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_username_get(swigCPtr); + return ret; + } + } + + public string dialplan { + set { + freeswitchPINVOKE.switch_caller_profile_dialplan_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_dialplan_get(swigCPtr); + return ret; + } + } + + public string caller_id_name { + set { + freeswitchPINVOKE.switch_caller_profile_caller_id_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_caller_id_name_get(swigCPtr); + return ret; + } + } + + public string caller_id_number { + set { + freeswitchPINVOKE.switch_caller_profile_caller_id_number_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_caller_id_number_get(swigCPtr); + return ret; + } + } + + public string callee_id_name { + set { + freeswitchPINVOKE.switch_caller_profile_callee_id_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_callee_id_name_get(swigCPtr); + return ret; + } + } + + public string callee_id_number { + set { + freeswitchPINVOKE.switch_caller_profile_callee_id_number_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_callee_id_number_get(swigCPtr); + return ret; + } + } + + public byte caller_ton { + set { + freeswitchPINVOKE.switch_caller_profile_caller_ton_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_caller_profile_caller_ton_get(swigCPtr); + return ret; + } + } + + public byte caller_numplan { + set { + freeswitchPINVOKE.switch_caller_profile_caller_numplan_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_caller_profile_caller_numplan_get(swigCPtr); + return ret; + } + } + + public string network_addr { + set { + freeswitchPINVOKE.switch_caller_profile_network_addr_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_network_addr_get(swigCPtr); + return ret; + } + } + + public string ani { + set { + freeswitchPINVOKE.switch_caller_profile_ani_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_ani_get(swigCPtr); + return ret; + } + } + + public byte ani_ton { + set { + freeswitchPINVOKE.switch_caller_profile_ani_ton_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_caller_profile_ani_ton_get(swigCPtr); + return ret; + } + } + + public byte ani_numplan { + set { + freeswitchPINVOKE.switch_caller_profile_ani_numplan_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_caller_profile_ani_numplan_get(swigCPtr); + return ret; + } + } + + public string aniii { + set { + freeswitchPINVOKE.switch_caller_profile_aniii_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_aniii_get(swigCPtr); + return ret; + } + } + + public string rdnis { + set { + freeswitchPINVOKE.switch_caller_profile_rdnis_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_rdnis_get(swigCPtr); + return ret; + } + } + + public byte rdnis_ton { + set { + freeswitchPINVOKE.switch_caller_profile_rdnis_ton_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_caller_profile_rdnis_ton_get(swigCPtr); + return ret; + } + } + + public byte rdnis_numplan { + set { + freeswitchPINVOKE.switch_caller_profile_rdnis_numplan_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_caller_profile_rdnis_numplan_get(swigCPtr); + return ret; + } + } + + public string destination_number { + set { + freeswitchPINVOKE.switch_caller_profile_destination_number_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_destination_number_get(swigCPtr); + return ret; + } + } + + public byte destination_number_ton { + set { + freeswitchPINVOKE.switch_caller_profile_destination_number_ton_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_caller_profile_destination_number_ton_get(swigCPtr); + return ret; + } + } + + public byte destination_number_numplan { + set { + freeswitchPINVOKE.switch_caller_profile_destination_number_numplan_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_caller_profile_destination_number_numplan_get(swigCPtr); + return ret; + } + } + + public string source { + set { + freeswitchPINVOKE.switch_caller_profile_source_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_source_get(swigCPtr); + return ret; + } + } + + public string chan_name { + set { + freeswitchPINVOKE.switch_caller_profile_chan_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_chan_name_get(swigCPtr); + return ret; + } + } + + public string uuid { + set { + freeswitchPINVOKE.switch_caller_profile_uuid_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_uuid_get(swigCPtr); + return ret; + } + } + + public string context { + set { + freeswitchPINVOKE.switch_caller_profile_context_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_context_get(swigCPtr); + return ret; + } + } + + public string profile_index { + set { + freeswitchPINVOKE.switch_caller_profile_profile_index_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_caller_profile_profile_index_get(swigCPtr); + return ret; + } + } + + public uint flags { + set { + freeswitchPINVOKE.switch_caller_profile_flags_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_caller_profile_flags_get(swigCPtr); + return ret; + } + } + + public switch_caller_profile originator_caller_profile { + set { + freeswitchPINVOKE.switch_caller_profile_originator_caller_profile_set(swigCPtr, switch_caller_profile.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_profile_originator_caller_profile_get(swigCPtr); + switch_caller_profile ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_profile(cPtr, false); + return ret; + } + } + + public switch_caller_profile originatee_caller_profile { + set { + freeswitchPINVOKE.switch_caller_profile_originatee_caller_profile_set(swigCPtr, switch_caller_profile.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_profile_originatee_caller_profile_get(swigCPtr); + switch_caller_profile ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_profile(cPtr, false); + return ret; + } + } + + public switch_caller_profile hunt_caller_profile { + set { + freeswitchPINVOKE.switch_caller_profile_hunt_caller_profile_set(swigCPtr, switch_caller_profile.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_profile_hunt_caller_profile_get(swigCPtr); + switch_caller_profile ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_profile(cPtr, false); + return ret; + } + } + + public switch_channel_timetable times { + set { + freeswitchPINVOKE.switch_caller_profile_times_set(swigCPtr, switch_channel_timetable.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_profile_times_get(swigCPtr); + switch_channel_timetable ret = (cPtr == IntPtr.Zero) ? null : new switch_channel_timetable(cPtr, false); + return ret; + } + } + + public switch_caller_extension caller_extension { + set { + freeswitchPINVOKE.switch_caller_profile_caller_extension_set(swigCPtr, switch_caller_extension.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_profile_caller_extension_get(swigCPtr); + switch_caller_extension ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_extension(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_apr_pool_t pool { + set { + freeswitchPINVOKE.switch_caller_profile_pool_set(swigCPtr, SWIGTYPE_p_apr_pool_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_profile_pool_get(swigCPtr); + SWIGTYPE_p_apr_pool_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_apr_pool_t(cPtr, false); + return ret; + } + } + + public switch_caller_profile next { + set { + freeswitchPINVOKE.switch_caller_profile_next_set(swigCPtr, switch_caller_profile.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_caller_profile_next_get(swigCPtr); + switch_caller_profile ret = (cPtr == IntPtr.Zero) ? null : new switch_caller_profile(cPtr, false); + return ret; + } + } + + public switch_caller_profile() : this(freeswitchPINVOKE.new_switch_caller_profile(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_caller_profile_flag_enum_t { + SWITCH_CPF_NONE = 0, + SWITCH_CPF_SCREEN = (1 << 0), + SWITCH_CPF_HIDE_NAME = (1 << 1), + SWITCH_CPF_HIDE_NUMBER = (1 << 2) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_call_cause_t { + SWITCH_CAUSE_NONE = 0, + SWITCH_CAUSE_UNALLOCATED_NUMBER = 1, + SWITCH_CAUSE_NO_ROUTE_TRANSIT_NET = 2, + SWITCH_CAUSE_NO_ROUTE_DESTINATION = 3, + SWITCH_CAUSE_CHANNEL_UNACCEPTABLE = 6, + SWITCH_CAUSE_CALL_AWARDED_DELIVERED = 7, + SWITCH_CAUSE_NORMAL_CLEARING = 16, + SWITCH_CAUSE_USER_BUSY = 17, + SWITCH_CAUSE_NO_USER_RESPONSE = 18, + SWITCH_CAUSE_NO_ANSWER = 19, + SWITCH_CAUSE_SUBSCRIBER_ABSENT = 20, + SWITCH_CAUSE_CALL_REJECTED = 21, + SWITCH_CAUSE_NUMBER_CHANGED = 22, + SWITCH_CAUSE_REDIRECTION_TO_NEW_DESTINATION = 23, + SWITCH_CAUSE_EXCHANGE_ROUTING_ERROR = 25, + SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER = 27, + SWITCH_CAUSE_INVALID_NUMBER_FORMAT = 28, + SWITCH_CAUSE_FACILITY_REJECTED = 29, + SWITCH_CAUSE_RESPONSE_TO_STATUS_ENQUIRY = 30, + SWITCH_CAUSE_NORMAL_UNSPECIFIED = 31, + SWITCH_CAUSE_NORMAL_CIRCUIT_CONGESTION = 34, + SWITCH_CAUSE_NETWORK_OUT_OF_ORDER = 38, + SWITCH_CAUSE_NORMAL_TEMPORARY_FAILURE = 41, + SWITCH_CAUSE_SWITCH_CONGESTION = 42, + SWITCH_CAUSE_ACCESS_INFO_DISCARDED = 43, + SWITCH_CAUSE_REQUESTED_CHAN_UNAVAIL = 44, + SWITCH_CAUSE_PRE_EMPTED = 45, + SWITCH_CAUSE_FACILITY_NOT_SUBSCRIBED = 50, + SWITCH_CAUSE_OUTGOING_CALL_BARRED = 52, + SWITCH_CAUSE_INCOMING_CALL_BARRED = 54, + SWITCH_CAUSE_BEARERCAPABILITY_NOTAUTH = 57, + SWITCH_CAUSE_BEARERCAPABILITY_NOTAVAIL = 58, + SWITCH_CAUSE_SERVICE_UNAVAILABLE = 63, + SWITCH_CAUSE_BEARERCAPABILITY_NOTIMPL = 65, + SWITCH_CAUSE_CHAN_NOT_IMPLEMENTED = 66, + SWITCH_CAUSE_FACILITY_NOT_IMPLEMENTED = 69, + SWITCH_CAUSE_SERVICE_NOT_IMPLEMENTED = 79, + SWITCH_CAUSE_INVALID_CALL_REFERENCE = 81, + SWITCH_CAUSE_INCOMPATIBLE_DESTINATION = 88, + SWITCH_CAUSE_INVALID_MSG_UNSPECIFIED = 95, + SWITCH_CAUSE_MANDATORY_IE_MISSING = 96, + SWITCH_CAUSE_MESSAGE_TYPE_NONEXIST = 97, + SWITCH_CAUSE_WRONG_MESSAGE = 98, + SWITCH_CAUSE_IE_NONEXIST = 99, + SWITCH_CAUSE_INVALID_IE_CONTENTS = 100, + SWITCH_CAUSE_WRONG_CALL_STATE = 101, + SWITCH_CAUSE_RECOVERY_ON_TIMER_EXPIRE = 102, + SWITCH_CAUSE_MANDATORY_IE_LENGTH_ERROR = 103, + SWITCH_CAUSE_PROTOCOL_ERROR = 111, + SWITCH_CAUSE_INTERWORKING = 127, + SWITCH_CAUSE_SUCCESS = 142, + SWITCH_CAUSE_ORIGINATOR_CANCEL = 487, + SWITCH_CAUSE_CRASH = 500, + SWITCH_CAUSE_SYSTEM_SHUTDOWN = 501, + SWITCH_CAUSE_LOSE_RACE = 502, + SWITCH_CAUSE_MANAGER_REQUEST = 503, + SWITCH_CAUSE_BLIND_TRANSFER = 600, + SWITCH_CAUSE_ATTENDED_TRANSFER = 601, + SWITCH_CAUSE_ALLOTTED_TIMEOUT = 602, + SWITCH_CAUSE_USER_CHALLENGE = 603, + SWITCH_CAUSE_MEDIA_TIMEOUT = 604, + SWITCH_CAUSE_PICKED_OFF = 605, + SWITCH_CAUSE_USER_NOT_REGISTERED = 606, + SWITCH_CAUSE_PROGRESS_TIMEOUT = 607 +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_call_direction_t { + SWITCH_CALL_DIRECTION_INBOUND, + SWITCH_CALL_DIRECTION_OUTBOUND +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_channel_app_flag_t { + CF_APP_TAGGED = (1 << 0), + CF_APP_T38 = (1 << 1) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_channel_callstate_t { + CCS_DOWN, + CCS_DIALING, + CCS_RINGING, + CCS_EARLY, + CCS_ACTIVE, + CCS_HELD, + CCS_HANGUP +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_channel_cap_t { + CC_MEDIA_ACK = 1, + CC_BYPASS_MEDIA, + CC_PROXY_MEDIA, + CC_FLAG_MAX +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_channel_flag_t { + CF_ANSWERED = 1, + CF_OUTBOUND, + CF_EARLY_MEDIA, + CF_BRIDGE_ORIGINATOR, + CF_TRANSFER, + CF_ACCEPT_CNG, + CF_REDIRECT, + CF_BRIDGED, + CF_HOLD, + CF_SERVICE, + CF_TAGGED, + CF_WINNER, + CF_CONTROLLED, + CF_PROXY_MODE, + CF_SUSPEND, + CF_EVENT_PARSE, + CF_GEN_RINGBACK, + CF_RING_READY, + CF_BREAK, + CF_BROADCAST, + CF_UNICAST, + CF_VIDEO, + CF_EVENT_LOCK, + CF_EVENT_LOCK_PRI, + CF_RESET, + CF_ORIGINATING, + CF_STOP_BROADCAST, + CF_PROXY_MEDIA, + CF_INNER_BRIDGE, + CF_REQ_MEDIA, + CF_VERBOSE_EVENTS, + CF_PAUSE_BUGS, + CF_DIVERT_EVENTS, + CF_BLOCK_STATE, + CF_FS_RTP, + CF_REPORTING, + CF_PARK, + CF_TIMESTAMP_SET, + CF_ORIGINATOR, + CF_XFER_ZOMBIE, + CF_MEDIA_ACK, + CF_THREAD_SLEEPING, + CF_DISABLE_RINGBACK, + CF_NOT_READY, + CF_SIGNAL_BRIDGE_TTL, + CF_MEDIA_BRIDGE_TTL, + CF_BYPASS_MEDIA_AFTER_BRIDGE, + CF_LEG_HOLDING, + CF_BROADCAST_DROP_MEDIA, + CF_EARLY_HANGUP, + CF_MEDIA_SET, + CF_CONSUME_ON_ORIGINATE, + CF_FLAG_MAX +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_channel_state_t { + CS_NEW, + CS_INIT, + CS_ROUTING, + CS_SOFT_EXECUTE, + CS_EXECUTE, + CS_EXCHANGE_MEDIA, + CS_PARK, + CS_CONSUME_MEDIA, + CS_HIBERNATE, + CS_RESET, + CS_HANGUP, + CS_REPORTING, + CS_DESTROY, + CS_NONE +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_channel_timetable : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_channel_timetable(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_channel_timetable obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_channel_timetable() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_channel_timetable(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_switch_time_t profile_created { + set { + freeswitchPINVOKE.switch_channel_timetable_profile_created_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_channel_timetable_profile_created_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_time_t created { + set { + freeswitchPINVOKE.switch_channel_timetable_created_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_channel_timetable_created_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_time_t answered { + set { + freeswitchPINVOKE.switch_channel_timetable_answered_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_channel_timetable_answered_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_time_t progress { + set { + freeswitchPINVOKE.switch_channel_timetable_progress_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_channel_timetable_progress_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_time_t progress_media { + set { + freeswitchPINVOKE.switch_channel_timetable_progress_media_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_channel_timetable_progress_media_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_time_t hungup { + set { + freeswitchPINVOKE.switch_channel_timetable_hungup_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_channel_timetable_hungup_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_time_t transferred { + set { + freeswitchPINVOKE.switch_channel_timetable_transferred_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_channel_timetable_transferred_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_time_t resurrected { + set { + freeswitchPINVOKE.switch_channel_timetable_resurrected_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_channel_timetable_resurrected_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public switch_channel_timetable next { + set { + freeswitchPINVOKE.switch_channel_timetable_next_set(swigCPtr, switch_channel_timetable.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_channel_timetable_next_get(swigCPtr); + switch_channel_timetable ret = (cPtr == IntPtr.Zero) ? null : new switch_channel_timetable(cPtr, false); + return ret; + } + } + + public switch_channel_timetable() : this(freeswitchPINVOKE.new_switch_channel_timetable(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_chat_interface : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_chat_interface(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_chat_interface obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_chat_interface() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_chat_interface(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string interface_name { + set { + freeswitchPINVOKE.switch_chat_interface_interface_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_chat_interface_interface_name_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char__switch_status_t chat_send { + set { + freeswitchPINVOKE.switch_chat_interface_chat_send_set(swigCPtr, SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_chat_interface_chat_send_get(swigCPtr); + SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char_p_q_const__char__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { + set { + freeswitchPINVOKE.switch_chat_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_chat_interface_rwlock_get(swigCPtr); + SWIGTYPE_p_switch_thread_rwlock_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_thread_rwlock_t(cPtr, false); + return ret; + } + } + + public int refs { + set { + freeswitchPINVOKE.switch_chat_interface_refs_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_chat_interface_refs_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t reflock { + set { + freeswitchPINVOKE.switch_chat_interface_reflock_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_chat_interface_reflock_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_loadable_module_interface parent { + set { + freeswitchPINVOKE.switch_chat_interface_parent_set(swigCPtr, SWIGTYPE_p_switch_loadable_module_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_chat_interface_parent_get(swigCPtr); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + } + + public switch_chat_interface next { + set { + freeswitchPINVOKE.switch_chat_interface_next_set(swigCPtr, switch_chat_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_chat_interface_next_get(swigCPtr); + switch_chat_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_chat_interface(cPtr, false); + return ret; + } + } + + public switch_chat_interface() : this(freeswitchPINVOKE.new_switch_chat_interface(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_codec : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_codec(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_codec obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_codec() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_codec(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public switch_codec_interface codec_interface { + set { + freeswitchPINVOKE.switch_codec_codec_interface_set(swigCPtr, switch_codec_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_codec_interface_get(swigCPtr); + switch_codec_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_codec_interface(cPtr, false); + return ret; + } + } + + public switch_codec_implementation implementation { + set { + freeswitchPINVOKE.switch_codec_implementation_set(swigCPtr, switch_codec_implementation.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_implementation_get(swigCPtr); + switch_codec_implementation ret = (cPtr == IntPtr.Zero) ? null : new switch_codec_implementation(cPtr, false); + return ret; + } + } + + public string fmtp_in { + set { + freeswitchPINVOKE.switch_codec_fmtp_in_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_codec_fmtp_in_get(swigCPtr); + return ret; + } + } + + public string fmtp_out { + set { + freeswitchPINVOKE.switch_codec_fmtp_out_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_codec_fmtp_out_get(swigCPtr); + return ret; + } + } + + public switch_codec_settings codec_settings { + set { + freeswitchPINVOKE.switch_codec_codec_settings_set(swigCPtr, switch_codec_settings.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_codec_settings_get(swigCPtr); + switch_codec_settings ret = (cPtr == IntPtr.Zero) ? null : new switch_codec_settings(cPtr, false); + return ret; + } + } + + public uint flags { + set { + freeswitchPINVOKE.switch_codec_flags_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_codec_flags_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_apr_pool_t memory_pool { + set { + freeswitchPINVOKE.switch_codec_memory_pool_set(swigCPtr, SWIGTYPE_p_apr_pool_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_memory_pool_get(swigCPtr); + SWIGTYPE_p_apr_pool_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_apr_pool_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_void private_info { + set { + freeswitchPINVOKE.switch_codec_private_info_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_private_info_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public byte agreed_pt { + set { + freeswitchPINVOKE.switch_codec_agreed_pt_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_codec_agreed_pt_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t mutex { + set { + freeswitchPINVOKE.switch_codec_mutex_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_mutex_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public switch_codec next { + set { + freeswitchPINVOKE.switch_codec_next_set(swigCPtr, switch_codec.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_next_get(swigCPtr); + switch_codec ret = (cPtr == IntPtr.Zero) ? null : new switch_codec(cPtr, false); + return ret; + } + } + + public switch_codec() : this(freeswitchPINVOKE.new_switch_codec(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_codec_flag_enum_t { + SWITCH_CODEC_FLAG_ENCODE = (1 << 0), + SWITCH_CODEC_FLAG_DECODE = (1 << 1), + SWITCH_CODEC_FLAG_SILENCE_START = (1 << 2), + SWITCH_CODEC_FLAG_SILENCE_STOP = (1 << 3), + SWITCH_CODEC_FLAG_SILENCE = (1 << 4), + SWITCH_CODEC_FLAG_FREE_POOL = (1 << 5), + SWITCH_CODEC_FLAG_AAL2 = (1 << 6), + SWITCH_CODEC_FLAG_PASSTHROUGH = (1 << 7), + SWITCH_CODEC_FLAG_READY = (1 << 8) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_codec_implementation : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_codec_implementation(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_codec_implementation obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_codec_implementation() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_codec_implementation(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public switch_codec_type_t codec_type { + set { + freeswitchPINVOKE.switch_codec_implementation_codec_type_set(swigCPtr, (int)value); + } + get { + switch_codec_type_t ret = (switch_codec_type_t)freeswitchPINVOKE.switch_codec_implementation_codec_type_get(swigCPtr); + return ret; + } + } + + public byte ianacode { + set { + freeswitchPINVOKE.switch_codec_implementation_ianacode_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_codec_implementation_ianacode_get(swigCPtr); + return ret; + } + } + + public string iananame { + set { + freeswitchPINVOKE.switch_codec_implementation_iananame_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_codec_implementation_iananame_get(swigCPtr); + return ret; + } + } + + public string fmtp { + set { + freeswitchPINVOKE.switch_codec_implementation_fmtp_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_codec_implementation_fmtp_get(swigCPtr); + return ret; + } + } + + public uint samples_per_second { + set { + freeswitchPINVOKE.switch_codec_implementation_samples_per_second_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_codec_implementation_samples_per_second_get(swigCPtr); + return ret; + } + } + + public uint actual_samples_per_second { + set { + freeswitchPINVOKE.switch_codec_implementation_actual_samples_per_second_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_codec_implementation_actual_samples_per_second_get(swigCPtr); + return ret; + } + } + + public int bits_per_second { + set { + freeswitchPINVOKE.switch_codec_implementation_bits_per_second_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_implementation_bits_per_second_get(swigCPtr); + return ret; + } + } + + public int microseconds_per_packet { + set { + freeswitchPINVOKE.switch_codec_implementation_microseconds_per_packet_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_implementation_microseconds_per_packet_get(swigCPtr); + return ret; + } + } + + public uint samples_per_packet { + set { + freeswitchPINVOKE.switch_codec_implementation_samples_per_packet_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_codec_implementation_samples_per_packet_get(swigCPtr); + return ret; + } + } + + public uint decoded_bytes_per_packet { + set { + freeswitchPINVOKE.switch_codec_implementation_decoded_bytes_per_packet_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_codec_implementation_decoded_bytes_per_packet_get(swigCPtr); + return ret; + } + } + + public uint encoded_bytes_per_packet { + set { + freeswitchPINVOKE.switch_codec_implementation_encoded_bytes_per_packet_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_codec_implementation_encoded_bytes_per_packet_get(swigCPtr); + return ret; + } + } + + public byte number_of_channels { + set { + freeswitchPINVOKE.switch_codec_implementation_number_of_channels_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_codec_implementation_number_of_channels_get(swigCPtr); + return ret; + } + } + + public int codec_frames_per_packet { + set { + freeswitchPINVOKE.switch_codec_implementation_codec_frames_per_packet_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_implementation_codec_frames_per_packet_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_codec_unsigned_long_p_q_const__switch_codec_settings__switch_status_t init { + set { + freeswitchPINVOKE.switch_codec_implementation_init_set(swigCPtr, SWIGTYPE_p_f_p_switch_codec_unsigned_long_p_q_const__switch_codec_settings__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_implementation_init_get(swigCPtr); + SWIGTYPE_p_f_p_switch_codec_unsigned_long_p_q_const__switch_codec_settings__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_codec_unsigned_long_p_q_const__switch_codec_settings__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_codec_p_switch_codec_p_void_unsigned_long_unsigned_long_p_void_p_unsigned_long_p_unsigned_long_p_unsigned_int__switch_status_t encode { + set { + freeswitchPINVOKE.switch_codec_implementation_encode_set(swigCPtr, SWIGTYPE_p_f_p_switch_codec_p_switch_codec_p_void_unsigned_long_unsigned_long_p_void_p_unsigned_long_p_unsigned_long_p_unsigned_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_implementation_encode_get(swigCPtr); + SWIGTYPE_p_f_p_switch_codec_p_switch_codec_p_void_unsigned_long_unsigned_long_p_void_p_unsigned_long_p_unsigned_long_p_unsigned_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_codec_p_switch_codec_p_void_unsigned_long_unsigned_long_p_void_p_unsigned_long_p_unsigned_long_p_unsigned_int__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_codec_p_switch_codec_p_void_unsigned_long_unsigned_long_p_void_p_unsigned_long_p_unsigned_long_p_unsigned_int__switch_status_t decode { + set { + freeswitchPINVOKE.switch_codec_implementation_decode_set(swigCPtr, SWIGTYPE_p_f_p_switch_codec_p_switch_codec_p_void_unsigned_long_unsigned_long_p_void_p_unsigned_long_p_unsigned_long_p_unsigned_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_implementation_decode_get(swigCPtr); + SWIGTYPE_p_f_p_switch_codec_p_switch_codec_p_void_unsigned_long_unsigned_long_p_void_p_unsigned_long_p_unsigned_long_p_unsigned_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_codec_p_switch_codec_p_void_unsigned_long_unsigned_long_p_void_p_unsigned_long_p_unsigned_long_p_unsigned_int__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_codec__switch_status_t destroy { + set { + freeswitchPINVOKE.switch_codec_implementation_destroy_set(swigCPtr, SWIGTYPE_p_f_p_switch_codec__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_implementation_destroy_get(swigCPtr); + SWIGTYPE_p_f_p_switch_codec__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_codec__switch_status_t(cPtr, false); + return ret; + } + } + + public uint codec_id { + set { + freeswitchPINVOKE.switch_codec_implementation_codec_id_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_codec_implementation_codec_id_get(swigCPtr); + return ret; + } + } + + public uint impl_id { + set { + freeswitchPINVOKE.switch_codec_implementation_impl_id_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_codec_implementation_impl_id_get(swigCPtr); + return ret; + } + } + + public switch_codec_implementation next { + set { + freeswitchPINVOKE.switch_codec_implementation_next_set(swigCPtr, switch_codec_implementation.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_implementation_next_get(swigCPtr); + switch_codec_implementation ret = (cPtr == IntPtr.Zero) ? null : new switch_codec_implementation(cPtr, false); + return ret; + } + } + + public switch_codec_implementation() : this(freeswitchPINVOKE.new_switch_codec_implementation(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_codec_interface : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_codec_interface(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_codec_interface obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_codec_interface() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_codec_interface(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string interface_name { + set { + freeswitchPINVOKE.switch_codec_interface_interface_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_codec_interface_interface_name_get(swigCPtr); + return ret; + } + } + + public switch_codec_implementation implementations { + set { + freeswitchPINVOKE.switch_codec_interface_implementations_set(swigCPtr, switch_codec_implementation.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_interface_implementations_get(swigCPtr); + switch_codec_implementation ret = (cPtr == IntPtr.Zero) ? null : new switch_codec_implementation(cPtr, false); + return ret; + } + } + + public uint codec_id { + set { + freeswitchPINVOKE.switch_codec_interface_codec_id_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_codec_interface_codec_id_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { + set { + freeswitchPINVOKE.switch_codec_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_interface_rwlock_get(swigCPtr); + SWIGTYPE_p_switch_thread_rwlock_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_thread_rwlock_t(cPtr, false); + return ret; + } + } + + public int refs { + set { + freeswitchPINVOKE.switch_codec_interface_refs_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_interface_refs_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t reflock { + set { + freeswitchPINVOKE.switch_codec_interface_reflock_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_interface_reflock_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_loadable_module_interface parent { + set { + freeswitchPINVOKE.switch_codec_interface_parent_set(swigCPtr, SWIGTYPE_p_switch_loadable_module_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_interface_parent_get(swigCPtr); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + } + + public switch_codec_interface next { + set { + freeswitchPINVOKE.switch_codec_interface_next_set(swigCPtr, switch_codec_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_codec_interface_next_get(swigCPtr); + switch_codec_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_codec_interface(cPtr, false); + return ret; + } + } + + public switch_codec_interface() : this(freeswitchPINVOKE.new_switch_codec_interface(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_codec_settings : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_codec_settings(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_codec_settings obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_codec_settings() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_codec_settings(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public int quality { + set { + freeswitchPINVOKE.switch_codec_settings_quality_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_settings_quality_get(swigCPtr); + return ret; + } + } + + public int complexity { + set { + freeswitchPINVOKE.switch_codec_settings_complexity_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_settings_complexity_get(swigCPtr); + return ret; + } + } + + public int enhancement { + set { + freeswitchPINVOKE.switch_codec_settings_enhancement_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_settings_enhancement_get(swigCPtr); + return ret; + } + } + + public int vad { + set { + freeswitchPINVOKE.switch_codec_settings_vad_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_settings_vad_get(swigCPtr); + return ret; + } + } + + public int vbr { + set { + freeswitchPINVOKE.switch_codec_settings_vbr_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_settings_vbr_get(swigCPtr); + return ret; + } + } + + public float vbr_quality { + set { + freeswitchPINVOKE.switch_codec_settings_vbr_quality_set(swigCPtr, value); + } + get { + float ret = freeswitchPINVOKE.switch_codec_settings_vbr_quality_get(swigCPtr); + return ret; + } + } + + public int abr { + set { + freeswitchPINVOKE.switch_codec_settings_abr_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_settings_abr_get(swigCPtr); + return ret; + } + } + + public int dtx { + set { + freeswitchPINVOKE.switch_codec_settings_dtx_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_settings_dtx_get(swigCPtr); + return ret; + } + } + + public int preproc { + set { + freeswitchPINVOKE.switch_codec_settings_preproc_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_settings_preproc_get(swigCPtr); + return ret; + } + } + + public int pp_vad { + set { + freeswitchPINVOKE.switch_codec_settings_pp_vad_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_settings_pp_vad_get(swigCPtr); + return ret; + } + } + + public int pp_agc { + set { + freeswitchPINVOKE.switch_codec_settings_pp_agc_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_settings_pp_agc_get(swigCPtr); + return ret; + } + } + + public float pp_agc_level { + set { + freeswitchPINVOKE.switch_codec_settings_pp_agc_level_set(swigCPtr, value); + } + get { + float ret = freeswitchPINVOKE.switch_codec_settings_pp_agc_level_get(swigCPtr); + return ret; + } + } + + public int pp_denoise { + set { + freeswitchPINVOKE.switch_codec_settings_pp_denoise_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_settings_pp_denoise_get(swigCPtr); + return ret; + } + } + + public int pp_dereverb { + set { + freeswitchPINVOKE.switch_codec_settings_pp_dereverb_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_codec_settings_pp_dereverb_get(swigCPtr); + return ret; + } + } + + public float pp_dereverb_decay { + set { + freeswitchPINVOKE.switch_codec_settings_pp_dereverb_decay_set(swigCPtr, value); + } + get { + float ret = freeswitchPINVOKE.switch_codec_settings_pp_dereverb_decay_get(swigCPtr); + return ret; + } + } + + public float pp_dereverb_level { + set { + freeswitchPINVOKE.switch_codec_settings_pp_dereverb_level_set(swigCPtr, value); + } + get { + float ret = freeswitchPINVOKE.switch_codec_settings_pp_dereverb_level_get(swigCPtr); + return ret; + } + } + + public switch_codec_settings() : this(freeswitchPINVOKE.new_switch_codec_settings(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_codec_type_t { + SWITCH_CODEC_TYPE_AUDIO, + SWITCH_CODEC_TYPE_VIDEO, + SWITCH_CODEC_TYPE_T38, + SWITCH_CODEC_TYPE_APP +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_config : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_config(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_config obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_config() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_config(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_FILE file { + set { + freeswitchPINVOKE.switch_config_file_set(swigCPtr, SWIGTYPE_p_FILE.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_config_file_get(swigCPtr); + SWIGTYPE_p_FILE ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_FILE(cPtr, false); + return ret; + } + } + + public string path { + set { + freeswitchPINVOKE.switch_config_path_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_config_path_get(swigCPtr); + return ret; + } + } + + public string category { + set { + freeswitchPINVOKE.switch_config_category_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_config_category_get(swigCPtr); + return ret; + } + } + + public string section { + set { + freeswitchPINVOKE.switch_config_section_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_config_section_get(swigCPtr); + return ret; + } + } + + public string buf { + set { + freeswitchPINVOKE.switch_config_buf_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_config_buf_get(swigCPtr); + return ret; + } + } + + public int lineno { + set { + freeswitchPINVOKE.switch_config_lineno_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_config_lineno_get(swigCPtr); + return ret; + } + } + + public int catno { + set { + freeswitchPINVOKE.switch_config_catno_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_config_catno_get(swigCPtr); + return ret; + } + } + + public int sectno { + set { + freeswitchPINVOKE.switch_config_sectno_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_config_sectno_get(swigCPtr); + return ret; + } + } + + public int lockto { + set { + freeswitchPINVOKE.switch_config_lockto_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_config_lockto_get(swigCPtr); + return ret; + } + } + + public switch_config() : this(freeswitchPINVOKE.new_switch_config(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_console_callback_match : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_console_callback_match(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_console_callback_match obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_console_callback_match() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_console_callback_match(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public switch_console_callback_match_node head { + set { + freeswitchPINVOKE.switch_console_callback_match_head_set(swigCPtr, switch_console_callback_match_node.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_console_callback_match_head_get(swigCPtr); + switch_console_callback_match_node ret = (cPtr == IntPtr.Zero) ? null : new switch_console_callback_match_node(cPtr, false); + return ret; + } + } + + public switch_console_callback_match_node end { + set { + freeswitchPINVOKE.switch_console_callback_match_end_set(swigCPtr, switch_console_callback_match_node.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_console_callback_match_end_get(swigCPtr); + switch_console_callback_match_node ret = (cPtr == IntPtr.Zero) ? null : new switch_console_callback_match_node(cPtr, false); + return ret; + } + } + + public int count { + set { + freeswitchPINVOKE.switch_console_callback_match_count_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_console_callback_match_count_get(swigCPtr); + return ret; + } + } + + public int dynamic { + set { + freeswitchPINVOKE.switch_console_callback_match_dynamic_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_console_callback_match_dynamic_get(swigCPtr); + return ret; + } + } + + public switch_console_callback_match() : this(freeswitchPINVOKE.new_switch_console_callback_match(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_console_callback_match_node : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_console_callback_match_node(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_console_callback_match_node obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_console_callback_match_node() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_console_callback_match_node(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string val { + set { + freeswitchPINVOKE.switch_console_callback_match_node_val_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_console_callback_match_node_val_get(swigCPtr); + return ret; + } + } + + public switch_console_callback_match_node next { + set { + freeswitchPINVOKE.switch_console_callback_match_node_next_set(swigCPtr, switch_console_callback_match_node.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_console_callback_match_node_next_get(swigCPtr); + switch_console_callback_match_node ret = (cPtr == IntPtr.Zero) ? null : new switch_console_callback_match_node(cPtr, false); + return ret; + } + } + + public switch_console_callback_match_node() : this(freeswitchPINVOKE.new_switch_console_callback_match_node(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_core_flag_enum_t { + SCF_NONE = 0, + SCF_USE_SQL = (1 << 0), + SCF_NO_NEW_SESSIONS = (1 << 1), + SCF_SHUTTING_DOWN = (1 << 2), + SCF_VG = (1 << 3), + SCF_RESTART = (1 << 4), + SCF_SHUTDOWN_REQUESTED = (1 << 5), + SCF_USE_AUTO_NAT = (1 << 6), + SCF_EARLY_HANGUP = (1 << 7), + SCF_CALIBRATE_CLOCK = (1 << 8), + SCF_USE_HEAVY_TIMING = (1 << 9), + SCF_USE_CLOCK_RT = (1 << 10), + SCF_VERBOSE_EVENTS = (1 << 11) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_core_session_message : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_core_session_message(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_core_session_message obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_core_session_message() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_core_session_message(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string from { + set { + freeswitchPINVOKE.switch_core_session_message_from_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_core_session_message_from_get(swigCPtr); + return ret; + } + } + + public switch_core_session_message_types_t message_id { + set { + freeswitchPINVOKE.switch_core_session_message_message_id_set(swigCPtr, (int)value); + } + get { + switch_core_session_message_types_t ret = (switch_core_session_message_types_t)freeswitchPINVOKE.switch_core_session_message_message_id_get(swigCPtr); + return ret; + } + } + + public int numeric_arg { + set { + freeswitchPINVOKE.switch_core_session_message_numeric_arg_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_core_session_message_numeric_arg_get(swigCPtr); + return ret; + } + } + + public string string_arg { + set { + freeswitchPINVOKE.switch_core_session_message_string_arg_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_core_session_message_string_arg_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t string_arg_size { + set { + freeswitchPINVOKE.switch_core_session_message_string_arg_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_core_session_message_string_arg_size_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_void pointer_arg { + set { + freeswitchPINVOKE.switch_core_session_message_pointer_arg_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_message_pointer_arg_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t pointer_arg_size { + set { + freeswitchPINVOKE.switch_core_session_message_pointer_arg_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_core_session_message_pointer_arg_size_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public int numeric_reply { + set { + freeswitchPINVOKE.switch_core_session_message_numeric_reply_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_core_session_message_numeric_reply_get(swigCPtr); + return ret; + } + } + + public string string_reply { + set { + freeswitchPINVOKE.switch_core_session_message_string_reply_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_core_session_message_string_reply_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t string_reply_size { + set { + freeswitchPINVOKE.switch_core_session_message_string_reply_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_core_session_message_string_reply_size_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_void pointer_reply { + set { + freeswitchPINVOKE.switch_core_session_message_pointer_reply_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_message_pointer_reply_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t pointer_reply_size { + set { + freeswitchPINVOKE.switch_core_session_message_pointer_reply_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_core_session_message_pointer_reply_size_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public uint flags { + set { + freeswitchPINVOKE.switch_core_session_message_flags_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_core_session_message_flags_get(swigCPtr); + return ret; + } + } + + public string _file { + set { + freeswitchPINVOKE.switch_core_session_message__file_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_core_session_message__file_get(swigCPtr); + return ret; + } + } + + public string _func { + set { + freeswitchPINVOKE.switch_core_session_message__func_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_core_session_message__func_get(swigCPtr); + return ret; + } + } + + public int _line { + set { + freeswitchPINVOKE.switch_core_session_message__line_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_core_session_message__line_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_p_char string_array_arg { + set { + freeswitchPINVOKE.switch_core_session_message_string_array_arg_set(swigCPtr, SWIGTYPE_p_p_char.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_core_session_message_string_array_arg_get(swigCPtr); + SWIGTYPE_p_p_char ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_p_char(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_time_t delivery_time { + set { + freeswitchPINVOKE.switch_core_session_message_delivery_time_set(swigCPtr, SWIGTYPE_p_time_t.getCPtr(value)); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + } + get { + SWIGTYPE_p_time_t ret = new SWIGTYPE_p_time_t(freeswitchPINVOKE.switch_core_session_message_delivery_time_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public switch_core_session_message() : this(freeswitchPINVOKE.new_switch_core_session_message(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_core_session_message_flag_enum_t { + SCSMF_DYNAMIC = (1 << 0), + SCSMF_FREE_STRING_REPLY = (1 << 1), + SCSMF_FREE_POINTER_REPLY = (1 << 2) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_core_session_message_types_t { + SWITCH_MESSAGE_REDIRECT_AUDIO, + SWITCH_MESSAGE_TRANSMIT_TEXT, + SWITCH_MESSAGE_INDICATE_ANSWER, + SWITCH_MESSAGE_INDICATE_PROGRESS, + SWITCH_MESSAGE_INDICATE_BRIDGE, + SWITCH_MESSAGE_INDICATE_UNBRIDGE, + SWITCH_MESSAGE_INDICATE_TRANSFER, + SWITCH_MESSAGE_INDICATE_RINGING, + SWITCH_MESSAGE_INDICATE_MEDIA, + SWITCH_MESSAGE_INDICATE_NOMEDIA, + SWITCH_MESSAGE_INDICATE_HOLD, + SWITCH_MESSAGE_INDICATE_UNHOLD, + SWITCH_MESSAGE_INDICATE_REDIRECT, + SWITCH_MESSAGE_INDICATE_RESPOND, + SWITCH_MESSAGE_INDICATE_BROADCAST, + SWITCH_MESSAGE_INDICATE_MEDIA_REDIRECT, + SWITCH_MESSAGE_INDICATE_DEFLECT, + SWITCH_MESSAGE_INDICATE_VIDEO_REFRESH_REQ, + SWITCH_MESSAGE_INDICATE_DISPLAY, + SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY, + SWITCH_MESSAGE_INDICATE_AUDIO_SYNC, + SWITCH_MESSAGE_INDICATE_REQUEST_IMAGE_MEDIA, + SWITCH_MESSAGE_INDICATE_UUID_CHANGE, + SWITCH_MESSAGE_INDICATE_SIMPLIFY, + SWITCH_MESSAGE_INDICATE_DEBUG_AUDIO, + SWITCH_MESSAGE_INDICATE_PROXY_MEDIA, + SWITCH_MESSAGE_INDICATE_APPLICATION_EXEC, + SWITCH_MESSAGE_INDICATE_APPLICATION_EXEC_COMPLETE, + SWITCH_MESSAGE_INDICATE_PHONE_EVENT, + SWITCH_MESSAGE_INDICATE_T38_DESCRIPTION, + SWITCH_MESSAGE_INDICATE_UDPTL_MODE, + SWITCH_MESSAGE_INDICATE_CLEAR_PROGRESS, + SWITCH_MESSAGE_INVALID +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_core_thread_session : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_core_thread_session(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_core_thread_session obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_core_thread_session() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_core_thread_session(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public int running { + set { + freeswitchPINVOKE.switch_core_thread_session_running_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_core_thread_session_running_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t mutex { + set { + freeswitchPINVOKE.switch_core_thread_session_mutex_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_core_thread_session_mutex_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_p_void objs { + set { + freeswitchPINVOKE.switch_core_thread_session_objs_set(swigCPtr, SWIGTYPE_p_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_core_thread_session_objs_get(swigCPtr); + SWIGTYPE_p_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_p_void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_void_enum_switch_input_type_t_p_void_unsigned_int__switch_status_t input_callback { + set { + freeswitchPINVOKE.switch_core_thread_session_input_callback_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_void_enum_switch_input_type_t_p_void_unsigned_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_core_thread_session_input_callback_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_void_enum_switch_input_type_t_p_void_unsigned_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_void_enum_switch_input_type_t_p_void_unsigned_int__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_apr_pool_t pool { + set { + freeswitchPINVOKE.switch_core_thread_session_pool_set(swigCPtr, SWIGTYPE_p_apr_pool_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_core_thread_session_pool_get(swigCPtr); + SWIGTYPE_p_apr_pool_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_apr_pool_t(cPtr, false); + return ret; + } + } + + public switch_core_thread_session() : this(freeswitchPINVOKE.new_switch_core_thread_session(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_core_time_duration : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_core_time_duration(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_core_time_duration obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_core_time_duration() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_core_time_duration(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public uint mms { + set { + freeswitchPINVOKE.switch_core_time_duration_mms_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_core_time_duration_mms_get(swigCPtr); + return ret; + } + } + + public uint ms { + set { + freeswitchPINVOKE.switch_core_time_duration_ms_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_core_time_duration_ms_get(swigCPtr); + return ret; + } + } + + public uint sec { + set { + freeswitchPINVOKE.switch_core_time_duration_sec_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_core_time_duration_sec_get(swigCPtr); + return ret; + } + } + + public uint min { + set { + freeswitchPINVOKE.switch_core_time_duration_min_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_core_time_duration_min_get(swigCPtr); + return ret; + } + } + + public uint hr { + set { + freeswitchPINVOKE.switch_core_time_duration_hr_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_core_time_duration_hr_get(swigCPtr); + return ret; + } + } + + public uint day { + set { + freeswitchPINVOKE.switch_core_time_duration_day_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_core_time_duration_day_get(swigCPtr); + return ret; + } + } + + public uint yr { + set { + freeswitchPINVOKE.switch_core_time_duration_yr_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_core_time_duration_yr_get(swigCPtr); + return ret; + } + } + + public switch_core_time_duration() : this(freeswitchPINVOKE.new_switch_core_time_duration(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_dialplan_interface : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_dialplan_interface(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_dialplan_interface obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_dialplan_interface() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_dialplan_interface(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string interface_name { + set { + freeswitchPINVOKE.switch_dialplan_interface_interface_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_dialplan_interface_interface_name_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_t_p_void_p_switch_caller_profile_t__p_switch_caller_extension hunt_function { + set { + freeswitchPINVOKE.switch_dialplan_interface_hunt_function_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_t_p_void_p_switch_caller_profile_t__p_switch_caller_extension.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_dialplan_interface_hunt_function_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_t_p_void_p_switch_caller_profile_t__p_switch_caller_extension ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_t_p_void_p_switch_caller_profile_t__p_switch_caller_extension(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { + set { + freeswitchPINVOKE.switch_dialplan_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_dialplan_interface_rwlock_get(swigCPtr); + SWIGTYPE_p_switch_thread_rwlock_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_thread_rwlock_t(cPtr, false); + return ret; + } + } + + public int refs { + set { + freeswitchPINVOKE.switch_dialplan_interface_refs_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_dialplan_interface_refs_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t reflock { + set { + freeswitchPINVOKE.switch_dialplan_interface_reflock_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_dialplan_interface_reflock_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_loadable_module_interface parent { + set { + freeswitchPINVOKE.switch_dialplan_interface_parent_set(swigCPtr, SWIGTYPE_p_switch_loadable_module_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_dialplan_interface_parent_get(swigCPtr); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + } + + public switch_dialplan_interface next { + set { + freeswitchPINVOKE.switch_dialplan_interface_next_set(swigCPtr, switch_dialplan_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_dialplan_interface_next_get(swigCPtr); + switch_dialplan_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_dialplan_interface(cPtr, false); + return ret; + } + } + + public switch_dialplan_interface() : this(freeswitchPINVOKE.new_switch_dialplan_interface(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_directories : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_directories(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_directories obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_directories() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_directories(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string base_dir { + set { + freeswitchPINVOKE.switch_directories_base_dir_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_directories_base_dir_get(swigCPtr); + return ret; + } + } + + public string mod_dir { + set { + freeswitchPINVOKE.switch_directories_mod_dir_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_directories_mod_dir_get(swigCPtr); + return ret; + } + } + + public string conf_dir { + set { + freeswitchPINVOKE.switch_directories_conf_dir_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_directories_conf_dir_get(swigCPtr); + return ret; + } + } + + public string log_dir { + set { + freeswitchPINVOKE.switch_directories_log_dir_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_directories_log_dir_get(swigCPtr); + return ret; + } + } + + public string run_dir { + set { + freeswitchPINVOKE.switch_directories_run_dir_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_directories_run_dir_get(swigCPtr); + return ret; + } + } + + public string db_dir { + set { + freeswitchPINVOKE.switch_directories_db_dir_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_directories_db_dir_get(swigCPtr); + return ret; + } + } + + public string script_dir { + set { + freeswitchPINVOKE.switch_directories_script_dir_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_directories_script_dir_get(swigCPtr); + return ret; + } + } + + public string temp_dir { + set { + freeswitchPINVOKE.switch_directories_temp_dir_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_directories_temp_dir_get(swigCPtr); + return ret; + } + } + + public string htdocs_dir { + set { + freeswitchPINVOKE.switch_directories_htdocs_dir_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_directories_htdocs_dir_get(swigCPtr); + return ret; + } + } + + public string grammar_dir { + set { + freeswitchPINVOKE.switch_directories_grammar_dir_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_directories_grammar_dir_get(swigCPtr); + return ret; + } + } + + public string storage_dir { + set { + freeswitchPINVOKE.switch_directories_storage_dir_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_directories_storage_dir_get(swigCPtr); + return ret; + } + } + + public string recordings_dir { + set { + freeswitchPINVOKE.switch_directories_recordings_dir_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_directories_recordings_dir_get(swigCPtr); + return ret; + } + } + + public string sounds_dir { + set { + freeswitchPINVOKE.switch_directories_sounds_dir_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_directories_sounds_dir_get(swigCPtr); + return ret; + } + } + + public switch_directories() : this(freeswitchPINVOKE.new_switch_directories(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_directory_flag_enum_t { + SWITCH_DIRECTORY_FLAG_FREE_POOL = (1 << 0) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_directory_handle : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_directory_handle(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_directory_handle obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_directory_handle() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_directory_handle(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public switch_directory_interface directory_interface { + set { + freeswitchPINVOKE.switch_directory_handle_directory_interface_set(swigCPtr, switch_directory_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_directory_handle_directory_interface_get(swigCPtr); + switch_directory_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_directory_interface(cPtr, false); + return ret; + } + } + + public uint flags { + set { + freeswitchPINVOKE.switch_directory_handle_flags_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_directory_handle_flags_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_apr_pool_t memory_pool { + set { + freeswitchPINVOKE.switch_directory_handle_memory_pool_set(swigCPtr, SWIGTYPE_p_apr_pool_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_directory_handle_memory_pool_get(swigCPtr); + SWIGTYPE_p_apr_pool_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_apr_pool_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_void private_info { + set { + freeswitchPINVOKE.switch_directory_handle_private_info_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_directory_handle_private_info_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public switch_directory_handle() : this(freeswitchPINVOKE.new_switch_directory_handle(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_directory_interface : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_directory_interface(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_directory_interface obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_directory_interface() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_directory_interface(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string interface_name { + set { + freeswitchPINVOKE.switch_directory_interface_interface_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_directory_interface_interface_name_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_directory_handle_p_char_p_char_p_char__switch_status_t directory_open { + set { + freeswitchPINVOKE.switch_directory_interface_directory_open_set(swigCPtr, SWIGTYPE_p_f_p_switch_directory_handle_p_char_p_char_p_char__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_directory_interface_directory_open_get(swigCPtr); + SWIGTYPE_p_f_p_switch_directory_handle_p_char_p_char_p_char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_directory_handle_p_char_p_char_p_char__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_directory_handle__switch_status_t directory_close { + set { + freeswitchPINVOKE.switch_directory_interface_directory_close_set(swigCPtr, SWIGTYPE_p_f_p_switch_directory_handle__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_directory_interface_directory_close_get(swigCPtr); + SWIGTYPE_p_f_p_switch_directory_handle__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_directory_handle__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_directory_handle_p_char_p_char__switch_status_t directory_query { + set { + freeswitchPINVOKE.switch_directory_interface_directory_query_set(swigCPtr, SWIGTYPE_p_f_p_switch_directory_handle_p_char_p_char__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_directory_interface_directory_query_get(swigCPtr); + SWIGTYPE_p_f_p_switch_directory_handle_p_char_p_char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_directory_handle_p_char_p_char__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_directory_handle__switch_status_t directory_next { + set { + freeswitchPINVOKE.switch_directory_interface_directory_next_set(swigCPtr, SWIGTYPE_p_f_p_switch_directory_handle__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_directory_interface_directory_next_get(swigCPtr); + SWIGTYPE_p_f_p_switch_directory_handle__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_directory_handle__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_directory_handle_p_p_char_p_p_char__switch_status_t directory_next_pair { + set { + freeswitchPINVOKE.switch_directory_interface_directory_next_pair_set(swigCPtr, SWIGTYPE_p_f_p_switch_directory_handle_p_p_char_p_p_char__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_directory_interface_directory_next_pair_get(swigCPtr); + SWIGTYPE_p_f_p_switch_directory_handle_p_p_char_p_p_char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_directory_handle_p_p_char_p_p_char__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { + set { + freeswitchPINVOKE.switch_directory_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_directory_interface_rwlock_get(swigCPtr); + SWIGTYPE_p_switch_thread_rwlock_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_thread_rwlock_t(cPtr, false); + return ret; + } + } + + public int refs { + set { + freeswitchPINVOKE.switch_directory_interface_refs_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_directory_interface_refs_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t reflock { + set { + freeswitchPINVOKE.switch_directory_interface_reflock_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_directory_interface_reflock_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_loadable_module_interface parent { + set { + freeswitchPINVOKE.switch_directory_interface_parent_set(swigCPtr, SWIGTYPE_p_switch_loadable_module_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_directory_interface_parent_get(swigCPtr); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + } + + public switch_directory_interface next { + set { + freeswitchPINVOKE.switch_directory_interface_next_set(swigCPtr, switch_directory_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_directory_interface_next_get(swigCPtr); + switch_directory_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_directory_interface(cPtr, false); + return ret; + } + } + + public switch_directory_interface() : this(freeswitchPINVOKE.new_switch_directory_interface(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_dtmf_direction_t { + SWITCH_DTMF_RECV = 0, + SWITCH_DTMF_SEND = 1 +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_dtmf_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_dtmf_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_dtmf_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_dtmf_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_dtmf_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public char digit { + set { + freeswitchPINVOKE.switch_dtmf_t_digit_set(swigCPtr, value); + } + get { + char ret = freeswitchPINVOKE.switch_dtmf_t_digit_get(swigCPtr); + return ret; + } + } + + public uint duration { + set { + freeswitchPINVOKE.switch_dtmf_t_duration_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_dtmf_t_duration_get(swigCPtr); + return ret; + } + } + + public switch_dtmf_t() : this(freeswitchPINVOKE.new_switch_dtmf_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_eavesdrop_flag_enum_t { + ED_NONE = 0, + ED_MUX_READ = (1 << 0), + ED_MUX_WRITE = (1 << 1), + ED_DTMF = (1 << 2) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_endpoint_interface : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_endpoint_interface(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_endpoint_interface obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_endpoint_interface() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_endpoint_interface(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string interface_name { + set { + freeswitchPINVOKE.switch_endpoint_interface_interface_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_endpoint_interface_interface_name_get(swigCPtr); + return ret; + } + } + + public switch_io_routines io_routines { + set { + freeswitchPINVOKE.switch_endpoint_interface_io_routines_set(swigCPtr, switch_io_routines.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_endpoint_interface_io_routines_get(swigCPtr); + switch_io_routines ret = (cPtr == IntPtr.Zero) ? null : new switch_io_routines(cPtr, false); + return ret; + } + } + + public switch_state_handler_table state_handler { + set { + freeswitchPINVOKE.switch_endpoint_interface_state_handler_set(swigCPtr, switch_state_handler_table.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_endpoint_interface_state_handler_get(swigCPtr); + switch_state_handler_table ret = (cPtr == IntPtr.Zero) ? null : new switch_state_handler_table(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_void private_info { + set { + freeswitchPINVOKE.switch_endpoint_interface_private_info_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_endpoint_interface_private_info_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { + set { + freeswitchPINVOKE.switch_endpoint_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_endpoint_interface_rwlock_get(swigCPtr); + SWIGTYPE_p_switch_thread_rwlock_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_thread_rwlock_t(cPtr, false); + return ret; + } + } + + public int refs { + set { + freeswitchPINVOKE.switch_endpoint_interface_refs_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_endpoint_interface_refs_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t reflock { + set { + freeswitchPINVOKE.switch_endpoint_interface_reflock_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_endpoint_interface_reflock_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_loadable_module_interface parent { + set { + freeswitchPINVOKE.switch_endpoint_interface_parent_set(swigCPtr, SWIGTYPE_p_switch_loadable_module_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_endpoint_interface_parent_get(swigCPtr); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + } + + public switch_endpoint_interface next { + set { + freeswitchPINVOKE.switch_endpoint_interface_next_set(swigCPtr, switch_endpoint_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_endpoint_interface_next_get(swigCPtr); + switch_endpoint_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_endpoint_interface(cPtr, false); + return ret; + } + } + + public switch_endpoint_interface() : this(freeswitchPINVOKE.new_switch_endpoint_interface(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_event : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_event(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_event obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_event() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_event(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public switch_event_types_t event_id { + set { + freeswitchPINVOKE.switch_event_event_id_set(swigCPtr, (int)value); + } + get { + switch_event_types_t ret = (switch_event_types_t)freeswitchPINVOKE.switch_event_event_id_get(swigCPtr); + return ret; + } + } + + public switch_priority_t priority { + set { + freeswitchPINVOKE.switch_event_priority_set(swigCPtr, (int)value); + } + get { + switch_priority_t ret = (switch_priority_t)freeswitchPINVOKE.switch_event_priority_get(swigCPtr); + return ret; + } + } + + public string owner { + set { + freeswitchPINVOKE.switch_event_owner_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_event_owner_get(swigCPtr); + return ret; + } + } + + public string subclass_name { + set { + freeswitchPINVOKE.switch_event_subclass_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_event_subclass_name_get(swigCPtr); + return ret; + } + } + + public switch_event_header headers { + set { + freeswitchPINVOKE.switch_event_headers_set(swigCPtr, switch_event_header.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_event_headers_get(swigCPtr); + switch_event_header ret = (cPtr == IntPtr.Zero) ? null : new switch_event_header(cPtr, false); + return ret; + } + } + + public switch_event_header last_header { + set { + freeswitchPINVOKE.switch_event_last_header_set(swigCPtr, switch_event_header.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_event_last_header_get(swigCPtr); + switch_event_header ret = (cPtr == IntPtr.Zero) ? null : new switch_event_header(cPtr, false); + return ret; + } + } + + public string body { + set { + freeswitchPINVOKE.switch_event_body_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_event_body_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_void bind_user_data { + set { + freeswitchPINVOKE.switch_event_bind_user_data_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_event_bind_user_data_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_void event_user_data { + set { + freeswitchPINVOKE.switch_event_event_user_data_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_event_event_user_data_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public uint key { + set { + freeswitchPINVOKE.switch_event_key_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_event_key_get(swigCPtr); + return ret; + } + } + + public switch_event next { + set { + freeswitchPINVOKE.switch_event_next_set(swigCPtr, switch_event.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_event_next_get(swigCPtr); + switch_event ret = (cPtr == IntPtr.Zero) ? null : new switch_event(cPtr, false); + return ret; + } + } + + public int flags { + set { + freeswitchPINVOKE.switch_event_flags_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_event_flags_get(swigCPtr); + return ret; + } + } + + public switch_event() : this(freeswitchPINVOKE.new_switch_event(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_event_flag_t { + EF_UNIQ_HEADERS = (1 << 0) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_event_header : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_event_header(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_event_header obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_event_header() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_event_header(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string name { + set { + freeswitchPINVOKE.switch_event_header_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_event_header_name_get(swigCPtr); + return ret; + } + } + + public string value { + set { + freeswitchPINVOKE.switch_event_header_value_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_event_header_value_get(swigCPtr); + return ret; + } + } + + public uint hash { + set { + freeswitchPINVOKE.switch_event_header_hash_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_event_header_hash_get(swigCPtr); + return ret; + } + } + + public switch_event_header next { + set { + freeswitchPINVOKE.switch_event_header_next_set(swigCPtr, switch_event_header.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_event_header_next_get(swigCPtr); + switch_event_header ret = (cPtr == IntPtr.Zero) ? null : new switch_event_header(cPtr, false); + return ret; + } + } + + public switch_event_header() : this(freeswitchPINVOKE.new_switch_event_header(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_event_types_t { + SWITCH_EVENT_CUSTOM, + SWITCH_EVENT_CLONE, + SWITCH_EVENT_CHANNEL_CREATE, + SWITCH_EVENT_CHANNEL_DESTROY, + SWITCH_EVENT_CHANNEL_STATE, + SWITCH_EVENT_CHANNEL_CALLSTATE, + SWITCH_EVENT_CHANNEL_ANSWER, + SWITCH_EVENT_CHANNEL_HANGUP, + SWITCH_EVENT_CHANNEL_HANGUP_COMPLETE, + SWITCH_EVENT_CHANNEL_EXECUTE, + SWITCH_EVENT_CHANNEL_EXECUTE_COMPLETE, + SWITCH_EVENT_CHANNEL_HOLD, + SWITCH_EVENT_CHANNEL_UNHOLD, + SWITCH_EVENT_CHANNEL_BRIDGE, + SWITCH_EVENT_CHANNEL_UNBRIDGE, + SWITCH_EVENT_CHANNEL_PROGRESS, + SWITCH_EVENT_CHANNEL_PROGRESS_MEDIA, + SWITCH_EVENT_CHANNEL_OUTGOING, + SWITCH_EVENT_CHANNEL_PARK, + SWITCH_EVENT_CHANNEL_UNPARK, + SWITCH_EVENT_CHANNEL_APPLICATION, + SWITCH_EVENT_CHANNEL_ORIGINATE, + SWITCH_EVENT_CHANNEL_UUID, + SWITCH_EVENT_API, + SWITCH_EVENT_LOG, + SWITCH_EVENT_INBOUND_CHAN, + SWITCH_EVENT_OUTBOUND_CHAN, + SWITCH_EVENT_STARTUP, + SWITCH_EVENT_SHUTDOWN, + SWITCH_EVENT_PUBLISH, + SWITCH_EVENT_UNPUBLISH, + SWITCH_EVENT_TALK, + SWITCH_EVENT_NOTALK, + SWITCH_EVENT_SESSION_CRASH, + SWITCH_EVENT_MODULE_LOAD, + SWITCH_EVENT_MODULE_UNLOAD, + SWITCH_EVENT_DTMF, + SWITCH_EVENT_MESSAGE, + SWITCH_EVENT_PRESENCE_IN, + SWITCH_EVENT_NOTIFY_IN, + SWITCH_EVENT_PRESENCE_OUT, + SWITCH_EVENT_PRESENCE_PROBE, + SWITCH_EVENT_MESSAGE_WAITING, + SWITCH_EVENT_MESSAGE_QUERY, + SWITCH_EVENT_ROSTER, + SWITCH_EVENT_CODEC, + SWITCH_EVENT_BACKGROUND_JOB, + SWITCH_EVENT_DETECTED_SPEECH, + SWITCH_EVENT_DETECTED_TONE, + SWITCH_EVENT_PRIVATE_COMMAND, + SWITCH_EVENT_HEARTBEAT, + SWITCH_EVENT_TRAP, + SWITCH_EVENT_ADD_SCHEDULE, + SWITCH_EVENT_DEL_SCHEDULE, + SWITCH_EVENT_EXE_SCHEDULE, + SWITCH_EVENT_RE_SCHEDULE, + SWITCH_EVENT_RELOADXML, + SWITCH_EVENT_NOTIFY, + SWITCH_EVENT_SEND_MESSAGE, + SWITCH_EVENT_RECV_MESSAGE, + SWITCH_EVENT_REQUEST_PARAMS, + SWITCH_EVENT_CHANNEL_DATA, + SWITCH_EVENT_GENERAL, + SWITCH_EVENT_COMMAND, + SWITCH_EVENT_SESSION_HEARTBEAT, + SWITCH_EVENT_CLIENT_DISCONNECTED, + SWITCH_EVENT_SERVER_DISCONNECTED, + SWITCH_EVENT_SEND_INFO, + SWITCH_EVENT_RECV_INFO, + SWITCH_EVENT_RECV_RTCP_MESSAGE, + SWITCH_EVENT_CALL_SECURE, + SWITCH_EVENT_NAT, + SWITCH_EVENT_RECORD_START, + SWITCH_EVENT_RECORD_STOP, + SWITCH_EVENT_CALL_UPDATE, + SWITCH_EVENT_FAILURE, + SWITCH_EVENT_SOCKET_DATA, + SWITCH_EVENT_MEDIA_BUG_START, + SWITCH_EVENT_MEDIA_BUG_STOP, + SWITCH_EVENT_ALL +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_file_flag_enum_t { + SWITCH_FILE_FLAG_READ = (1 << 0), + SWITCH_FILE_FLAG_WRITE = (1 << 1), + SWITCH_FILE_FLAG_FREE_POOL = (1 << 2), + SWITCH_FILE_DATA_SHORT = (1 << 3), + SWITCH_FILE_DATA_INT = (1 << 4), + SWITCH_FILE_DATA_FLOAT = (1 << 5), + SWITCH_FILE_DATA_DOUBLE = (1 << 6), + SWITCH_FILE_DATA_RAW = (1 << 7), + SWITCH_FILE_PAUSE = (1 << 8), + SWITCH_FILE_NATIVE = (1 << 9), + SWITCH_FILE_SEEK = (1 << 10), + SWITCH_FILE_OPEN = (1 << 11), + SWITCH_FILE_CALLBACK = (1 << 12), + SWITCH_FILE_DONE = (1 << 13), + SWITCH_FILE_BUFFER_DONE = (1 << 14), + SWITCH_FILE_WRITE_APPEND = (1 << 15) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_file_handle : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_file_handle(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_file_handle obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_file_handle() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_file_handle(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public switch_file_interface file_interface { + set { + freeswitchPINVOKE.switch_file_handle_file_interface_set(swigCPtr, switch_file_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_handle_file_interface_get(swigCPtr); + switch_file_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_file_interface(cPtr, false); + return ret; + } + } + + public uint flags { + set { + freeswitchPINVOKE.switch_file_handle_flags_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_file_handle_flags_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_file_t fd { + set { + freeswitchPINVOKE.switch_file_handle_fd_set(swigCPtr, SWIGTYPE_p_switch_file_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_handle_fd_get(swigCPtr); + SWIGTYPE_p_switch_file_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_file_t(cPtr, false); + return ret; + } + } + + public uint samples { + set { + freeswitchPINVOKE.switch_file_handle_samples_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_file_handle_samples_get(swigCPtr); + return ret; + } + } + + public uint samplerate { + set { + freeswitchPINVOKE.switch_file_handle_samplerate_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_file_handle_samplerate_get(swigCPtr); + return ret; + } + } + + public uint native_rate { + set { + freeswitchPINVOKE.switch_file_handle_native_rate_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_file_handle_native_rate_get(swigCPtr); + return ret; + } + } + + public byte channels { + set { + freeswitchPINVOKE.switch_file_handle_channels_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_file_handle_channels_get(swigCPtr); + return ret; + } + } + + public uint format { + set { + freeswitchPINVOKE.switch_file_handle_format_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_file_handle_format_get(swigCPtr); + return ret; + } + } + + public uint sections { + set { + freeswitchPINVOKE.switch_file_handle_sections_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_file_handle_sections_get(swigCPtr); + return ret; + } + } + + public int seekable { + set { + freeswitchPINVOKE.switch_file_handle_seekable_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_file_handle_seekable_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t sample_count { + set { + freeswitchPINVOKE.switch_file_handle_sample_count_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_file_handle_sample_count_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public int speed { + set { + freeswitchPINVOKE.switch_file_handle_speed_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_file_handle_speed_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_apr_pool_t memory_pool { + set { + freeswitchPINVOKE.switch_file_handle_memory_pool_set(swigCPtr, SWIGTYPE_p_apr_pool_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_handle_memory_pool_get(swigCPtr); + SWIGTYPE_p_apr_pool_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_apr_pool_t(cPtr, false); + return ret; + } + } + + public uint prebuf { + set { + freeswitchPINVOKE.switch_file_handle_prebuf_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_file_handle_prebuf_get(swigCPtr); + return ret; + } + } + + public uint interval { + set { + freeswitchPINVOKE.switch_file_handle_interval_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_file_handle_interval_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_void private_info { + set { + freeswitchPINVOKE.switch_file_handle_private_info_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_handle_private_info_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public string handler { + set { + freeswitchPINVOKE.switch_file_handle_handler_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_file_handle_handler_get(swigCPtr); + return ret; + } + } + + public long pos { + set { + freeswitchPINVOKE.switch_file_handle_pos_set(swigCPtr, value); + } + get { + long ret = freeswitchPINVOKE.switch_file_handle_pos_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_buffer audio_buffer { + set { + freeswitchPINVOKE.switch_file_handle_audio_buffer_set(swigCPtr, SWIGTYPE_p_switch_buffer.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_handle_audio_buffer_get(swigCPtr); + SWIGTYPE_p_switch_buffer ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_buffer(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_buffer sp_audio_buffer { + set { + freeswitchPINVOKE.switch_file_handle_sp_audio_buffer_set(swigCPtr, SWIGTYPE_p_switch_buffer.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_handle_sp_audio_buffer_get(swigCPtr); + SWIGTYPE_p_switch_buffer ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_buffer(cPtr, false); + return ret; + } + } + + public uint thresh { + set { + freeswitchPINVOKE.switch_file_handle_thresh_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_file_handle_thresh_get(swigCPtr); + return ret; + } + } + + public uint silence_hits { + set { + freeswitchPINVOKE.switch_file_handle_silence_hits_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_file_handle_silence_hits_get(swigCPtr); + return ret; + } + } + + public uint offset_pos { + set { + freeswitchPINVOKE.switch_file_handle_offset_pos_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_file_handle_offset_pos_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t samples_in { + set { + freeswitchPINVOKE.switch_file_handle_samples_in_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_file_handle_samples_in_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t samples_out { + set { + freeswitchPINVOKE.switch_file_handle_samples_out_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_file_handle_samples_out_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public int vol { + set { + freeswitchPINVOKE.switch_file_handle_vol_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_file_handle_vol_get(swigCPtr); + return ret; + } + } + + public switch_audio_resampler_t resampler { + set { + freeswitchPINVOKE.switch_file_handle_resampler_set(swigCPtr, switch_audio_resampler_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_handle_resampler_get(swigCPtr); + switch_audio_resampler_t ret = (cPtr == IntPtr.Zero) ? null : new switch_audio_resampler_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_buffer buffer { + set { + freeswitchPINVOKE.switch_file_handle_buffer_set(swigCPtr, SWIGTYPE_p_switch_buffer.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_handle_buffer_get(swigCPtr); + SWIGTYPE_p_switch_buffer ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_buffer(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_unsigned_char dbuf { + set { + freeswitchPINVOKE.switch_file_handle_dbuf_set(swigCPtr, SWIGTYPE_p_unsigned_char.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_handle_dbuf_get(swigCPtr); + SWIGTYPE_p_unsigned_char ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_char(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t dbuflen { + set { + freeswitchPINVOKE.switch_file_handle_dbuflen_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_file_handle_dbuflen_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_buffer pre_buffer { + set { + freeswitchPINVOKE.switch_file_handle_pre_buffer_set(swigCPtr, SWIGTYPE_p_switch_buffer.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_handle_pre_buffer_get(swigCPtr); + SWIGTYPE_p_switch_buffer ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_buffer(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_unsigned_char pre_buffer_data { + set { + freeswitchPINVOKE.switch_file_handle_pre_buffer_data_set(swigCPtr, SWIGTYPE_p_unsigned_char.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_handle_pre_buffer_data_get(swigCPtr); + SWIGTYPE_p_unsigned_char ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_char(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t pre_buffer_datalen { + set { + freeswitchPINVOKE.switch_file_handle_pre_buffer_datalen_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_file_handle_pre_buffer_datalen_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public string file { + set { + freeswitchPINVOKE.switch_file_handle_file_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_file_handle_file_get(swigCPtr); + return ret; + } + } + + public string func { + set { + freeswitchPINVOKE.switch_file_handle_func_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_file_handle_func_get(swigCPtr); + return ret; + } + } + + public int line { + set { + freeswitchPINVOKE.switch_file_handle_line_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_file_handle_line_get(swigCPtr); + return ret; + } + } + + public string file_path { + set { + freeswitchPINVOKE.switch_file_handle_file_path_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_file_handle_file_path_get(swigCPtr); + return ret; + } + } + + public string spool_path { + set { + freeswitchPINVOKE.switch_file_handle_spool_path_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_file_handle_spool_path_get(swigCPtr); + return ret; + } + } + + public string prefix { + set { + freeswitchPINVOKE.switch_file_handle_prefix_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_file_handle_prefix_get(swigCPtr); + return ret; + } + } + + public switch_file_handle() : this(freeswitchPINVOKE.new_switch_file_handle(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_file_interface : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_file_interface(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_file_interface obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_file_interface() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_file_interface(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string interface_name { + set { + freeswitchPINVOKE.switch_file_interface_interface_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_file_interface_interface_name_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_file_handle_p_q_const__char__switch_status_t file_open { + set { + freeswitchPINVOKE.switch_file_interface_file_open_set(swigCPtr, SWIGTYPE_p_f_p_switch_file_handle_p_q_const__char__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_interface_file_open_get(swigCPtr); + SWIGTYPE_p_f_p_switch_file_handle_p_q_const__char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_file_handle_p_q_const__char__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_file_handle__switch_status_t file_close { + set { + freeswitchPINVOKE.switch_file_interface_file_close_set(swigCPtr, SWIGTYPE_p_f_p_switch_file_handle__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_interface_file_close_get(swigCPtr); + SWIGTYPE_p_f_p_switch_file_handle__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_file_handle__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_file_handle_long_long__switch_status_t file_truncate { + set { + freeswitchPINVOKE.switch_file_interface_file_truncate_set(swigCPtr, SWIGTYPE_p_f_p_switch_file_handle_long_long__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_interface_file_truncate_get(swigCPtr); + SWIGTYPE_p_f_p_switch_file_handle_long_long__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_file_handle_long_long__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_file_handle_p_void_p_switch_size_t__switch_status_t file_read { + set { + freeswitchPINVOKE.switch_file_interface_file_read_set(swigCPtr, SWIGTYPE_p_f_p_switch_file_handle_p_void_p_switch_size_t__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_interface_file_read_get(swigCPtr); + SWIGTYPE_p_f_p_switch_file_handle_p_void_p_switch_size_t__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_file_handle_p_void_p_switch_size_t__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_file_handle_p_void_p_switch_size_t__switch_status_t file_write { + set { + freeswitchPINVOKE.switch_file_interface_file_write_set(swigCPtr, SWIGTYPE_p_f_p_switch_file_handle_p_void_p_switch_size_t__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_interface_file_write_get(swigCPtr); + SWIGTYPE_p_f_p_switch_file_handle_p_void_p_switch_size_t__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_file_handle_p_void_p_switch_size_t__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_file_handle_p_unsigned_int_long_long_int__switch_status_t file_seek { + set { + freeswitchPINVOKE.switch_file_interface_file_seek_set(swigCPtr, SWIGTYPE_p_f_p_switch_file_handle_p_unsigned_int_long_long_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_interface_file_seek_get(swigCPtr); + SWIGTYPE_p_f_p_switch_file_handle_p_unsigned_int_long_long_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_file_handle_p_unsigned_int_long_long_int__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_file_handle_enum_switch_audio_col_t_p_q_const__char__switch_status_t file_set_string { + set { + freeswitchPINVOKE.switch_file_interface_file_set_string_set(swigCPtr, SWIGTYPE_p_f_p_switch_file_handle_enum_switch_audio_col_t_p_q_const__char__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_interface_file_set_string_get(swigCPtr); + SWIGTYPE_p_f_p_switch_file_handle_enum_switch_audio_col_t_p_q_const__char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_file_handle_enum_switch_audio_col_t_p_q_const__char__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_file_handle_enum_switch_audio_col_t_p_p_q_const__char__switch_status_t file_get_string { + set { + freeswitchPINVOKE.switch_file_interface_file_get_string_set(swigCPtr, SWIGTYPE_p_f_p_switch_file_handle_enum_switch_audio_col_t_p_p_q_const__char__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_interface_file_get_string_get(swigCPtr); + SWIGTYPE_p_f_p_switch_file_handle_enum_switch_audio_col_t_p_p_q_const__char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_file_handle_enum_switch_audio_col_t_p_p_q_const__char__switch_status_t(cPtr, false); + return ret; + } + } + + public string extens { + set { freeswitchPINVOKE.switch_file_interface_extens_set(swigCPtr, ref value); } + + get { + return freeswitchPINVOKE.switch_file_interface_extens_get(swigCPtr); + } + + } + + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { + set { + freeswitchPINVOKE.switch_file_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_interface_rwlock_get(swigCPtr); + SWIGTYPE_p_switch_thread_rwlock_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_thread_rwlock_t(cPtr, false); + return ret; + } + } + + public int refs { + set { + freeswitchPINVOKE.switch_file_interface_refs_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_file_interface_refs_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t reflock { + set { + freeswitchPINVOKE.switch_file_interface_reflock_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_interface_reflock_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_loadable_module_interface parent { + set { + freeswitchPINVOKE.switch_file_interface_parent_set(swigCPtr, SWIGTYPE_p_switch_loadable_module_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_interface_parent_get(swigCPtr); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + } + + public switch_file_interface next { + set { + freeswitchPINVOKE.switch_file_interface_next_set(swigCPtr, switch_file_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_file_interface_next_get(swigCPtr); + switch_file_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_file_interface(cPtr, false); + return ret; + } + } + + public switch_file_interface() : this(freeswitchPINVOKE.new_switch_file_interface(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_frame : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_frame(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_frame obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_frame() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_frame(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public switch_codec codec { + set { + freeswitchPINVOKE.switch_frame_codec_set(swigCPtr, switch_codec.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_frame_codec_get(swigCPtr); + switch_codec ret = (cPtr == IntPtr.Zero) ? null : new switch_codec(cPtr, false); + return ret; + } + } + + public string source { + set { + freeswitchPINVOKE.switch_frame_source_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_frame_source_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_void packet { + set { + freeswitchPINVOKE.switch_frame_packet_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_frame_packet_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public uint packetlen { + set { + freeswitchPINVOKE.switch_frame_packetlen_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_frame_packetlen_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_void extra_data { + set { + freeswitchPINVOKE.switch_frame_extra_data_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_frame_extra_data_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_void data { + set { + freeswitchPINVOKE.switch_frame_data_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_frame_data_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public uint datalen { + set { + freeswitchPINVOKE.switch_frame_datalen_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_frame_datalen_get(swigCPtr); + return ret; + } + } + + public uint buflen { + set { + freeswitchPINVOKE.switch_frame_buflen_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_frame_buflen_get(swigCPtr); + return ret; + } + } + + public uint samples { + set { + freeswitchPINVOKE.switch_frame_samples_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_frame_samples_get(swigCPtr); + return ret; + } + } + + public uint rate { + set { + freeswitchPINVOKE.switch_frame_rate_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_frame_rate_get(swigCPtr); + return ret; + } + } + + public byte payload { + set { + freeswitchPINVOKE.switch_frame_payload_set(swigCPtr, value); + } + get { + byte ret = freeswitchPINVOKE.switch_frame_payload_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t timestamp { + set { + freeswitchPINVOKE.switch_frame_timestamp_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_frame_timestamp_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public ushort seq { + set { + freeswitchPINVOKE.switch_frame_seq_set(swigCPtr, value); + } + get { + ushort ret = freeswitchPINVOKE.switch_frame_seq_get(swigCPtr); + return ret; + } + } + + public uint ssrc { + set { + freeswitchPINVOKE.switch_frame_ssrc_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_frame_ssrc_get(swigCPtr); + return ret; + } + } + + public switch_bool_t m { + set { + freeswitchPINVOKE.switch_frame_m_set(swigCPtr, (int)value); + } + get { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_frame_m_get(swigCPtr); + return ret; + } + } + + public uint flags { + set { + freeswitchPINVOKE.switch_frame_flags_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_frame_flags_get(swigCPtr); + return ret; + } + } + + public switch_frame() : this(freeswitchPINVOKE.new_switch_frame(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_frame_flag_enum_t { + SFF_NONE = 0, + SFF_CNG = (1 << 0), + SFF_RAW_RTP = (1 << 1), + SFF_RTP_HEADER = (1 << 2), + SFF_PLC = (1 << 3), + SFF_RFC2833 = (1 << 4), + SFF_PROXY_PACKET = (1 << 5), + SFF_DYNAMIC = (1 << 6), + SFF_ZRTP = (1 << 7), + SFF_UDPTL_PACKET = (1 << 8) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_input_args_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_input_args_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_input_args_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_input_args_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_input_args_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_void_enum_switch_input_type_t_p_void_unsigned_int__switch_status_t input_callback { + set { + freeswitchPINVOKE.switch_input_args_t_input_callback_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_void_enum_switch_input_type_t_p_void_unsigned_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_input_args_t_input_callback_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_void_enum_switch_input_type_t_p_void_unsigned_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_void_enum_switch_input_type_t_p_void_unsigned_int__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_void buf { + set { + freeswitchPINVOKE.switch_input_args_t_buf_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_input_args_t_buf_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public uint buflen { + set { + freeswitchPINVOKE.switch_input_args_t_buflen_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_input_args_t_buflen_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_p_void__switch_status_t read_frame_callback { + set { + freeswitchPINVOKE.switch_input_args_t_read_frame_callback_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_p_void__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_input_args_t_read_frame_callback_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_p_void__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_p_void__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_void user_data { + set { + freeswitchPINVOKE.switch_input_args_t_user_data_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_input_args_t_user_data_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public switch_input_args_t() : this(freeswitchPINVOKE.new_switch_input_args_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_input_type_t { + SWITCH_INPUT_TYPE_DTMF, + SWITCH_INPUT_TYPE_EVENT +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_event_hooks : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_io_event_hooks(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_io_event_hooks obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_io_event_hooks() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_io_event_hooks(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public switch_io_event_hook_outgoing_channel outgoing_channel { + set { + freeswitchPINVOKE.switch_io_event_hooks_outgoing_channel_set(swigCPtr, switch_io_event_hook_outgoing_channel.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hooks_outgoing_channel_get(swigCPtr); + switch_io_event_hook_outgoing_channel ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_outgoing_channel(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_receive_message receive_message { + set { + freeswitchPINVOKE.switch_io_event_hooks_receive_message_set(swigCPtr, switch_io_event_hook_receive_message.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hooks_receive_message_get(swigCPtr); + switch_io_event_hook_receive_message ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_receive_message(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_receive_event receive_event { + set { + freeswitchPINVOKE.switch_io_event_hooks_receive_event_set(swigCPtr, switch_io_event_hook_receive_event.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hooks_receive_event_get(swigCPtr); + switch_io_event_hook_receive_event ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_receive_event(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_read_frame read_frame { + set { + freeswitchPINVOKE.switch_io_event_hooks_read_frame_set(swigCPtr, switch_io_event_hook_read_frame.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hooks_read_frame_get(swigCPtr); + switch_io_event_hook_read_frame ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_read_frame(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_video_read_frame video_read_frame { + set { + freeswitchPINVOKE.switch_io_event_hooks_video_read_frame_set(swigCPtr, switch_io_event_hook_video_read_frame.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hooks_video_read_frame_get(swigCPtr); + switch_io_event_hook_video_read_frame ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_video_read_frame(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_write_frame write_frame { + set { + freeswitchPINVOKE.switch_io_event_hooks_write_frame_set(swigCPtr, switch_io_event_hook_write_frame.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hooks_write_frame_get(swigCPtr); + switch_io_event_hook_write_frame ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_write_frame(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_video_write_frame video_write_frame { + set { + freeswitchPINVOKE.switch_io_event_hooks_video_write_frame_set(swigCPtr, switch_io_event_hook_video_write_frame.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hooks_video_write_frame_get(swigCPtr); + switch_io_event_hook_video_write_frame ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_video_write_frame(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_kill_channel kill_channel { + set { + freeswitchPINVOKE.switch_io_event_hooks_kill_channel_set(swigCPtr, switch_io_event_hook_kill_channel.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hooks_kill_channel_get(swigCPtr); + switch_io_event_hook_kill_channel ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_kill_channel(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_send_dtmf send_dtmf { + set { + freeswitchPINVOKE.switch_io_event_hooks_send_dtmf_set(swigCPtr, switch_io_event_hook_send_dtmf.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hooks_send_dtmf_get(swigCPtr); + switch_io_event_hook_send_dtmf ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_send_dtmf(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_recv_dtmf recv_dtmf { + set { + freeswitchPINVOKE.switch_io_event_hooks_recv_dtmf_set(swigCPtr, switch_io_event_hook_recv_dtmf.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hooks_recv_dtmf_get(swigCPtr); + switch_io_event_hook_recv_dtmf ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_recv_dtmf(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_state_change state_change { + set { + freeswitchPINVOKE.switch_io_event_hooks_state_change_set(swigCPtr, switch_io_event_hook_state_change.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hooks_state_change_get(swigCPtr); + switch_io_event_hook_state_change ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_state_change(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_resurrect_session resurrect_session { + set { + freeswitchPINVOKE.switch_io_event_hooks_resurrect_session_set(swigCPtr, switch_io_event_hook_resurrect_session.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hooks_resurrect_session_get(swigCPtr); + switch_io_event_hook_resurrect_session ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_resurrect_session(cPtr, false); + return ret; + } + } + + public switch_io_event_hooks() : this(freeswitchPINVOKE.new_switch_io_event_hooks(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_event_hook_kill_channel : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_io_event_hook_kill_channel(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_io_event_hook_kill_channel obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_io_event_hook_kill_channel() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_io_event_hook_kill_channel(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t kill_channel { + set { + freeswitchPINVOKE.switch_io_event_hook_kill_channel_kill_channel_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_kill_channel_kill_channel_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_kill_channel next { + set { + freeswitchPINVOKE.switch_io_event_hook_kill_channel_next_set(swigCPtr, switch_io_event_hook_kill_channel.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_kill_channel_next_get(swigCPtr); + switch_io_event_hook_kill_channel ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_kill_channel(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_kill_channel() : this(freeswitchPINVOKE.new_switch_io_event_hook_kill_channel(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_event_hook_outgoing_channel : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_io_event_hook_outgoing_channel(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_io_event_hook_outgoing_channel obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_io_event_hook_outgoing_channel() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_io_event_hook_outgoing_channel(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_unsigned_long__switch_status_t outgoing_channel { + set { + freeswitchPINVOKE.switch_io_event_hook_outgoing_channel_outgoing_channel_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_unsigned_long__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_outgoing_channel_outgoing_channel_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_unsigned_long__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_unsigned_long__switch_status_t(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_outgoing_channel next { + set { + freeswitchPINVOKE.switch_io_event_hook_outgoing_channel_next_set(swigCPtr, switch_io_event_hook_outgoing_channel.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_outgoing_channel_next_get(swigCPtr); + switch_io_event_hook_outgoing_channel ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_outgoing_channel(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_outgoing_channel() : this(freeswitchPINVOKE.new_switch_io_event_hook_outgoing_channel(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_event_hook_read_frame : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_io_event_hook_read_frame(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_io_event_hook_read_frame obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_io_event_hook_read_frame() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_io_event_hook_read_frame(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t read_frame { + set { + freeswitchPINVOKE.switch_io_event_hook_read_frame_read_frame_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_read_frame_read_frame_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_read_frame next { + set { + freeswitchPINVOKE.switch_io_event_hook_read_frame_next_set(swigCPtr, switch_io_event_hook_read_frame.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_read_frame_next_get(swigCPtr); + switch_io_event_hook_read_frame ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_read_frame(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_read_frame() : this(freeswitchPINVOKE.new_switch_io_event_hook_read_frame(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_event_hook_receive_event : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_io_event_hook_receive_event(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_io_event_hook_receive_event obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_io_event_hook_receive_event() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_io_event_hook_receive_event(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t receive_event { + set { + freeswitchPINVOKE.switch_io_event_hook_receive_event_receive_event_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_receive_event_receive_event_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_receive_event next { + set { + freeswitchPINVOKE.switch_io_event_hook_receive_event_next_set(swigCPtr, switch_io_event_hook_receive_event.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_receive_event_next_get(swigCPtr); + switch_io_event_hook_receive_event ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_receive_event(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_receive_event() : this(freeswitchPINVOKE.new_switch_io_event_hook_receive_event(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_event_hook_receive_message : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_io_event_hook_receive_message(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_io_event_hook_receive_message obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_io_event_hook_receive_message() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_io_event_hook_receive_message(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t receive_message { + set { + freeswitchPINVOKE.switch_io_event_hook_receive_message_receive_message_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_receive_message_receive_message_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_receive_message next { + set { + freeswitchPINVOKE.switch_io_event_hook_receive_message_next_set(swigCPtr, switch_io_event_hook_receive_message.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_receive_message_next_get(swigCPtr); + switch_io_event_hook_receive_message ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_receive_message(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_receive_message() : this(freeswitchPINVOKE.new_switch_io_event_hook_receive_message(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_event_hook_recv_dtmf : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_io_event_hook_recv_dtmf(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_io_event_hook_recv_dtmf obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_io_event_hook_recv_dtmf() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_io_event_hook_recv_dtmf(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t recv_dtmf { + set { + freeswitchPINVOKE.switch_io_event_hook_recv_dtmf_recv_dtmf_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_recv_dtmf_recv_dtmf_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_recv_dtmf next { + set { + freeswitchPINVOKE.switch_io_event_hook_recv_dtmf_next_set(swigCPtr, switch_io_event_hook_recv_dtmf.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_recv_dtmf_next_get(swigCPtr); + switch_io_event_hook_recv_dtmf ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_recv_dtmf(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_recv_dtmf() : this(freeswitchPINVOKE.new_switch_io_event_hook_recv_dtmf(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_event_hook_resurrect_session : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_io_event_hook_resurrect_session(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_io_event_hook_resurrect_session obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_io_event_hook_resurrect_session() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_io_event_hook_resurrect_session(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t resurrect_session { + set { + freeswitchPINVOKE.switch_io_event_hook_resurrect_session_resurrect_session_set(swigCPtr, SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_resurrect_session_resurrect_session_get(swigCPtr); + SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_resurrect_session next { + set { + freeswitchPINVOKE.switch_io_event_hook_resurrect_session_next_set(swigCPtr, switch_io_event_hook_resurrect_session.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_resurrect_session_next_get(swigCPtr); + switch_io_event_hook_resurrect_session ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_resurrect_session(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_resurrect_session() : this(freeswitchPINVOKE.new_switch_io_event_hook_resurrect_session(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_event_hook_send_dtmf : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_io_event_hook_send_dtmf(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_io_event_hook_send_dtmf obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_io_event_hook_send_dtmf() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_io_event_hook_send_dtmf(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t send_dtmf { + set { + freeswitchPINVOKE.switch_io_event_hook_send_dtmf_send_dtmf_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_send_dtmf_send_dtmf_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t_enum_switch_dtmf_direction_t__switch_status_t(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_send_dtmf next { + set { + freeswitchPINVOKE.switch_io_event_hook_send_dtmf_next_set(swigCPtr, switch_io_event_hook_send_dtmf.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_send_dtmf_next_get(swigCPtr); + switch_io_event_hook_send_dtmf ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_send_dtmf(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_send_dtmf() : this(freeswitchPINVOKE.new_switch_io_event_hook_send_dtmf(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_event_hook_state_change : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_io_event_hook_state_change(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_io_event_hook_state_change obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_io_event_hook_state_change() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_io_event_hook_state_change(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_core_session__switch_status_t state_change { + set { + freeswitchPINVOKE.switch_io_event_hook_state_change_state_change_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_state_change_state_change_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_state_change next { + set { + freeswitchPINVOKE.switch_io_event_hook_state_change_next_set(swigCPtr, switch_io_event_hook_state_change.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_state_change_next_get(swigCPtr); + switch_io_event_hook_state_change ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_state_change(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_state_change() : this(freeswitchPINVOKE.new_switch_io_event_hook_state_change(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_event_hook_video_read_frame : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_io_event_hook_video_read_frame(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_io_event_hook_video_read_frame obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_io_event_hook_video_read_frame() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_io_event_hook_video_read_frame(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t video_read_frame { + set { + freeswitchPINVOKE.switch_io_event_hook_video_read_frame_video_read_frame_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_video_read_frame_video_read_frame_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_video_read_frame next { + set { + freeswitchPINVOKE.switch_io_event_hook_video_read_frame_next_set(swigCPtr, switch_io_event_hook_video_read_frame.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_video_read_frame_next_get(swigCPtr); + switch_io_event_hook_video_read_frame ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_video_read_frame(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_video_read_frame() : this(freeswitchPINVOKE.new_switch_io_event_hook_video_read_frame(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_event_hook_video_write_frame : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_io_event_hook_video_write_frame(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_io_event_hook_video_write_frame obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_io_event_hook_video_write_frame() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_io_event_hook_video_write_frame(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t video_write_frame { + set { + freeswitchPINVOKE.switch_io_event_hook_video_write_frame_video_write_frame_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_video_write_frame_video_write_frame_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_video_write_frame next { + set { + freeswitchPINVOKE.switch_io_event_hook_video_write_frame_next_set(swigCPtr, switch_io_event_hook_video_write_frame.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_video_write_frame_next_get(swigCPtr); + switch_io_event_hook_video_write_frame ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_video_write_frame(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_video_write_frame() : this(freeswitchPINVOKE.new_switch_io_event_hook_video_write_frame(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_event_hook_write_frame : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_io_event_hook_write_frame(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_io_event_hook_write_frame obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_io_event_hook_write_frame() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_io_event_hook_write_frame(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t write_frame { + set { + freeswitchPINVOKE.switch_io_event_hook_write_frame_write_frame_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_write_frame_write_frame_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_write_frame next { + set { + freeswitchPINVOKE.switch_io_event_hook_write_frame_next_set(swigCPtr, switch_io_event_hook_write_frame.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_event_hook_write_frame_next_get(swigCPtr); + switch_io_event_hook_write_frame ret = (cPtr == IntPtr.Zero) ? null : new switch_io_event_hook_write_frame(cPtr, false); + return ret; + } + } + + public switch_io_event_hook_write_frame() : this(freeswitchPINVOKE.new_switch_io_event_hook_write_frame(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_flag_enum_t { + SWITCH_IO_FLAG_NONE = 0, + SWITCH_IO_FLAG_NOBLOCK = (1 << 0) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_io_routines : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_io_routines(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_io_routines obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_io_routines() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_io_routines(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_p_switch_core_session_p_p_apr_pool_t_unsigned_long_p_enum_switch_call_cause_t__switch_call_cause_t outgoing_channel { + set { + freeswitchPINVOKE.switch_io_routines_outgoing_channel_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_p_switch_core_session_p_p_apr_pool_t_unsigned_long_p_enum_switch_call_cause_t__switch_call_cause_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_routines_outgoing_channel_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_p_switch_core_session_p_p_apr_pool_t_unsigned_long_p_enum_switch_call_cause_t__switch_call_cause_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_p_switch_core_session_p_p_apr_pool_t_unsigned_long_p_enum_switch_call_cause_t__switch_call_cause_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t read_frame { + set { + freeswitchPINVOKE.switch_io_routines_read_frame_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_routines_read_frame_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t write_frame { + set { + freeswitchPINVOKE.switch_io_routines_write_frame_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_routines_write_frame_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t kill_channel { + set { + freeswitchPINVOKE.switch_io_routines_kill_channel_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_routines_kill_channel_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_int__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t__switch_status_t send_dtmf { + set { + freeswitchPINVOKE.switch_io_routines_send_dtmf_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_routines_send_dtmf_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_q_const__switch_dtmf_t__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t receive_message { + set { + freeswitchPINVOKE.switch_io_routines_receive_message_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_routines_receive_message_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_switch_core_session_message__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t receive_event { + set { + freeswitchPINVOKE.switch_io_routines_receive_event_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_routines_receive_event_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_switch_event__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session__switch_status_t state_change { + set { + freeswitchPINVOKE.switch_io_routines_state_change_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_routines_state_change_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t read_video_frame { + set { + freeswitchPINVOKE.switch_io_routines_read_video_frame_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_routines_read_video_frame_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t write_video_frame { + set { + freeswitchPINVOKE.switch_io_routines_write_video_frame_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_routines_write_video_frame_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t resurrect_session { + set { + freeswitchPINVOKE.switch_io_routines_resurrect_session_set(swigCPtr, SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_routines_resurrect_session_get(swigCPtr); + SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_p_switch_core_session_p_p_apr_pool_t_p_void__switch_call_cause_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_p_void padding { + set { + freeswitchPINVOKE.switch_io_routines_padding_set(swigCPtr, SWIGTYPE_p_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_io_routines_padding_get(swigCPtr); + SWIGTYPE_p_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_p_void(cPtr, false); + return ret; + } + } + + public switch_io_routines() : this(freeswitchPINVOKE.new_switch_io_routines(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_io_routine_name_t { + SWITCH_IO_OUTGOING_CHANNEL, + SWITCH_IO_READ_FRAME, + SWITCH_IO_WRITE_FRAME, + SWITCH_IO_KILL_CHANNEL, + SWITCH_IO_SEND_DTMF, + SWITCH_IO_RECEIVE_MESSAGE, + SWITCH_IO_RECEIVE_EVENT, + SWITCH_IO_STATE_CHANGE, + SWITCH_IO_READ_VIDEO_FRAME, + SWITCH_IO_WRITE_VIDEO_FRAME, + SWITCH_IO_RESURRECT_SESSION +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_ivr_action_t { + SWITCH_IVR_ACTION_DIE, + SWITCH_IVR_ACTION_EXECMENU, + SWITCH_IVR_ACTION_EXECAPP, + SWITCH_IVR_ACTION_PLAYSOUND, + SWITCH_IVR_ACTION_BACK, + SWITCH_IVR_ACTION_TOMAIN, + SWITCH_IVR_ACTION_NOOP +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_ivr_menu_flags { + SWITCH_IVR_MENU_FLAG_FALLTOMAIN = (1 << 0), + SWITCH_IVR_MENU_FLAG_FREEPOOL = (1 << 1), + SWITCH_IVR_MENU_FLAG_STACK = (1 << 2) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_ivr_option_enum_t { + SWITCH_IVR_OPTION_NONE = 0, + SWITCH_IVR_OPTION_ASYNC = (1 << 0), + SWITCH_IVR_OPTION_FILE = (1 << 1) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_limit_interface : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_limit_interface(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_limit_interface obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_limit_interface() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_limit_interface(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string interface_name { + set { + freeswitchPINVOKE.switch_limit_interface_interface_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_limit_interface_interface_name_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char_q_const__int_q_const__int__switch_status_t incr { + set { + freeswitchPINVOKE.switch_limit_interface_incr_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char_q_const__int_q_const__int__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_limit_interface_incr_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char_q_const__int_q_const__int__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char_q_const__int_q_const__int__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char__switch_status_t release { + set { + freeswitchPINVOKE.switch_limit_interface_release_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_limit_interface_release_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_q_const__char_p_q_const__char__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_unsigned_long__int usage { + set { + freeswitchPINVOKE.switch_limit_interface_usage_set(swigCPtr, SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_unsigned_long__int.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_limit_interface_usage_get(swigCPtr); + SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_unsigned_long__int ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_q_const__char_p_q_const__char_p_unsigned_long__int(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_void__switch_status_t reset { + set { + freeswitchPINVOKE.switch_limit_interface_reset_set(swigCPtr, SWIGTYPE_p_f_void__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_limit_interface_reset_get(swigCPtr); + SWIGTYPE_p_f_void__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_void__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_void__p_char status { + set { + freeswitchPINVOKE.switch_limit_interface_status_set(swigCPtr, SWIGTYPE_p_f_void__p_char.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_limit_interface_status_get(swigCPtr); + SWIGTYPE_p_f_void__p_char ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_void__p_char(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t interval_reset { + set { + freeswitchPINVOKE.switch_limit_interface_interval_reset_set(swigCPtr, SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_limit_interface_interval_reset_get(swigCPtr); + SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_q_const__char_p_q_const__char__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { + set { + freeswitchPINVOKE.switch_limit_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_limit_interface_rwlock_get(swigCPtr); + SWIGTYPE_p_switch_thread_rwlock_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_thread_rwlock_t(cPtr, false); + return ret; + } + } + + public int refs { + set { + freeswitchPINVOKE.switch_limit_interface_refs_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_limit_interface_refs_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t reflock { + set { + freeswitchPINVOKE.switch_limit_interface_reflock_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_limit_interface_reflock_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_loadable_module_interface parent { + set { + freeswitchPINVOKE.switch_limit_interface_parent_set(swigCPtr, SWIGTYPE_p_switch_loadable_module_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_limit_interface_parent_get(swigCPtr); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + } + + public switch_limit_interface next { + set { + freeswitchPINVOKE.switch_limit_interface_next_set(swigCPtr, switch_limit_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_limit_interface_next_get(swigCPtr); + switch_limit_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_limit_interface(cPtr, false); + return ret; + } + } + + public switch_limit_interface() : this(freeswitchPINVOKE.new_switch_limit_interface(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_loadable_module_function_table_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_loadable_module_function_table_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_loadable_module_function_table_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_loadable_module_function_table_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_loadable_module_function_table_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public int switch_api_version { + set { + freeswitchPINVOKE.switch_loadable_module_function_table_t_switch_api_version_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_loadable_module_function_table_t_switch_api_version_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_p_switch_loadable_module_interface_p_apr_pool_t__switch_status_t load { + set { + freeswitchPINVOKE.switch_loadable_module_function_table_t_load_set(swigCPtr, SWIGTYPE_p_f_p_p_switch_loadable_module_interface_p_apr_pool_t__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_loadable_module_function_table_t_load_get(swigCPtr); + SWIGTYPE_p_f_p_p_switch_loadable_module_interface_p_apr_pool_t__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_p_switch_loadable_module_interface_p_apr_pool_t__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_void__switch_status_t shutdown { + set { + freeswitchPINVOKE.switch_loadable_module_function_table_t_shutdown_set(swigCPtr, SWIGTYPE_p_f_void__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_loadable_module_function_table_t_shutdown_get(swigCPtr); + SWIGTYPE_p_f_void__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_void__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_void__switch_status_t runtime { + set { + freeswitchPINVOKE.switch_loadable_module_function_table_t_runtime_set(swigCPtr, SWIGTYPE_p_f_void__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_loadable_module_function_table_t_runtime_get(swigCPtr); + SWIGTYPE_p_f_void__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_void__switch_status_t(cPtr, false); + return ret; + } + } + + public uint flags { + set { + freeswitchPINVOKE.switch_loadable_module_function_table_t_flags_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_loadable_module_function_table_t_flags_get(swigCPtr); + return ret; + } + } + + public switch_loadable_module_function_table_t() : this(freeswitchPINVOKE.new_switch_loadable_module_function_table_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_log_level_t { + SWITCH_LOG_DEBUG10 = 110, + SWITCH_LOG_DEBUG9 = 109, + SWITCH_LOG_DEBUG8 = 108, + SWITCH_LOG_DEBUG7 = 107, + SWITCH_LOG_DEBUG6 = 106, + SWITCH_LOG_DEBUG5 = 105, + SWITCH_LOG_DEBUG4 = 104, + SWITCH_LOG_DEBUG3 = 103, + SWITCH_LOG_DEBUG2 = 102, + SWITCH_LOG_DEBUG1 = 101, + SWITCH_LOG_DEBUG = 7, + SWITCH_LOG_INFO = 6, + SWITCH_LOG_NOTICE = 5, + SWITCH_LOG_WARNING = 4, + SWITCH_LOG_ERROR = 3, + SWITCH_LOG_CRIT = 2, + SWITCH_LOG_ALERT = 1, + SWITCH_LOG_CONSOLE = 0, + SWITCH_LOG_INVALID = 64 +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_log_node_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_log_node_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_log_node_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_log_node_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_log_node_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string data { + set { + freeswitchPINVOKE.switch_log_node_t_data_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_log_node_t_data_get(swigCPtr); + return ret; + } + } + + public string file { + set { + freeswitchPINVOKE.switch_log_node_t_file_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_log_node_t_file_get(swigCPtr); + return ret; + } + } + + public uint line { + set { + freeswitchPINVOKE.switch_log_node_t_line_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_log_node_t_line_get(swigCPtr); + return ret; + } + } + + public string func { + set { + freeswitchPINVOKE.switch_log_node_t_func_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_log_node_t_func_get(swigCPtr); + return ret; + } + } + + public switch_log_level_t level { + set { + freeswitchPINVOKE.switch_log_node_t_level_set(swigCPtr, (int)value); + } + get { + switch_log_level_t ret = (switch_log_level_t)freeswitchPINVOKE.switch_log_node_t_level_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_time_t timestamp { + set { + freeswitchPINVOKE.switch_log_node_t_timestamp_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_log_node_t_timestamp_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public string content { + set { + freeswitchPINVOKE.switch_log_node_t_content_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_log_node_t_content_get(swigCPtr); + return ret; + } + } + + public string userdata { + set { + freeswitchPINVOKE.switch_log_node_t_userdata_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_log_node_t_userdata_get(swigCPtr); + return ret; + } + } + + public switch_text_channel_t channel { + set { + freeswitchPINVOKE.switch_log_node_t_channel_set(swigCPtr, (int)value); + } + get { + switch_text_channel_t ret = (switch_text_channel_t)freeswitchPINVOKE.switch_log_node_t_channel_get(swigCPtr); + return ret; + } + } + + public switch_log_node_t() : this(freeswitchPINVOKE.new_switch_log_node_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_management_action_t { + SMA_NONE, + SMA_GET, + SMA_SET +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_management_interface : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_management_interface(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_management_interface obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_management_interface() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_management_interface(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string relative_oid { + set { + freeswitchPINVOKE.switch_management_interface_relative_oid_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_management_interface_relative_oid_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_char_enum_switch_management_action_t_p_char_switch_size_t__switch_status_t management_function { + set { + freeswitchPINVOKE.switch_management_interface_management_function_set(swigCPtr, SWIGTYPE_p_f_p_char_enum_switch_management_action_t_p_char_switch_size_t__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_management_interface_management_function_get(swigCPtr); + SWIGTYPE_p_f_p_char_enum_switch_management_action_t_p_char_switch_size_t__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_char_enum_switch_management_action_t_p_char_switch_size_t__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { + set { + freeswitchPINVOKE.switch_management_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_management_interface_rwlock_get(swigCPtr); + SWIGTYPE_p_switch_thread_rwlock_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_thread_rwlock_t(cPtr, false); + return ret; + } + } + + public int refs { + set { + freeswitchPINVOKE.switch_management_interface_refs_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_management_interface_refs_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t reflock { + set { + freeswitchPINVOKE.switch_management_interface_reflock_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_management_interface_reflock_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_loadable_module_interface parent { + set { + freeswitchPINVOKE.switch_management_interface_parent_set(swigCPtr, SWIGTYPE_p_switch_loadable_module_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_management_interface_parent_get(swigCPtr); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + } + + public switch_management_interface next { + set { + freeswitchPINVOKE.switch_management_interface_next_set(swigCPtr, switch_management_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_management_interface_next_get(swigCPtr); + switch_management_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_management_interface(cPtr, false); + return ret; + } + } + + public switch_management_interface() : this(freeswitchPINVOKE.new_switch_management_interface(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_media_bug_flag_enum_t { + SMBF_BOTH = 0, + SMBF_READ_STREAM = (1 << 0), + SMBF_WRITE_STREAM = (1 << 1), + SMBF_WRITE_REPLACE = (1 << 2), + SMBF_READ_REPLACE = (1 << 3), + SMBF_READ_PING = (1 << 4), + SMBF_STEREO = (1 << 5), + SMBF_ANSWER_REQ = (1 << 6), + SMBF_THREAD_LOCK = (1 << 7), + SMBF_PRUNE = (1 << 8) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_media_flag_enum_t { + SMF_NONE = 0, + SMF_REBRIDGE = (1 << 0), + SMF_ECHO_ALEG = (1 << 1), + SMF_ECHO_BLEG = (1 << 2), + SMF_FORCE = (1 << 3), + SMF_LOOP = (1 << 4), + SMF_HOLD_BLEG = (1 << 5), + SMF_IMMEDIATE = (1 << 6), + SMF_EXEC_INLINE = (1 << 7), + SMF_PRIORITY = (1 << 8) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_module_flag_enum_t { + SMODF_NONE = 0, + SMODF_GLOBAL_SYMBOLS = (1 << 0) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_module_interface_name_t { + SWITCH_ENDPOINT_INTERFACE, + SWITCH_TIMER_INTERFACE, + SWITCH_DIALPLAN_INTERFACE, + SWITCH_CODEC_INTERFACE, + SWITCH_APPLICATION_INTERFACE, + SWITCH_API_INTERFACE, + SWITCH_FILE_INTERFACE, + SWITCH_SPEECH_INTERFACE, + SWITCH_DIRECTORY_INTERFACE, + SWITCH_CHAT_INTERFACE, + SWITCH_SAY_INTERFACE, + SWITCH_ASR_INTERFACE, + SWITCH_MANAGEMENT_INTERFACE, + SWITCH_LIMIT_INTERFACE +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_originate_flag_enum_t { + SOF_NONE = 0, + SOF_NOBLOCK = (1 << 0), + SOF_FORKED_DIAL = (1 << 1), + SOF_NO_EFFECTIVE_CID_NUM = (1 << 2), + SOF_NO_EFFECTIVE_CID_NAME = (1 << 3) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_port_flag_enum_t { + SPF_NONE = 0, + SPF_ODD = (1 << 0), + SPF_EVEN = (1 << 1) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_priority_t { + SWITCH_PRIORITY_NORMAL, + SWITCH_PRIORITY_LOW, + SWITCH_PRIORITY_HIGH +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_ring_ready_t { + SWITCH_RING_READY_NONE, + SWITCH_RING_READY_RINGING, + SWITCH_RING_READY_QUEUED +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_rtcp_hdr_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_rtcp_hdr_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_rtcp_hdr_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_rtcp_hdr_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_rtcp_hdr_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public uint version { + set { + freeswitchPINVOKE.switch_rtcp_hdr_t_version_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtcp_hdr_t_version_get(swigCPtr); + return ret; + } + } + + public uint p { + set { + freeswitchPINVOKE.switch_rtcp_hdr_t_p_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtcp_hdr_t_p_get(swigCPtr); + return ret; + } + } + + public uint count { + set { + freeswitchPINVOKE.switch_rtcp_hdr_t_count_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtcp_hdr_t_count_get(swigCPtr); + return ret; + } + } + + public uint type { + set { + freeswitchPINVOKE.switch_rtcp_hdr_t_type_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtcp_hdr_t_type_get(swigCPtr); + return ret; + } + } + + public uint length { + set { + freeswitchPINVOKE.switch_rtcp_hdr_t_length_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtcp_hdr_t_length_get(swigCPtr); + return ret; + } + } + + public switch_rtcp_hdr_t() : this(freeswitchPINVOKE.new_switch_rtcp_hdr_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_rtp_bug_flag_t { + RTP_BUG_NONE = 0, + RTP_BUG_CISCO_SKIP_MARK_BIT_2833 = (1 << 0), + RTP_BUG_SONUS_SEND_INVALID_TIMESTAMP_2833 = (1 << 1), + RTP_BUG_IGNORE_MARK_BIT = (1 << 2) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_rtp_crypto_direction_t { + SWITCH_RTP_CRYPTO_SEND, + SWITCH_RTP_CRYPTO_RECV, + SWITCH_RTP_CRYPTO_MAX +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_rtp_crypto_key : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_rtp_crypto_key(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_rtp_crypto_key obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_rtp_crypto_key() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_rtp_crypto_key(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public uint index { + set { + freeswitchPINVOKE.switch_rtp_crypto_key_index_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtp_crypto_key_index_get(swigCPtr); + return ret; + } + } + + public switch_rtp_crypto_key_type_t type { + set { + freeswitchPINVOKE.switch_rtp_crypto_key_type_set(swigCPtr, (int)value); + } + get { + switch_rtp_crypto_key_type_t ret = (switch_rtp_crypto_key_type_t)freeswitchPINVOKE.switch_rtp_crypto_key_type_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_unsigned_char key { + set { + freeswitchPINVOKE.switch_rtp_crypto_key_key_set(swigCPtr, SWIGTYPE_p_unsigned_char.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_rtp_crypto_key_key_get(swigCPtr); + SWIGTYPE_p_unsigned_char ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_char(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t keylen { + set { + freeswitchPINVOKE.switch_rtp_crypto_key_keylen_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_crypto_key_keylen_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public switch_rtp_crypto_key next { + set { + freeswitchPINVOKE.switch_rtp_crypto_key_next_set(swigCPtr, switch_rtp_crypto_key.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_rtp_crypto_key_next_get(swigCPtr); + switch_rtp_crypto_key ret = (cPtr == IntPtr.Zero) ? null : new switch_rtp_crypto_key(cPtr, false); + return ret; + } + } + + public switch_rtp_crypto_key() : this(freeswitchPINVOKE.new_switch_rtp_crypto_key(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_rtp_crypto_key_type_t { + NO_CRYPTO, + AES_CM_128_HMAC_SHA1_80, + AES_CM_128_HMAC_SHA1_32, + AES_CM_128_NULL_AUTH +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_rtp_flag_enum_t { + SWITCH_RTP_FLAG_NOBLOCK = (1 << 0), + SWITCH_RTP_FLAG_IO = (1 << 1), + SWITCH_RTP_FLAG_USE_TIMER = (1 << 2), + SWITCH_RTP_FLAG_TIMER_RECLOCK = (1 << 3), + SWITCH_RTP_FLAG_SECURE_SEND = (1 << 4), + SWITCH_RTP_FLAG_SECURE_RECV = (1 << 5), + SWITCH_RTP_FLAG_AUTOADJ = (1 << 6), + SWITCH_RTP_FLAG_RAW_WRITE = (1 << 7), + SWITCH_RTP_FLAG_GOOGLEHACK = (1 << 8), + SWITCH_RTP_FLAG_VAD = (1 << 9), + SWITCH_RTP_FLAG_BREAK = (1 << 10), + SWITCH_RTP_FLAG_UDPTL = (1 << 11), + SWITCH_RTP_FLAG_DATAWAIT = (1 << 12), + SWITCH_RTP_FLAG_BUGGY_2833 = (1 << 13), + SWITCH_RTP_FLAG_PASS_RFC2833 = (1 << 14), + SWITCH_RTP_FLAG_AUTO_CNG = (1 << 15), + SWITCH_RTP_FLAG_SECURE_SEND_RESET = (1 << 16), + SWITCH_RTP_FLAG_SECURE_RECV_RESET = (1 << 17), + SWITCH_RTP_FLAG_PROXY_MEDIA = (1 << 18), + SWITCH_RTP_FLAG_SHUTDOWN = (1 << 19), + SWITCH_RTP_FLAG_FLUSH = (1 << 20), + SWITCH_RTP_FLAG_AUTOFLUSH = (1 << 21), + SWITCH_RTP_FLAG_STICKY_FLUSH = (1 << 22), + SWITCH_ZRTP_FLAG_SECURE_SEND = (1 << 23), + SWITCH_ZRTP_FLAG_SECURE_RECV = (1 << 24), + SWITCH_ZRTP_FLAG_SECURE_MITM_SEND = (1 << 25), + SWITCH_ZRTP_FLAG_SECURE_MITM_RECV = (1 << 26), + SWITCH_RTP_FLAG_DEBUG_RTP_READ = (1 << 27), + SWITCH_RTP_FLAG_DEBUG_RTP_WRITE = (1 << 28), + SWITCH_RTP_FLAG_VIDEO = (1 << 29), + SWITCH_RTP_FLAG_ENABLE_RTCP = (1 << 30), + SWITCH_RTP_FLAG_RTCP_PASSTHRU = (1 << 31) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_rtp_flush_t { + SWITCH_RTP_FLUSH_ONCE, + SWITCH_RTP_FLUSH_STICK, + SWITCH_RTP_FLUSH_UNSTICK +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_rtp_hdr_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_rtp_hdr_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_rtp_hdr_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_rtp_hdr_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_rtp_hdr_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public uint version { + set { + freeswitchPINVOKE.switch_rtp_hdr_t_version_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtp_hdr_t_version_get(swigCPtr); + return ret; + } + } + + public uint p { + set { + freeswitchPINVOKE.switch_rtp_hdr_t_p_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtp_hdr_t_p_get(swigCPtr); + return ret; + } + } + + public uint x { + set { + freeswitchPINVOKE.switch_rtp_hdr_t_x_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtp_hdr_t_x_get(swigCPtr); + return ret; + } + } + + public uint cc { + set { + freeswitchPINVOKE.switch_rtp_hdr_t_cc_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtp_hdr_t_cc_get(swigCPtr); + return ret; + } + } + + public uint m { + set { + freeswitchPINVOKE.switch_rtp_hdr_t_m_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtp_hdr_t_m_get(swigCPtr); + return ret; + } + } + + public uint pt { + set { + freeswitchPINVOKE.switch_rtp_hdr_t_pt_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtp_hdr_t_pt_get(swigCPtr); + return ret; + } + } + + public uint seq { + set { + freeswitchPINVOKE.switch_rtp_hdr_t_seq_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtp_hdr_t_seq_get(swigCPtr); + return ret; + } + } + + public uint ts { + set { + freeswitchPINVOKE.switch_rtp_hdr_t_ts_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtp_hdr_t_ts_get(swigCPtr); + return ret; + } + } + + public uint ssrc { + set { + freeswitchPINVOKE.switch_rtp_hdr_t_ssrc_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_rtp_hdr_t_ssrc_get(swigCPtr); + return ret; + } + } + + public switch_rtp_hdr_t() : this(freeswitchPINVOKE.new_switch_rtp_hdr_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_rtp_numbers_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_rtp_numbers_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_rtp_numbers_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_rtp_numbers_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_rtp_numbers_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_switch_size_t raw_bytes { + set { + freeswitchPINVOKE.switch_rtp_numbers_t_raw_bytes_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_raw_bytes_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t media_bytes { + set { + freeswitchPINVOKE.switch_rtp_numbers_t_media_bytes_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_media_bytes_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t packet_count { + set { + freeswitchPINVOKE.switch_rtp_numbers_t_packet_count_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_packet_count_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t media_packet_count { + set { + freeswitchPINVOKE.switch_rtp_numbers_t_media_packet_count_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_media_packet_count_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t skip_packet_count { + set { + freeswitchPINVOKE.switch_rtp_numbers_t_skip_packet_count_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_skip_packet_count_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t jb_packet_count { + set { + freeswitchPINVOKE.switch_rtp_numbers_t_jb_packet_count_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_jb_packet_count_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t dtmf_packet_count { + set { + freeswitchPINVOKE.switch_rtp_numbers_t_dtmf_packet_count_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_dtmf_packet_count_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t cng_packet_count { + set { + freeswitchPINVOKE.switch_rtp_numbers_t_cng_packet_count_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_cng_packet_count_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t flush_packet_count { + set { + freeswitchPINVOKE.switch_rtp_numbers_t_flush_packet_count_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_flush_packet_count_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) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_rtp_stats_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_rtp_stats_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_rtp_stats_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_rtp_stats_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_rtp_stats_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public switch_rtp_numbers_t inbound { + set { + freeswitchPINVOKE.switch_rtp_stats_t_inbound_set(swigCPtr, switch_rtp_numbers_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_rtp_stats_t_inbound_get(swigCPtr); + switch_rtp_numbers_t ret = (cPtr == IntPtr.Zero) ? null : new switch_rtp_numbers_t(cPtr, false); + return ret; + } + } + + public switch_rtp_numbers_t outbound { + set { + freeswitchPINVOKE.switch_rtp_stats_t_outbound_set(swigCPtr, switch_rtp_numbers_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_rtp_stats_t_outbound_get(swigCPtr); + switch_rtp_numbers_t ret = (cPtr == IntPtr.Zero) ? null : new switch_rtp_numbers_t(cPtr, false); + return ret; + } + } + + public switch_rtp_stats_t() : this(freeswitchPINVOKE.new_switch_rtp_stats_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_say_args_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_say_args_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_say_args_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_say_args_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_say_args_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public switch_say_type_t type { + set { + freeswitchPINVOKE.switch_say_args_t_type_set(swigCPtr, (int)value); + } + get { + switch_say_type_t ret = (switch_say_type_t)freeswitchPINVOKE.switch_say_args_t_type_get(swigCPtr); + return ret; + } + } + + public switch_say_method_t method { + set { + freeswitchPINVOKE.switch_say_args_t_method_set(swigCPtr, (int)value); + } + get { + switch_say_method_t ret = (switch_say_method_t)freeswitchPINVOKE.switch_say_args_t_method_get(swigCPtr); + return ret; + } + } + + public switch_say_gender_t gender { + set { + freeswitchPINVOKE.switch_say_args_t_gender_set(swigCPtr, (int)value); + } + get { + switch_say_gender_t ret = (switch_say_gender_t)freeswitchPINVOKE.switch_say_args_t_gender_get(swigCPtr); + return ret; + } + } + + public switch_say_args_t() : this(freeswitchPINVOKE.new_switch_say_args_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_say_gender_t { + SSG_MASCULINE, + SSG_FEMININE, + SSG_NEUTER +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_say_interface : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_say_interface(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_say_interface obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_say_interface() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_say_interface(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string interface_name { + set { + freeswitchPINVOKE.switch_say_interface_interface_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_say_interface_interface_name_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session_p_char_p_switch_say_args_t_p_switch_input_args_t__switch_status_t say_function { + set { + freeswitchPINVOKE.switch_say_interface_say_function_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session_p_char_p_switch_say_args_t_p_switch_input_args_t__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_say_interface_say_function_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session_p_char_p_switch_say_args_t_p_switch_input_args_t__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session_p_char_p_switch_say_args_t_p_switch_input_args_t__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { + set { + freeswitchPINVOKE.switch_say_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_say_interface_rwlock_get(swigCPtr); + SWIGTYPE_p_switch_thread_rwlock_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_thread_rwlock_t(cPtr, false); + return ret; + } + } + + public int refs { + set { + freeswitchPINVOKE.switch_say_interface_refs_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_say_interface_refs_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t reflock { + set { + freeswitchPINVOKE.switch_say_interface_reflock_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_say_interface_reflock_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_loadable_module_interface parent { + set { + freeswitchPINVOKE.switch_say_interface_parent_set(swigCPtr, SWIGTYPE_p_switch_loadable_module_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_say_interface_parent_get(swigCPtr); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + } + + public switch_say_interface next { + set { + freeswitchPINVOKE.switch_say_interface_next_set(swigCPtr, switch_say_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_say_interface_next_get(swigCPtr); + switch_say_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_say_interface(cPtr, false); + return ret; + } + } + + public switch_say_interface() : this(freeswitchPINVOKE.new_switch_say_interface(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_say_method_t { + SSM_NA, + SSM_PRONOUNCED, + SSM_ITERATED, + SSM_COUNTED +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_say_type_t { + SST_NUMBER, + SST_ITEMS, + SST_PERSONS, + SST_MESSAGES, + SST_CURRENCY, + SST_TIME_MEASUREMENT, + SST_CURRENT_DATE, + SST_CURRENT_TIME, + SST_CURRENT_DATE_TIME, + SST_TELEPHONE_NUMBER, + SST_TELEPHONE_EXTENSION, + SST_URL, + SST_IP_ADDRESS, + SST_EMAIL_ADDRESS, + SST_POSTAL_ADDRESS, + SST_ACCOUNT_NUMBER, + SST_NAME_SPELLED, + SST_NAME_PHONETIC, + SST_SHORT_DATE_TIME +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_scheduler_flag_enum_t { + SSHF_NONE = 0, + SSHF_OWN_THREAD = (1 << 0), + SSHF_FREE_ARG = (1 << 1), + SSHF_NO_DEL = (1 << 2) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_scheduler_task : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_scheduler_task(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_scheduler_task obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_scheduler_task() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_scheduler_task(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public long created { + set { + freeswitchPINVOKE.switch_scheduler_task_created_set(swigCPtr, value); + } + get { + long ret = freeswitchPINVOKE.switch_scheduler_task_created_get(swigCPtr); + return ret; + } + } + + public long runtime { + set { + freeswitchPINVOKE.switch_scheduler_task_runtime_set(swigCPtr, value); + } + get { + long ret = freeswitchPINVOKE.switch_scheduler_task_runtime_get(swigCPtr); + return ret; + } + } + + public uint cmd_id { + set { + freeswitchPINVOKE.switch_scheduler_task_cmd_id_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_scheduler_task_cmd_id_get(swigCPtr); + return ret; + } + } + + public string group { + set { + freeswitchPINVOKE.switch_scheduler_task_group_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_scheduler_task_group_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_void cmd_arg { + set { + freeswitchPINVOKE.switch_scheduler_task_cmd_arg_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_scheduler_task_cmd_arg_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public uint task_id { + set { + freeswitchPINVOKE.switch_scheduler_task_task_id_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_scheduler_task_task_id_get(swigCPtr); + return ret; + } + } + + public switch_scheduler_task() : this(freeswitchPINVOKE.new_switch_scheduler_task(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_session_ctl_t { + SCSC_PAUSE_INBOUND, + SCSC_HUPALL, + SCSC_SHUTDOWN, + SCSC_CHECK_RUNNING, + SCSC_LOGLEVEL, + SCSC_SPS, + SCSC_LAST_SPS, + SCSC_RECLAIM, + SCSC_MAX_SESSIONS, + SCSC_SYNC_CLOCK, + SCSC_MAX_DTMF_DURATION, + SCSC_MIN_DTMF_DURATION, + SCSC_DEFAULT_DTMF_DURATION, + SCSC_SHUTDOWN_ELEGANT, + SCSC_SHUTDOWN_ASAP, + SCSC_CANCEL_SHUTDOWN, + SCSC_SEND_SIGHUP, + SCSC_DEBUG_LEVEL, + SCSC_FLUSH_DB_HANDLES, + SCSC_SHUTDOWN_NOW, + SCSC_CALIBRATE_CLOCK, + SCSC_SAVE_HISTORY, + SCSC_CRASH, + SCSC_MIN_IDLE_CPU, + SCSC_VERBOSE_EVENTS, + SCSC_SHUTDOWN_CHECK +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_signal_t { + SWITCH_SIG_NONE, + SWITCH_SIG_KILL, + SWITCH_SIG_XFER, + SWITCH_SIG_BREAK +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_speech_flag_enum_t { + SWITCH_SPEECH_FLAG_NONE = 0, + SWITCH_SPEECH_FLAG_HASTEXT = (1 << 0), + SWITCH_SPEECH_FLAG_PEEK = (1 << 1), + SWITCH_SPEECH_FLAG_FREE_POOL = (1 << 2), + SWITCH_SPEECH_FLAG_BLOCKING = (1 << 3), + SWITCH_SPEECH_FLAG_PAUSE = (1 << 4), + SWITCH_SPEECH_FLAG_OPEN = (1 << 5), + SWITCH_SPEECH_FLAG_DONE = (1 << 6) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_speech_handle : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_speech_handle(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_speech_handle obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_speech_handle() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_speech_handle(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public switch_speech_interface speech_interface { + set { + freeswitchPINVOKE.switch_speech_handle_speech_interface_set(swigCPtr, switch_speech_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_handle_speech_interface_get(swigCPtr); + switch_speech_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_speech_interface(cPtr, false); + return ret; + } + } + + public uint flags { + set { + freeswitchPINVOKE.switch_speech_handle_flags_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_speech_handle_flags_get(swigCPtr); + return ret; + } + } + + public string name { + set { + freeswitchPINVOKE.switch_speech_handle_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_speech_handle_name_get(swigCPtr); + return ret; + } + } + + public uint rate { + set { + freeswitchPINVOKE.switch_speech_handle_rate_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_speech_handle_rate_get(swigCPtr); + return ret; + } + } + + public uint speed { + set { + freeswitchPINVOKE.switch_speech_handle_speed_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_speech_handle_speed_get(swigCPtr); + return ret; + } + } + + public uint samples { + set { + freeswitchPINVOKE.switch_speech_handle_samples_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_speech_handle_samples_get(swigCPtr); + return ret; + } + } + + public string voice { + set { + freeswitchPINVOKE.switch_speech_handle_voice_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_speech_handle_voice_get(swigCPtr); + return ret; + } + } + + public string engine { + set { + freeswitchPINVOKE.switch_speech_handle_engine_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_speech_handle_engine_get(swigCPtr); + return ret; + } + } + + public string param { + set { + freeswitchPINVOKE.switch_speech_handle_param_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_speech_handle_param_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_apr_pool_t memory_pool { + set { + freeswitchPINVOKE.switch_speech_handle_memory_pool_set(swigCPtr, SWIGTYPE_p_apr_pool_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_handle_memory_pool_get(swigCPtr); + SWIGTYPE_p_apr_pool_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_apr_pool_t(cPtr, false); + return ret; + } + } + + public switch_audio_resampler_t resampler { + set { + freeswitchPINVOKE.switch_speech_handle_resampler_set(swigCPtr, switch_audio_resampler_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_handle_resampler_get(swigCPtr); + switch_audio_resampler_t ret = (cPtr == IntPtr.Zero) ? null : new switch_audio_resampler_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_buffer buffer { + set { + freeswitchPINVOKE.switch_speech_handle_buffer_set(swigCPtr, SWIGTYPE_p_switch_buffer.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_handle_buffer_get(swigCPtr); + SWIGTYPE_p_switch_buffer ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_buffer(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_unsigned_char dbuf { + set { + freeswitchPINVOKE.switch_speech_handle_dbuf_set(swigCPtr, SWIGTYPE_p_unsigned_char.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_handle_dbuf_get(swigCPtr); + SWIGTYPE_p_unsigned_char ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_char(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t dbuflen { + set { + freeswitchPINVOKE.switch_speech_handle_dbuflen_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_speech_handle_dbuflen_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public uint samplerate { + set { + freeswitchPINVOKE.switch_speech_handle_samplerate_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_speech_handle_samplerate_get(swigCPtr); + return ret; + } + } + + public uint native_rate { + set { + freeswitchPINVOKE.switch_speech_handle_native_rate_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_speech_handle_native_rate_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_void private_info { + set { + freeswitchPINVOKE.switch_speech_handle_private_info_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_handle_private_info_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public switch_speech_handle() : this(freeswitchPINVOKE.new_switch_speech_handle(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_speech_interface : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_speech_interface(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_speech_interface obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_speech_interface() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_speech_interface(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string interface_name { + set { + freeswitchPINVOKE.switch_speech_interface_interface_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_speech_interface_interface_name_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_speech_handle_p_q_const__char_int_p_unsigned_long__switch_status_t speech_open { + set { + freeswitchPINVOKE.switch_speech_interface_speech_open_set(swigCPtr, SWIGTYPE_p_f_p_switch_speech_handle_p_q_const__char_int_p_unsigned_long__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_interface_speech_open_get(swigCPtr); + SWIGTYPE_p_f_p_switch_speech_handle_p_q_const__char_int_p_unsigned_long__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_speech_handle_p_q_const__char_int_p_unsigned_long__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_speech_handle_p_unsigned_long__switch_status_t speech_close { + set { + freeswitchPINVOKE.switch_speech_interface_speech_close_set(swigCPtr, SWIGTYPE_p_f_p_switch_speech_handle_p_unsigned_long__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_interface_speech_close_get(swigCPtr); + SWIGTYPE_p_f_p_switch_speech_handle_p_unsigned_long__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_speech_handle_p_unsigned_long__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_unsigned_long__switch_status_t speech_feed_tts { + set { + freeswitchPINVOKE.switch_speech_interface_speech_feed_tts_set(swigCPtr, SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_unsigned_long__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_interface_speech_feed_tts_get(swigCPtr); + SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_unsigned_long__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_unsigned_long__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_speech_handle_p_void_p_switch_size_t_p_unsigned_long__switch_status_t speech_read_tts { + set { + freeswitchPINVOKE.switch_speech_interface_speech_read_tts_set(swigCPtr, SWIGTYPE_p_f_p_switch_speech_handle_p_void_p_switch_size_t_p_unsigned_long__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_interface_speech_read_tts_get(swigCPtr); + SWIGTYPE_p_f_p_switch_speech_handle_p_void_p_switch_size_t_p_unsigned_long__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_speech_handle_p_void_p_switch_size_t_p_unsigned_long__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_speech_handle__void speech_flush_tts { + set { + freeswitchPINVOKE.switch_speech_interface_speech_flush_tts_set(swigCPtr, SWIGTYPE_p_f_p_switch_speech_handle__void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_interface_speech_flush_tts_get(swigCPtr); + SWIGTYPE_p_f_p_switch_speech_handle__void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_speech_handle__void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_q_const__char__void speech_text_param_tts { + set { + freeswitchPINVOKE.switch_speech_interface_speech_text_param_tts_set(swigCPtr, SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_q_const__char__void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_interface_speech_text_param_tts_get(swigCPtr); + SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_q_const__char__void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_q_const__char__void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_speech_handle_p_char_int__void speech_numeric_param_tts { + set { + freeswitchPINVOKE.switch_speech_interface_speech_numeric_param_tts_set(swigCPtr, SWIGTYPE_p_f_p_switch_speech_handle_p_char_int__void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_interface_speech_numeric_param_tts_get(swigCPtr); + SWIGTYPE_p_f_p_switch_speech_handle_p_char_int__void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_speech_handle_p_char_int__void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_speech_handle_p_char_double__void speech_float_param_tts { + set { + freeswitchPINVOKE.switch_speech_interface_speech_float_param_tts_set(swigCPtr, SWIGTYPE_p_f_p_switch_speech_handle_p_char_double__void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_interface_speech_float_param_tts_get(swigCPtr); + SWIGTYPE_p_f_p_switch_speech_handle_p_char_double__void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_speech_handle_p_char_double__void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { + set { + freeswitchPINVOKE.switch_speech_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_interface_rwlock_get(swigCPtr); + SWIGTYPE_p_switch_thread_rwlock_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_thread_rwlock_t(cPtr, false); + return ret; + } + } + + public int refs { + set { + freeswitchPINVOKE.switch_speech_interface_refs_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_speech_interface_refs_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t reflock { + set { + freeswitchPINVOKE.switch_speech_interface_reflock_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_interface_reflock_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_loadable_module_interface parent { + set { + freeswitchPINVOKE.switch_speech_interface_parent_set(swigCPtr, SWIGTYPE_p_switch_loadable_module_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_interface_parent_get(swigCPtr); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + } + + public switch_speech_interface next { + set { + freeswitchPINVOKE.switch_speech_interface_next_set(swigCPtr, switch_speech_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_speech_interface_next_get(swigCPtr); + switch_speech_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_speech_interface(cPtr, false); + return ret; + } + } + + public switch_speech_interface() : this(freeswitchPINVOKE.new_switch_speech_interface(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_stack_t { + SWITCH_STACK_BOTTOM = (1 << 0), + SWITCH_STACK_TOP = (1 << 1), + SWITCH_STACK_NODUP = (1 << 2) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_state_handler_flag_t { + SSH_FLAG_STICKY = (1 << 0) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_state_handler_name_t { + SWITCH_SHN_ON_INIT, + SWITCH_SHN_ON_ROUTING, + SWITCH_SHN_ON_EXECUTE, + SWITCH_SHN_ON_HANGUP, + SWITCH_SHN_ON_EXCHANGE_MEDIA, + SWITCH_SHN_ON_SOFT_EXECUTE, + SWITCH_SHN_ON_CONSUME_MEDIA, + SWITCH_SHN_ON_HIBERNATE, + SWITCH_SHN_ON_RESET, + SWITCH_SHN_ON_PARK, + SWITCH_SHN_ON_REPORTING, + SWITCH_SHN_ON_DESTROY +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_state_handler_table : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_state_handler_table(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_state_handler_table obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_state_handler_table() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_state_handler_table(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_core_session__switch_status_t on_init { + set { + freeswitchPINVOKE.switch_state_handler_table_on_init_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_state_handler_table_on_init_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session__switch_status_t on_routing { + set { + freeswitchPINVOKE.switch_state_handler_table_on_routing_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_state_handler_table_on_routing_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session__switch_status_t on_execute { + set { + freeswitchPINVOKE.switch_state_handler_table_on_execute_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_state_handler_table_on_execute_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session__switch_status_t on_hangup { + set { + freeswitchPINVOKE.switch_state_handler_table_on_hangup_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_state_handler_table_on_hangup_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session__switch_status_t on_exchange_media { + set { + freeswitchPINVOKE.switch_state_handler_table_on_exchange_media_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_state_handler_table_on_exchange_media_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session__switch_status_t on_soft_execute { + set { + freeswitchPINVOKE.switch_state_handler_table_on_soft_execute_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_state_handler_table_on_soft_execute_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session__switch_status_t on_consume_media { + set { + freeswitchPINVOKE.switch_state_handler_table_on_consume_media_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_state_handler_table_on_consume_media_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session__switch_status_t on_hibernate { + set { + freeswitchPINVOKE.switch_state_handler_table_on_hibernate_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_state_handler_table_on_hibernate_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session__switch_status_t on_reset { + set { + freeswitchPINVOKE.switch_state_handler_table_on_reset_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_state_handler_table_on_reset_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session__switch_status_t on_park { + set { + freeswitchPINVOKE.switch_state_handler_table_on_park_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_state_handler_table_on_park_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session__switch_status_t on_reporting { + set { + freeswitchPINVOKE.switch_state_handler_table_on_reporting_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_state_handler_table_on_reporting_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_core_session__switch_status_t on_destroy { + set { + freeswitchPINVOKE.switch_state_handler_table_on_destroy_set(swigCPtr, SWIGTYPE_p_f_p_switch_core_session__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_state_handler_table_on_destroy_get(swigCPtr); + SWIGTYPE_p_f_p_switch_core_session__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_core_session__switch_status_t(cPtr, false); + return ret; + } + } + + public int flags { + set { + freeswitchPINVOKE.switch_state_handler_table_flags_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_state_handler_table_flags_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_p_void padding { + set { + freeswitchPINVOKE.switch_state_handler_table_padding_set(swigCPtr, SWIGTYPE_p_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_state_handler_table_padding_get(swigCPtr); + SWIGTYPE_p_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_p_void(cPtr, false); + return ret; + } + } + + public switch_state_handler_table() : this(freeswitchPINVOKE.new_switch_state_handler_table(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_status_t { + SWITCH_STATUS_SUCCESS, + SWITCH_STATUS_FALSE, + SWITCH_STATUS_TIMEOUT, + SWITCH_STATUS_RESTART, + SWITCH_STATUS_TERM, + SWITCH_STATUS_NOTIMPL, + SWITCH_STATUS_MEMERR, + SWITCH_STATUS_NOOP, + SWITCH_STATUS_RESAMPLE, + SWITCH_STATUS_GENERR, + SWITCH_STATUS_INUSE, + SWITCH_STATUS_BREAK, + SWITCH_STATUS_SOCKERR, + SWITCH_STATUS_MORE_DATA, + SWITCH_STATUS_NOTFOUND, + SWITCH_STATUS_UNLOAD, + SWITCH_STATUS_NOUNLOAD, + SWITCH_STATUS_IGNORE, + SWITCH_STATUS_TOO_SMALL, + SWITCH_STATUS_NOT_INITALIZED +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_stream_handle : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_stream_handle(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_stream_handle obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_stream_handle() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_stream_handle(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_f_p_switch_stream_handle_p_q_const__char_v_______switch_status_t write_function { + set { + freeswitchPINVOKE.switch_stream_handle_write_function_set(swigCPtr, SWIGTYPE_p_f_p_switch_stream_handle_p_q_const__char_v_______switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_stream_handle_write_function_get(swigCPtr); + SWIGTYPE_p_f_p_switch_stream_handle_p_q_const__char_v_______switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_stream_handle_p_q_const__char_v_______switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_stream_handle_p_unsigned_char_switch_size_t__switch_status_t raw_write_function { + set { + freeswitchPINVOKE.switch_stream_handle_raw_write_function_set(swigCPtr, SWIGTYPE_p_f_p_switch_stream_handle_p_unsigned_char_switch_size_t__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_stream_handle_raw_write_function_get(swigCPtr); + SWIGTYPE_p_f_p_switch_stream_handle_p_unsigned_char_switch_size_t__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_stream_handle_p_unsigned_char_switch_size_t__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_void data { + set { + freeswitchPINVOKE.switch_stream_handle_data_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_stream_handle_data_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_void end { + set { + freeswitchPINVOKE.switch_stream_handle_end_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_stream_handle_end_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t data_size { + set { + freeswitchPINVOKE.switch_stream_handle_data_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_stream_handle_data_size_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t data_len { + set { + freeswitchPINVOKE.switch_stream_handle_data_len_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_stream_handle_data_len_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t alloc_len { + set { + freeswitchPINVOKE.switch_stream_handle_alloc_len_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_stream_handle_alloc_len_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t alloc_chunk { + set { + freeswitchPINVOKE.switch_stream_handle_alloc_chunk_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_stream_handle_alloc_chunk_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public switch_event param_event { + set { + freeswitchPINVOKE.switch_stream_handle_param_event_set(swigCPtr, switch_event.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_stream_handle_param_event_get(swigCPtr); + switch_event ret = (cPtr == IntPtr.Zero) ? null : new switch_event(cPtr, false); + return ret; + } + } + + public switch_stream_handle() : this(freeswitchPINVOKE.new_switch_stream_handle(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_t38_options_t : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_t38_options_t(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_t38_options_t obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_t38_options_t() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_t38_options_t(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public ushort T38FaxVersion { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxVersion_set(swigCPtr, value); + } + get { + ushort ret = freeswitchPINVOKE.switch_t38_options_t_T38FaxVersion_get(swigCPtr); + return ret; + } + } + + public uint T38MaxBitRate { + set { + freeswitchPINVOKE.switch_t38_options_t_T38MaxBitRate_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_t38_options_t_T38MaxBitRate_get(swigCPtr); + return ret; + } + } + + public switch_bool_t T38FaxFillBitRemoval { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxFillBitRemoval_set(swigCPtr, (int)value); + } + get { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_t38_options_t_T38FaxFillBitRemoval_get(swigCPtr); + return ret; + } + } + + public switch_bool_t T38FaxTranscodingMMR { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxTranscodingMMR_set(swigCPtr, (int)value); + } + get { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_t38_options_t_T38FaxTranscodingMMR_get(swigCPtr); + return ret; + } + } + + public switch_bool_t T38FaxTranscodingJBIG { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxTranscodingJBIG_set(swigCPtr, (int)value); + } + get { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_t38_options_t_T38FaxTranscodingJBIG_get(swigCPtr); + return ret; + } + } + + public string T38FaxRateManagement { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxRateManagement_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_t38_options_t_T38FaxRateManagement_get(swigCPtr); + return ret; + } + } + + public uint T38FaxMaxBuffer { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxMaxBuffer_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_t38_options_t_T38FaxMaxBuffer_get(swigCPtr); + return ret; + } + } + + public uint T38FaxMaxDatagram { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxMaxDatagram_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_t38_options_t_T38FaxMaxDatagram_get(swigCPtr); + return ret; + } + } + + public string T38FaxUdpEC { + set { + freeswitchPINVOKE.switch_t38_options_t_T38FaxUdpEC_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_t38_options_t_T38FaxUdpEC_get(swigCPtr); + return ret; + } + } + + public string T38VendorInfo { + set { + freeswitchPINVOKE.switch_t38_options_t_T38VendorInfo_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_t38_options_t_T38VendorInfo_get(swigCPtr); + return ret; + } + } + + public string remote_ip { + set { + freeswitchPINVOKE.switch_t38_options_t_remote_ip_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_t38_options_t_remote_ip_get(swigCPtr); + return ret; + } + } + + public uint remote_port { + set { + freeswitchPINVOKE.switch_t38_options_t_remote_port_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_t38_options_t_remote_port_get(swigCPtr); + return ret; + } + } + + public string local_ip { + set { + freeswitchPINVOKE.switch_t38_options_t_local_ip_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_t38_options_t_local_ip_get(swigCPtr); + return ret; + } + } + + public uint local_port { + set { + freeswitchPINVOKE.switch_t38_options_t_local_port_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_t38_options_t_local_port_get(swigCPtr); + return ret; + } + } + + public switch_t38_options_t() : this(freeswitchPINVOKE.new_switch_t38_options_t(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_text_channel_t { + SWITCH_CHANNEL_ID_LOG, + SWITCH_CHANNEL_ID_LOG_CLEAN, + SWITCH_CHANNEL_ID_EVENT, + SWITCH_CHANNEL_ID_SESSION +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_timer : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_timer(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_timer obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_timer() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_timer(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public int interval { + set { + freeswitchPINVOKE.switch_timer_interval_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_timer_interval_get(swigCPtr); + return ret; + } + } + + public uint flags { + set { + freeswitchPINVOKE.switch_timer_flags_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_timer_flags_get(swigCPtr); + return ret; + } + } + + public uint samples { + set { + freeswitchPINVOKE.switch_timer_samples_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_timer_samples_get(swigCPtr); + return ret; + } + } + + public uint samplecount { + set { + freeswitchPINVOKE.switch_timer_samplecount_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_timer_samplecount_get(swigCPtr); + return ret; + } + } + + public switch_timer_interface timer_interface { + set { + freeswitchPINVOKE.switch_timer_timer_interface_set(swigCPtr, switch_timer_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_timer_timer_interface_get(swigCPtr); + switch_timer_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_timer_interface(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_apr_pool_t memory_pool { + set { + freeswitchPINVOKE.switch_timer_memory_pool_set(swigCPtr, SWIGTYPE_p_apr_pool_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_timer_memory_pool_get(swigCPtr); + SWIGTYPE_p_apr_pool_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_apr_pool_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_void private_info { + set { + freeswitchPINVOKE.switch_timer_private_info_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_timer_private_info_get(swigCPtr); + SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t diff { + set { + freeswitchPINVOKE.switch_timer_diff_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_timer_diff_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t tick { + set { + freeswitchPINVOKE.switch_timer_tick_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_timer_tick_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public switch_timer() : this(freeswitchPINVOKE.new_switch_timer(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_timer_flag_enum_t { + SWITCH_TIMER_FLAG_FREE_POOL = (1 << 0) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_timer_func_name_t { + SWITCH_TIMER_FUNC_TIMER_INIT, + SWITCH_TIMER_FUNC_TIMER_NEXT, + SWITCH_TIMER_FUNC_TIMER_STEP, + SWITCH_TIMER_FUNC_TIMER_SYNC, + SWITCH_TIMER_FUNC_TIMER_CHECK, + SWITCH_TIMER_FUNC_TIMER_DESTROY +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_timer_interface : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_timer_interface(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_timer_interface obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_timer_interface() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_timer_interface(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string interface_name { + set { + freeswitchPINVOKE.switch_timer_interface_interface_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_timer_interface_interface_name_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_timer__switch_status_t timer_init { + set { + freeswitchPINVOKE.switch_timer_interface_timer_init_set(swigCPtr, SWIGTYPE_p_f_p_switch_timer__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_timer_interface_timer_init_get(swigCPtr); + SWIGTYPE_p_f_p_switch_timer__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_timer__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_timer__switch_status_t timer_next { + set { + freeswitchPINVOKE.switch_timer_interface_timer_next_set(swigCPtr, SWIGTYPE_p_f_p_switch_timer__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_timer_interface_timer_next_get(swigCPtr); + SWIGTYPE_p_f_p_switch_timer__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_timer__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_timer__switch_status_t timer_step { + set { + freeswitchPINVOKE.switch_timer_interface_timer_step_set(swigCPtr, SWIGTYPE_p_f_p_switch_timer__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_timer_interface_timer_step_get(swigCPtr); + SWIGTYPE_p_f_p_switch_timer__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_timer__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_timer__switch_status_t timer_sync { + set { + freeswitchPINVOKE.switch_timer_interface_timer_sync_set(swigCPtr, SWIGTYPE_p_f_p_switch_timer__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_timer_interface_timer_sync_get(swigCPtr); + SWIGTYPE_p_f_p_switch_timer__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_timer__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_timer_enum_switch_bool_t__switch_status_t timer_check { + set { + freeswitchPINVOKE.switch_timer_interface_timer_check_set(swigCPtr, SWIGTYPE_p_f_p_switch_timer_enum_switch_bool_t__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_timer_interface_timer_check_get(swigCPtr); + SWIGTYPE_p_f_p_switch_timer_enum_switch_bool_t__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_timer_enum_switch_bool_t__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_f_p_switch_timer__switch_status_t timer_destroy { + set { + freeswitchPINVOKE.switch_timer_interface_timer_destroy_set(swigCPtr, SWIGTYPE_p_f_p_switch_timer__switch_status_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_timer_interface_timer_destroy_get(swigCPtr); + SWIGTYPE_p_f_p_switch_timer__switch_status_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_f_p_switch_timer__switch_status_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_thread_rwlock_t rwlock { + set { + freeswitchPINVOKE.switch_timer_interface_rwlock_set(swigCPtr, SWIGTYPE_p_switch_thread_rwlock_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_timer_interface_rwlock_get(swigCPtr); + SWIGTYPE_p_switch_thread_rwlock_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_thread_rwlock_t(cPtr, false); + return ret; + } + } + + public int refs { + set { + freeswitchPINVOKE.switch_timer_interface_refs_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_timer_interface_refs_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t reflock { + set { + freeswitchPINVOKE.switch_timer_interface_reflock_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_timer_interface_reflock_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_loadable_module_interface parent { + set { + freeswitchPINVOKE.switch_timer_interface_parent_set(swigCPtr, SWIGTYPE_p_switch_loadable_module_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_timer_interface_parent_get(swigCPtr); + SWIGTYPE_p_switch_loadable_module_interface ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_loadable_module_interface(cPtr, false); + return ret; + } + } + + public switch_timer_interface next { + set { + freeswitchPINVOKE.switch_timer_interface_next_set(swigCPtr, switch_timer_interface.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_timer_interface_next_get(swigCPtr); + switch_timer_interface ret = (cPtr == IntPtr.Zero) ? null : new switch_timer_interface(cPtr, false); + return ret; + } + } + + public switch_timer_interface() : this(freeswitchPINVOKE.new_switch_timer_interface(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_unicast_conninfo : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_unicast_conninfo(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_unicast_conninfo obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_unicast_conninfo() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_unicast_conninfo(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public SWIGTYPE_p_switch_core_session session { + set { + freeswitchPINVOKE.switch_unicast_conninfo_session_set(swigCPtr, SWIGTYPE_p_switch_core_session.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_unicast_conninfo_session_get(swigCPtr); + SWIGTYPE_p_switch_core_session ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_core_session(cPtr, false); + return ret; + } + } + + public switch_codec read_codec { + set { + freeswitchPINVOKE.switch_unicast_conninfo_read_codec_set(swigCPtr, switch_codec.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_unicast_conninfo_read_codec_get(swigCPtr); + switch_codec ret = (cPtr == IntPtr.Zero) ? null : new switch_codec(cPtr, false); + return ret; + } + } + + public switch_frame write_frame { + set { + freeswitchPINVOKE.switch_unicast_conninfo_write_frame_set(swigCPtr, switch_frame.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_unicast_conninfo_write_frame_get(swigCPtr); + switch_frame ret = (cPtr == IntPtr.Zero) ? null : new switch_frame(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_unsigned_char write_frame_data { + set { + freeswitchPINVOKE.switch_unicast_conninfo_write_frame_data_set(swigCPtr, SWIGTYPE_p_unsigned_char.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_unicast_conninfo_write_frame_data_get(swigCPtr); + SWIGTYPE_p_unsigned_char ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_char(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_socket_t socket { + set { + freeswitchPINVOKE.switch_unicast_conninfo_socket_set(swigCPtr, SWIGTYPE_p_switch_socket_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_unicast_conninfo_socket_get(swigCPtr); + SWIGTYPE_p_switch_socket_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_socket_t(cPtr, false); + return ret; + } + } + + public string local_ip { + set { + freeswitchPINVOKE.switch_unicast_conninfo_local_ip_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_unicast_conninfo_local_ip_get(swigCPtr); + return ret; + } + } + + public ushort local_port { + set { + freeswitchPINVOKE.switch_unicast_conninfo_local_port_set(swigCPtr, value); + } + get { + ushort ret = freeswitchPINVOKE.switch_unicast_conninfo_local_port_get(swigCPtr); + return ret; + } + } + + public string remote_ip { + set { + freeswitchPINVOKE.switch_unicast_conninfo_remote_ip_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_unicast_conninfo_remote_ip_get(swigCPtr); + return ret; + } + } + + public ushort remote_port { + set { + freeswitchPINVOKE.switch_unicast_conninfo_remote_port_set(swigCPtr, value); + } + get { + ushort ret = freeswitchPINVOKE.switch_unicast_conninfo_remote_port_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_sockaddr_t local_addr { + set { + freeswitchPINVOKE.switch_unicast_conninfo_local_addr_set(swigCPtr, SWIGTYPE_p_switch_sockaddr_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_unicast_conninfo_local_addr_get(swigCPtr); + SWIGTYPE_p_switch_sockaddr_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_sockaddr_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_sockaddr_t remote_addr { + set { + freeswitchPINVOKE.switch_unicast_conninfo_remote_addr_set(swigCPtr, SWIGTYPE_p_switch_sockaddr_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_unicast_conninfo_remote_addr_get(swigCPtr); + SWIGTYPE_p_switch_sockaddr_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_sockaddr_t(cPtr, false); + return ret; + } + } + + public SWIGTYPE_p_switch_mutex_t flag_mutex { + set { + freeswitchPINVOKE.switch_unicast_conninfo_flag_mutex_set(swigCPtr, SWIGTYPE_p_switch_mutex_t.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_unicast_conninfo_flag_mutex_get(swigCPtr); + SWIGTYPE_p_switch_mutex_t ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_switch_mutex_t(cPtr, false); + return ret; + } + } + + public int flags { + set { + freeswitchPINVOKE.switch_unicast_conninfo_flags_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_unicast_conninfo_flags_get(swigCPtr); + return ret; + } + } + + public int type { + set { + freeswitchPINVOKE.switch_unicast_conninfo_type_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_unicast_conninfo_type_get(swigCPtr); + return ret; + } + } + + public int transport { + set { + freeswitchPINVOKE.switch_unicast_conninfo_transport_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_unicast_conninfo_transport_get(swigCPtr); + return ret; + } + } + + public int stream_id { + set { + freeswitchPINVOKE.switch_unicast_conninfo_stream_id_set(swigCPtr, value); + } + get { + int ret = freeswitchPINVOKE.switch_unicast_conninfo_stream_id_get(swigCPtr); + return ret; + } + } + + public switch_unicast_conninfo() : this(freeswitchPINVOKE.new_switch_unicast_conninfo(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_unicast_flag_enum_t { + SUF_NONE = 0, + SUF_THREAD_RUNNING = (1 << 0), + SUF_READY = (1 << 1), + SUF_NATIVE = (1 << 2) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace FreeSWITCH.Native { + +public enum switch_uri_flags { + SWITCH_URI_NUMERIC_HOST = 1, + SWITCH_URI_NUMERIC_PORT = 2, + SWITCH_URI_NO_SCOPE = 4 +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_vad_flag_enum_t { + SWITCH_VAD_FLAG_TALKING = (1 << 0), + SWITCH_VAD_FLAG_EVENTS_TALK = (1 << 1), + SWITCH_VAD_FLAG_EVENTS_NOTALK = (1 << 2), + SWITCH_VAD_FLAG_CNG = (1 << 3) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_xml : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal switch_xml(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(switch_xml obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~switch_xml() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + freeswitchPINVOKE.delete_switch_xml(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public string name { + set { + freeswitchPINVOKE.switch_xml_name_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_xml_name_get(swigCPtr); + return ret; + } + } + + public string attr { + set { freeswitchPINVOKE.switch_xml_attr_set(swigCPtr, ref value); } + + get { + return freeswitchPINVOKE.switch_xml_attr_get(swigCPtr); + } + + } + + public string txt { + set { + freeswitchPINVOKE.switch_xml_txt_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_xml_txt_get(swigCPtr); + return ret; + } + } + + public string free_path { + set { + freeswitchPINVOKE.switch_xml_free_path_set(swigCPtr, value); + } + get { + string ret = freeswitchPINVOKE.switch_xml_free_path_get(swigCPtr); + return ret; + } + } + + public SWIGTYPE_p_switch_size_t off { + set { + freeswitchPINVOKE.switch_xml_off_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_xml_off_get(swigCPtr), true); + if (freeswitchPINVOKE.SWIGPendingException.Pending) throw freeswitchPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public switch_xml next { + set { + freeswitchPINVOKE.switch_xml_next_set(swigCPtr, switch_xml.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_next_get(swigCPtr); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + } + + public switch_xml sibling { + set { + freeswitchPINVOKE.switch_xml_sibling_set(swigCPtr, switch_xml.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_sibling_get(swigCPtr); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + } + + public switch_xml ordered { + set { + freeswitchPINVOKE.switch_xml_ordered_set(swigCPtr, switch_xml.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_ordered_get(swigCPtr); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + } + + public switch_xml child { + set { + freeswitchPINVOKE.switch_xml_child_set(swigCPtr, switch_xml.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_child_get(swigCPtr); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + } + + public switch_xml parent { + set { + freeswitchPINVOKE.switch_xml_parent_set(swigCPtr, switch_xml.getCPtr(value)); + } + get { + IntPtr cPtr = freeswitchPINVOKE.switch_xml_parent_get(swigCPtr); + switch_xml ret = (cPtr == IntPtr.Zero) ? null : new switch_xml(cPtr, false); + return ret; + } + } + + public uint flags { + set { + freeswitchPINVOKE.switch_xml_flags_set(swigCPtr, value); + } + get { + uint ret = freeswitchPINVOKE.switch_xml_flags_get(swigCPtr); + return ret; + } + } + + public switch_bool_t is_switch_xml_root_t { + set { + freeswitchPINVOKE.switch_xml_is_switch_xml_root_t_set(swigCPtr, (int)value); + } + get { + switch_bool_t ret = (switch_bool_t)freeswitchPINVOKE.switch_xml_is_switch_xml_root_t_get(swigCPtr); + return ret; + } + } + + public switch_xml() : this(freeswitchPINVOKE.new_switch_xml(), true) { + } + +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_xml_flag_t { + SWITCH_XML_ROOT = (1 << 0), + SWITCH_XML_NAMEM = (1 << 1), + SWITCH_XML_TXTM = (1 << 2), + SWITCH_XML_DUP = (1 << 3) +} + +} +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.0 + * + * 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 switch_xml_section_enum_t { + SWITCH_XML_SECTION_RESULT = 0, + SWITCH_XML_SECTION_CONFIG = (1 << 0), + SWITCH_XML_SECTION_DIRECTORY = (1 << 1), + SWITCH_XML_SECTION_DIALPLAN = (1 << 2), + SWITCH_XML_SECTION_PHRASES = (1 << 3), + SWITCH_XML_SECTION_MAX = (1 << 4) +} + +} diff --git a/src/mod/languages/mod_managed/mod_managed.2010.vcxproj b/src/mod/languages/mod_managed/mod_managed.2010.vcxproj index c3d95dd178..76ce260a91 100644 --- a/src/mod/languages/mod_managed/mod_managed.2010.vcxproj +++ b/src/mod/languages/mod_managed/mod_managed.2010.vcxproj @@ -54,7 +54,7 @@ DynamicLibrary - Unicode + MultiByte true true @@ -76,7 +76,7 @@ DynamicLibrary - Unicode + MultiByte true true @@ -173,7 +173,6 @@ shlwapi.lib;mscoree.lib;%(AdditionalDependencies) - $(SolutionDir)$(Platform)\Debug/mod/$(ProjectName).dll true @@ -211,7 +210,6 @@ 4505;%(DisableSpecificWarnings) - $(SolutionDir)$(Platform)\release/mod/$(ProjectName).dll true @@ -308,7 +306,7 @@ - + From 3da403d7e5489937cda98ccc38451ab6082b8f3a Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Mon, 26 Jul 2010 13:34:11 -0500 Subject: [PATCH 058/161] VS 2010 sound output location fix for x64 targets --- Freeswitch.2010.sln | 32 +++++------ libs/win32/Sound_Files/16khz.2010.vcxproj | 53 +++++++++++++++++++ .../win32/Sound_Files/16khzmusic.2010.vcxproj | 37 +++++++++++++ libs/win32/Sound_Files/32khz.2010.vcxproj | 53 +++++++++++++++++++ .../win32/Sound_Files/32khzmusic.2010.vcxproj | 35 ++++++++++++ libs/win32/Sound_Files/8khz.2010.vcxproj | 53 +++++++++++++++++++ libs/win32/Sound_Files/8khzmusic.2010.vcxproj | 37 +++++++++++++ 7 files changed, 284 insertions(+), 16 deletions(-) diff --git a/Freeswitch.2010.sln b/Freeswitch.2010.sln index 6c11e31c55..4e450238bd 100644 --- a/Freeswitch.2010.sln +++ b/Freeswitch.2010.sln @@ -1597,18 +1597,18 @@ Global {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.All|x64.Build.0 = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.ActiveCfg = Debug|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.Build.0 = Debug|Win32 - {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.ActiveCfg = Debug|Win32 - {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.ActiveCfg = Debug|x64 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.Build.0 = Debug|x64 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.ActiveCfg = Release|Win32 {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.Build.0 = Release|Win32 - {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.ActiveCfg = Release|Win32 - {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.ActiveCfg = Release|x64 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.Build.0 = Release|x64 {7EB71250-F002-4ED8-92CA-CA218114537A}.All|Win32.ActiveCfg = Release|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.All|x64.ActiveCfg = Release|Win32 {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|Win32.ActiveCfg = Debug|Win32 - {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x64.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x64.ActiveCfg = Debug|x64 {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Win32.ActiveCfg = Release|Win32 - {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64.ActiveCfg = Release|x64 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|Win32.ActiveCfg = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.All|x64.ActiveCfg = Release|Win32 {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|Win32.ActiveCfg = Debug|Win32 @@ -1618,9 +1618,9 @@ Global {464AAB78-5489-4916-BE51-BF8D61822311}.All|Win32.ActiveCfg = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.All|x64.ActiveCfg = Release|Win32 {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|Win32.ActiveCfg = Debug|Win32 - {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x64.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x64.ActiveCfg = Debug|x64 {464AAB78-5489-4916-BE51-BF8D61822311}.Release|Win32.ActiveCfg = Release|Win32 - {464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.All|Win32.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.All|x64.ActiveCfg = Release|x64 {0AD1177E-1FD8-4643-9391-431467A11084}.All|x64.Build.0 = Release|x64 @@ -2030,24 +2030,24 @@ Global {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.All|x64.Build.0 = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|Win32.ActiveCfg = Debug|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|Win32.Build.0 = Debug|Win32 - {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.ActiveCfg = Debug|Win32 - {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.Build.0 = Debug|Win32 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.ActiveCfg = Debug|x64 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Debug|x64.Build.0 = Debug|x64 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|Win32.ActiveCfg = Release|Win32 {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|Win32.Build.0 = Release|Win32 - {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.ActiveCfg = Release|Win32 - {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.Build.0 = Release|Win32 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.ActiveCfg = Release|x64 + {D1ABE208-6442-4FB4-9AAD-1677E41BC870}.Release|x64.Build.0 = Release|x64 {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|Win32.ActiveCfg = Release|Win32 {BA599D0A-4310-4505-91DA-6A6447B3E289}.All|x64.ActiveCfg = Release|Win32 {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|Win32.ActiveCfg = Debug|Win32 - {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|x64.ActiveCfg = Debug|Win32 + {BA599D0A-4310-4505-91DA-6A6447B3E289}.Debug|x64.ActiveCfg = Debug|x64 {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|Win32.ActiveCfg = Release|Win32 - {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|x64.ActiveCfg = Release|Win32 + {BA599D0A-4310-4505-91DA-6A6447B3E289}.Release|x64.ActiveCfg = Release|x64 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|Win32.ActiveCfg = Release|Win32 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.All|x64.ActiveCfg = Release|Win32 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|Win32.ActiveCfg = Debug|Win32 - {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|x64.ActiveCfg = Debug|Win32 + {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Debug|x64.ActiveCfg = Debug|x64 {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|Win32.ActiveCfg = Release|Win32 - {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|x64.ActiveCfg = Release|Win32 + {EED13FC7-4F81-4E6F-93DB-CDB7DF5CF959}.Release|x64.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.All|Win32.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x64.ActiveCfg = Release|x64 {70564D74-199A-4452-9C60-19ED5F242F0D}.All|x64.Build.0 = Release|x64 diff --git a/libs/win32/Sound_Files/16khz.2010.vcxproj b/libs/win32/Sound_Files/16khz.2010.vcxproj index 8c62a2d004..2d11a5232b 100644 --- a/libs/win32/Sound_Files/16khz.2010.vcxproj +++ b/libs/win32/Sound_Files/16khz.2010.vcxproj @@ -5,10 +5,18 @@ Debug Win32 + + Debug + x64 + Release Win32 + + Release + x64 + 16khz @@ -21,10 +29,19 @@ MultiByte true + + Utility + MultiByte + true + Utility MultiByte + + Utility + MultiByte + @@ -32,10 +49,18 @@ + + + + + + + + <_ProjectFileVersion>10.0.30319.1 @@ -51,6 +76,20 @@ xcopy "$(SolutionDir)libs\sounds\en\us\callie\ascii\16000\*.*" "$(OutDir)sounds\ xcopy "$(SolutionDir)libs\sounds\en\us\callie\misc\16000\*.*" "$(OutDir)sounds\en\us\callie\misc\16000" /C /D /Y /S /I xcopy "$(SolutionDir)libs\sounds\en\us\callie\currency\16000\*.*" "$(OutDir)sounds\en\us\callie\currency\16000" /C /D /Y /S /I xcopy "$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\16000\*.*" "$(OutDir)sounds\en\us\callie\phonetic-ascii\16000" /C /D /Y /S /I + + + + + + xcopy "$(SolutionDir)libs\sounds\en\us\callie\voicemail\16000\*.*" "$(OutDir)sounds\en\us\callie\voicemail\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\ivr\16000\*.*" "$(OutDir)sounds\en\us\callie\ivr\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\conference\16000\*.*" "$(OutDir)sounds\en\us\callie\conference\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\time\16000\*.*" "$(OutDir)sounds\en\us\callie\time\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\digits\16000\*.*" "$(OutDir)sounds\en\us\callie\digits\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\ascii\16000\*.*" "$(OutDir)sounds\en\us\callie\ascii\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\misc\16000\*.*" "$(OutDir)sounds\en\us\callie\misc\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\currency\16000\*.*" "$(OutDir)sounds\en\us\callie\currency\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\16000\*.*" "$(OutDir)sounds\en\us\callie\phonetic-ascii\16000" /C /D /Y /S /I @@ -65,6 +104,20 @@ xcopy "$(SolutionDir)libs\sounds\en\us\callie\ascii\16000\*.*" "$(OutDir)sounds\ xcopy "$(SolutionDir)libs\sounds\en\us\callie\misc\16000\*.*" "$(OutDir)sounds\en\us\callie\misc\16000" /C /D /Y /S /I xcopy "$(SolutionDir)libs\sounds\en\us\callie\currency\16000\*.*" "$(OutDir)sounds\en\us\callie\currency\16000" /C /D /Y /S /I xcopy "$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\16000\*.*" "$(OutDir)sounds\en\us\callie\phonetic-ascii\16000" /C /D /Y /S /I + + + + + + xcopy "$(SolutionDir)libs\sounds\en\us\callie\voicemail\16000\*.*" "$(OutDir)sounds\en\us\callie\voicemail\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\ivr\16000\*.*" "$(OutDir)sounds\en\us\callie\ivr\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\conference\16000\*.*" "$(OutDir)sounds\en\us\callie\conference\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\time\16000\*.*" "$(OutDir)sounds\en\us\callie\time\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\digits\16000\*.*" "$(OutDir)sounds\en\us\callie\digits\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\ascii\16000\*.*" "$(OutDir)sounds\en\us\callie\ascii\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\misc\16000\*.*" "$(OutDir)sounds\en\us\callie\misc\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\currency\16000\*.*" "$(OutDir)sounds\en\us\callie\currency\16000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\16000\*.*" "$(OutDir)sounds\en\us\callie\phonetic-ascii\16000" /C /D /Y /S /I diff --git a/libs/win32/Sound_Files/16khzmusic.2010.vcxproj b/libs/win32/Sound_Files/16khzmusic.2010.vcxproj index 3dfa8b4d18..7f1d98f869 100644 --- a/libs/win32/Sound_Files/16khzmusic.2010.vcxproj +++ b/libs/win32/Sound_Files/16khzmusic.2010.vcxproj @@ -5,10 +5,18 @@ Debug Win32 + + Debug + x64 + Release Win32 + + Release + x64 + 16khz music @@ -21,10 +29,19 @@ MultiByte true + + Utility + MultiByte + true + Utility MultiByte + + Utility + MultiByte + @@ -32,10 +49,18 @@ + + + + + + + + <_ProjectFileVersion>10.0.30319.1 @@ -43,12 +68,24 @@ xcopy "$(SolutionDir)libs\sounds\music\16000\*.*" "$(OutDir)sounds\music\16000" /C /D /Y /S /I + + + + + + xcopy "$(SolutionDir)libs\sounds\music\16000\*.*" "$(OutDir)sounds\music\16000" /C /D /Y /S /I xcopy "$(SolutionDir)libs\sounds\music\16000\*.*" "$(OutDir)sounds\music\16000" /C /D /Y /S /I + + + + + + xcopy "$(SolutionDir)libs\sounds\music\16000\*.*" "$(OutDir)sounds\music\16000" /C /D /Y /S /I diff --git a/libs/win32/Sound_Files/32khz.2010.vcxproj b/libs/win32/Sound_Files/32khz.2010.vcxproj index 1546fba1f1..32651e40dd 100644 --- a/libs/win32/Sound_Files/32khz.2010.vcxproj +++ b/libs/win32/Sound_Files/32khz.2010.vcxproj @@ -5,10 +5,18 @@ Debug Win32 + + Debug + x64 + Release Win32 + + Release + x64 + 32khz @@ -21,10 +29,19 @@ MultiByte true + + Utility + MultiByte + true + Utility MultiByte + + Utility + MultiByte + @@ -32,10 +49,18 @@ + + + + + + + + <_ProjectFileVersion>10.0.30319.1 @@ -51,6 +76,20 @@ xcopy "$(SolutionDir)libs\sounds\en\us\callie\ascii\32000\*.*" "$(OutDir)sounds\ xcopy "$(SolutionDir)libs\sounds\en\us\callie\misc\32000\*.*" "$(OutDir)sounds\en\us\callie\misc\32000" /C /D /Y /S /I xcopy "$(SolutionDir)libs\sounds\en\us\callie\currency\32000\*.*" "$(OutDir)sounds\en\us\callie\currency\32000" /C /D /Y /S /I xcopy "$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\32000\*.*" "$(OutDir)sounds\en\us\callie\phonetic-ascii\32000" /C /D /Y /S /I + + + + + + xcopy "$(SolutionDir)libs\sounds\en\us\callie\voicemail\32000\*.*" "$(OutDir)sounds\en\us\callie\voicemail\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\ivr\32000\*.*" "$(OutDir)sounds\en\us\callie\ivr\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\conference\32000\*.*" "$(OutDir)sounds\en\us\callie\conference\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\time\32000\*.*" "$(OutDir)sounds\en\us\callie\time\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\digits\32000\*.*" "$(OutDir)sounds\en\us\callie\digits\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\ascii\32000\*.*" "$(OutDir)sounds\en\us\callie\ascii\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\misc\32000\*.*" "$(OutDir)sounds\en\us\callie\misc\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\currency\32000\*.*" "$(OutDir)sounds\en\us\callie\currency\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\32000\*.*" "$(OutDir)sounds\en\us\callie\phonetic-ascii\32000" /C /D /Y /S /I @@ -65,6 +104,20 @@ xcopy "$(SolutionDir)libs\sounds\en\us\callie\ascii\32000\*.*" "$(OutDir)sounds\ xcopy "$(SolutionDir)libs\sounds\en\us\callie\misc\32000\*.*" "$(OutDir)sounds\en\us\callie\misc\32000" /C /D /Y /S /I xcopy "$(SolutionDir)libs\sounds\en\us\callie\currency\32000\*.*" "$(OutDir)sounds\en\us\callie\currency\32000" /C /D /Y /S /I xcopy "$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\32000\*.*" "$(OutDir)sounds\en\us\callie\phonetic-ascii\32000" /C /D /Y /S /I + + + + + + xcopy "$(SolutionDir)libs\sounds\en\us\callie\voicemail\32000\*.*" "$(OutDir)sounds\en\us\callie\voicemail\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\ivr\32000\*.*" "$(OutDir)sounds\en\us\callie\ivr\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\conference\32000\*.*" "$(OutDir)sounds\en\us\callie\conference\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\time\32000\*.*" "$(OutDir)sounds\en\us\callie\time\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\digits\32000\*.*" "$(OutDir)sounds\en\us\callie\digits\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\ascii\32000\*.*" "$(OutDir)sounds\en\us\callie\ascii\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\misc\32000\*.*" "$(OutDir)sounds\en\us\callie\misc\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\currency\32000\*.*" "$(OutDir)sounds\en\us\callie\currency\32000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\32000\*.*" "$(OutDir)sounds\en\us\callie\phonetic-ascii\32000" /C /D /Y /S /I diff --git a/libs/win32/Sound_Files/32khzmusic.2010.vcxproj b/libs/win32/Sound_Files/32khzmusic.2010.vcxproj index e3e1e403c8..3ce6f0488e 100644 --- a/libs/win32/Sound_Files/32khzmusic.2010.vcxproj +++ b/libs/win32/Sound_Files/32khzmusic.2010.vcxproj @@ -5,10 +5,18 @@ Debug Win32 + + Debug + x64 + Release Win32 + + Release + x64 + 32khz music @@ -21,10 +29,19 @@ MultiByte true + + Utility + MultiByte + true + Utility MultiByte + + Utility + MultiByte + @@ -32,10 +49,18 @@ + + + + + + + + <_ProjectFileVersion>10.0.30319.1 @@ -45,11 +70,21 @@ xcopy "$(SolutionDir)libs\sounds\music\32000\*.*" "$(OutDir)sounds\music\32000" /C /D /Y /S /I + + + xcopy "$(SolutionDir)libs\sounds\music\32000\*.*" "$(OutDir)sounds\music\32000" /C /D /Y /S /I + + xcopy "$(SolutionDir)libs\sounds\music\32000\*.*" "$(OutDir)sounds\music\32000" /C /D /Y /S /I + + + xcopy "$(SolutionDir)libs\sounds\music\32000\*.*" "$(OutDir)sounds\music\32000" /C /D /Y /S /I + + {1f0a8a77-e661-418f-bb92-82172ae43803} diff --git a/libs/win32/Sound_Files/8khz.2010.vcxproj b/libs/win32/Sound_Files/8khz.2010.vcxproj index c5309f85e3..1535b2c4ce 100644 --- a/libs/win32/Sound_Files/8khz.2010.vcxproj +++ b/libs/win32/Sound_Files/8khz.2010.vcxproj @@ -5,10 +5,18 @@ Debug Win32 + + Debug + x64 + Release Win32 + + Release + x64 + 8khz @@ -21,10 +29,19 @@ MultiByte true + + Utility + MultiByte + true + Utility MultiByte + + Utility + MultiByte + @@ -32,10 +49,18 @@ + + + + + + + + <_ProjectFileVersion>10.0.30319.1 @@ -51,6 +76,20 @@ xcopy "$(SolutionDir)libs\sounds\en\us\callie\ascii\8000\*.*" "$(OutDir)sounds\e xcopy "$(SolutionDir)libs\sounds\en\us\callie\misc\8000\*.*" "$(OutDir)sounds\en\us\callie\misc\8000" /C /D /Y /S /I xcopy "$(SolutionDir)libs\sounds\en\us\callie\currency\8000\*.*" "$(OutDir)sounds\en\us\callie\currency\8000" /C /D /Y /S /I xcopy "$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\8000\*.*" "$(OutDir)sounds\en\us\callie\phonetic-ascii\8000" /C /D /Y /S /I + + + + + + xcopy "$(SolutionDir)libs\sounds\en\us\callie\voicemail\8000\*.*" "$(OutDir)sounds\en\us\callie\voicemail\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\ivr\8000\*.*" "$(OutDir)sounds\en\us\callie\ivr\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\conference\8000\*.*" "$(OutDir)sounds\en\us\callie\conference\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\time\8000\*.*" "$(OutDir)sounds\en\us\callie\time\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\digits\8000\*.*" "$(OutDir)sounds\en\us\callie\digits\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\ascii\8000\*.*" "$(OutDir)sounds\en\us\callie\ascii\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\misc\8000\*.*" "$(OutDir)sounds\en\us\callie\misc\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\currency\8000\*.*" "$(OutDir)sounds\en\us\callie\currency\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\8000\*.*" "$(OutDir)sounds\en\us\callie\phonetic-ascii\8000" /C /D /Y /S /I @@ -65,6 +104,20 @@ xcopy "$(SolutionDir)libs\sounds\en\us\callie\ascii\8000\*.*" "$(OutDir)sounds\e xcopy "$(SolutionDir)libs\sounds\en\us\callie\misc\8000\*.*" "$(OutDir)sounds\en\us\callie\misc\8000" /C /D /Y /S /I xcopy "$(SolutionDir)libs\sounds\en\us\callie\currency\8000\*.*" "$(OutDir)sounds\en\us\callie\currency\8000" /C /D /Y /S /I xcopy "$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\8000\*.*" "$(OutDir)sounds\en\us\callie\phonetic-ascii\8000" /C /D /Y /S /I + + + + + + xcopy "$(SolutionDir)libs\sounds\en\us\callie\voicemail\8000\*.*" "$(OutDir)sounds\en\us\callie\voicemail\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\ivr\8000\*.*" "$(OutDir)sounds\en\us\callie\ivr\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\conference\8000\*.*" "$(OutDir)sounds\en\us\callie\conference\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\time\8000\*.*" "$(OutDir)sounds\en\us\callie\time\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\digits\8000\*.*" "$(OutDir)sounds\en\us\callie\digits\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\ascii\8000\*.*" "$(OutDir)sounds\en\us\callie\ascii\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\misc\8000\*.*" "$(OutDir)sounds\en\us\callie\misc\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\currency\8000\*.*" "$(OutDir)sounds\en\us\callie\currency\8000" /C /D /Y /S /I +xcopy "$(SolutionDir)libs\sounds\en\us\callie\phonetic-ascii\8000\*.*" "$(OutDir)sounds\en\us\callie\phonetic-ascii\8000" /C /D /Y /S /I diff --git a/libs/win32/Sound_Files/8khzmusic.2010.vcxproj b/libs/win32/Sound_Files/8khzmusic.2010.vcxproj index d8744c0958..76fbcc57c4 100644 --- a/libs/win32/Sound_Files/8khzmusic.2010.vcxproj +++ b/libs/win32/Sound_Files/8khzmusic.2010.vcxproj @@ -5,10 +5,18 @@ Debug Win32 + + Debug + x64 + Release Win32 + + Release + x64 + 8khz music @@ -21,10 +29,19 @@ MultiByte true + + Utility + MultiByte + true + Utility MultiByte + + Utility + MultiByte + @@ -32,10 +49,18 @@ + + + + + + + + <_ProjectFileVersion>10.0.30319.1 @@ -43,12 +68,24 @@ xcopy "$(SolutionDir)libs\sounds\music\8000\*.*" "$(OutDir)sounds\music\8000" /C /D /Y /S /I + + + + + + xcopy "$(SolutionDir)libs\sounds\music\8000\*.*" "$(OutDir)sounds\music\8000" /C /D /Y /S /I xcopy "$(SolutionDir)libs\sounds\music\8000\*.*" "$(OutDir)sounds\music\8000" /C /D /Y /S /I + + + + + + xcopy "$(SolutionDir)libs\sounds\music\8000\*.*" "$(OutDir)sounds\music\8000" /C /D /Y /S /I From 6bb5703e1670aa91bf2ed8243d26716bc76bcf27 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Mon, 26 Jul 2010 16:12:55 -0400 Subject: [PATCH 059/161] don't delete on fifo reparse --- src/mod/applications/mod_fifo/mod_fifo.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/mod/applications/mod_fifo/mod_fifo.c b/src/mod/applications/mod_fifo/mod_fifo.c index 925a618c74..fa05457900 100644 --- a/src/mod/applications/mod_fifo/mod_fifo.c +++ b/src/mod/applications/mod_fifo/mod_fifo.c @@ -3847,14 +3847,19 @@ static switch_status_t load_config(int reload, int del_all) goto done; } - switch_cache_db_test_reactive(dbh, "delete from fifo_outbound where static = 1 or taking_calls < 0 or stop_time < 0", - "drop table fifo_outbound", outbound_sql); - switch_cache_db_test_reactive(dbh, "delete from fifo_bridge", "drop table fifo_bridge", bridge_sql); - switch_cache_db_test_reactive(dbh, "delete from fifo_callers", "drop table fifo_callers", callers_sql); + if (!reload) { + switch_cache_db_test_reactive(dbh, "delete from fifo_outbound where static = 1 or taking_calls < 0 or stop_time < 0", + "drop table fifo_outbound", outbound_sql); + switch_cache_db_test_reactive(dbh, "delete from fifo_bridge", "drop table fifo_bridge", bridge_sql); + switch_cache_db_test_reactive(dbh, "delete from fifo_callers", "drop table fifo_callers", callers_sql); + } + switch_cache_db_release_db_handle(&dbh); - fifo_execute_sql("update fifo_outbound set start_time=0,stop_time=0,ring_count=0,use_count=0," - "outbound_call_count=0,outbound_fail_count=0 where static=0", globals.sql_mutex); + if (!reload) { + fifo_execute_sql("update fifo_outbound set start_time=0,stop_time=0,ring_count=0,use_count=0," + "outbound_call_count=0,outbound_fail_count=0 where static=0", globals.sql_mutex); + } if (reload) { switch_hash_index_t *hi; From 54b768eede6c531d22210d008be2ff5a21f7021b Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 26 Jul 2010 18:53:52 -0500 Subject: [PATCH 060/161] fifo tweaks --- src/mod/applications/mod_fifo/mod_fifo.c | 80 ++++++++++++++++-------- 1 file changed, 55 insertions(+), 25 deletions(-) diff --git a/src/mod/applications/mod_fifo/mod_fifo.c b/src/mod/applications/mod_fifo/mod_fifo.c index fa05457900..02158f32fe 100644 --- a/src/mod/applications/mod_fifo/mod_fifo.c +++ b/src/mod/applications/mod_fifo/mod_fifo.c @@ -750,6 +750,8 @@ static switch_bool_t fifo_execute_sql_callback(switch_mutex_t *mutex, char *sql, goto end; } + if (globals.debug > 1) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "sql: %s\n", sql); + switch_cache_db_execute_sql_callback(dbh, sql, callback, pdata, &errmsg); if (errmsg) { @@ -1749,6 +1751,7 @@ static void *SWITCH_THREAD_FUNC node_thread_run(switch_thread_t *thread, void *o for (hi = switch_hash_first(NULL, globals.fifo_hash); hi; hi = switch_hash_next(hi)) { switch_hash_this(hi, &var, NULL, &val); if ((node = (fifo_node_t *) val)) { + if (node->outbound_priority == 0) node->outbound_priority = 5; if (node->has_outbound && node->ready && !node->busy && node->outbound_priority == cur_priority) { ppl_waiting = node_consumer_wait_count(node); consumer_total = node->consumer_count; @@ -2146,11 +2149,6 @@ SWITCH_STANDARD_APP(fifo_function) const char *arg_inout = NULL; const char *serviced_uuid = NULL; - if (switch_core_event_hook_remove_receive_message(session, messagehook) == SWITCH_STATUS_SUCCESS) { - dec_use_count(session, SWITCH_FALSE); - switch_core_event_hook_remove_state_change(session, hanguphook); - } - if (!globals.running) { return; } @@ -2488,6 +2486,11 @@ SWITCH_STANDARD_APP(fifo_function) //const char *track_use_count = switch_channel_get_variable(channel, "fifo_track_use_count"); //int do_track = switch_true(track_use_count); + if (switch_core_event_hook_remove_receive_message(session, messagehook) == SWITCH_STATUS_SUCCESS) { + dec_use_count(session, SWITCH_FALSE); + switch_core_event_hook_remove_state_change(session, hanguphook); + } + if (!zstr(strat_str)) { if (!strcasecmp(strat_str, "more_ppl")) { strat = STRAT_MORE_PPL; @@ -3056,6 +3059,12 @@ SWITCH_STANDARD_APP(fifo_function) switch_mutex_unlock(node->mutex); } } + + if (outbound_id && switch_channel_up(channel)) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s is still alive, tracking call.\n", switch_channel_get_name(channel)); + fifo_track_call_function(session, outbound_id); + } + } done: @@ -3543,9 +3552,26 @@ void node_dump(switch_stream_handle_t *stream) for (hi = switch_hash_first(NULL, globals.fifo_hash); hi; hi = switch_hash_next(hi)) { switch_hash_this(hi, NULL, NULL, &val); if ((node = (fifo_node_t *) val)) { - stream->write_function(stream, "node: %s outbound_name=%s outbound_per_cycle=%d outbound_priority=%d outbound_strategy=%s\n", - node->name, node->outbound_name, node->outbound_per_cycle, - node->outbound_priority, strat_parse(node->outbound_strategy)); + stream->write_function(stream, "node: %s\n" + " outbound_name: %s\n" + " outbound_per_cycle: %d" + " outbound_priority: %d" + " outbound_strategy: %s\n" + " has_outbound: %d\n" + " outbound_priority: %d\n" + " busy: %d\n" + " ready: %d\n" + " waiting: %d\n" + , + node->name, node->outbound_name, node->outbound_per_cycle, + node->outbound_priority, strat_parse(node->outbound_strategy), + node->has_outbound, + node->outbound_priority, + node->busy, + node->ready, + node_consumer_wait_count(node) + + ); } } @@ -3911,9 +3937,6 @@ static switch_status_t load_config(int reload, int del_all) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s is a reserved name, use another name please.\n", MANUAL_QUEUE_NAME); continue; } - - outbound_strategy = switch_xml_attr(fifo, "outbound_strategy"); - if ((val = switch_xml_attr(fifo, "importance"))) { if ((imp = atoi(val)) < 0) { @@ -3921,20 +3944,6 @@ static switch_status_t load_config(int reload, int del_all) } } - if ((val = switch_xml_attr(fifo, "outbound_per_cycle"))) { - if ((outbound_per_cycle = atoi(val)) < 0) { - outbound_per_cycle = 0; - } - } - - if ((val = switch_xml_attr(fifo, "outbound_priority"))) { - outbound_priority = atoi(val); - - if (outbound_priority < 1 || outbound_priority > 10) { - outbound_priority = 5; - } - } - switch_mutex_lock(globals.mutex); if (!(node = switch_core_hash_find(globals.fifo_hash, name))) { node = create_node(name, imp, globals.sql_mutex); @@ -3949,13 +3958,34 @@ static switch_status_t load_config(int reload, int del_all) switch_assert(node); switch_mutex_lock(node->mutex); + + outbound_strategy = switch_xml_attr(fifo, "outbound_strategy"); + + if ((val = switch_xml_attr(fifo, "outbound_per_cycle"))) { + if ((outbound_per_cycle = atoi(val)) < 0) { + outbound_per_cycle = 1; + } + node->has_outbound = 1; + } + + if ((val = switch_xml_attr(fifo, "outbound_priority"))) { + outbound_priority = atoi(val); + + if (outbound_priority < 1 || outbound_priority > 10) { + outbound_priority = 5; + } + node->has_outbound = 1; + } + + node->outbound_per_cycle = outbound_per_cycle; node->outbound_priority = outbound_priority; if (outbound_strategy) { node->outbound_strategy = parse_strat(outbound_strategy); + node->has_outbound = 1; } for (member = switch_xml_child(fifo, "member"); member; member = member->next) { From 4c64ce416243627b47800c37da8620087b767ed3 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Tue, 27 Jul 2010 09:16:26 -0500 Subject: [PATCH 061/161] VS2010 tweak x64 release --- src/mod/codecs/mod_amr/mod_amr.2010.vcxproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/mod/codecs/mod_amr/mod_amr.2010.vcxproj b/src/mod/codecs/mod_amr/mod_amr.2010.vcxproj index 36845bb92e..409ee01c40 100644 --- a/src/mod/codecs/mod_amr/mod_amr.2010.vcxproj +++ b/src/mod/codecs/mod_amr/mod_amr.2010.vcxproj @@ -234,8 +234,6 @@ - - false From c8f9fb565c2e72d3db08a587479dbb97e1ca4eb5 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Tue, 27 Jul 2010 09:23:56 -0500 Subject: [PATCH 062/161] FSCORE-641 Windows: Don't report "unknown command" on console when empty command has been given --- src/switch_console.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/switch_console.c b/src/switch_console.c index 472cdc48d3..e82290bce7 100644 --- a/src/switch_console.c +++ b/src/switch_console.c @@ -1472,11 +1472,12 @@ SWITCH_DECLARE(void) switch_console_loop(void) if (console_readConsole(stdinHandle, keys, (int) sizeof(keys), &read, &key)) { if (console_bufferInput(keys, read, cmd, key)) { if (!strcmp(cmd, "Empty")) { - cmd[0] = '\n'; - cmd[1] = 0; + cmd[0] = 0; } activity = 1; - running = switch_console_process(cmd); + if (cmd[0]) { + running = switch_console_process(cmd); + } memset(cmd, 0, sizeof(cmd)); } } From 21d20ac3f8774bca63ea7959f6683c854ddb4f26 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 27 Jul 2010 10:46:04 -0500 Subject: [PATCH 063/161] revert patch, breaks fs_cli --- src/switch_loadable_module.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/switch_loadable_module.c b/src/switch_loadable_module.c index 811383817c..97cb5e8d70 100644 --- a/src/switch_loadable_module.c +++ b/src/switch_loadable_module.c @@ -1627,8 +1627,7 @@ SWITCH_DECLARE(switch_status_t) switch_api_execute(const char *cmd, const char * { switch_api_interface_t *api; switch_status_t status; - char *myarg = NULL, *argp = NULL; - + switch_assert(stream != NULL); switch_assert(stream->data != NULL); switch_assert(stream->write_function != NULL); @@ -1637,25 +1636,18 @@ SWITCH_DECLARE(switch_status_t) switch_api_execute(const char *cmd, const char * switch_event_create(&stream->param_event, SWITCH_EVENT_API); } - if (arg) { - myarg = strdup(arg); - argp = myarg; - while(*argp == ' ') argp++; - while(end_of(argp) == ' ') end_of(argp) = '\0'; - } - if (stream->param_event) { if (cmd) { switch_event_add_header_string(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command", cmd); } - if (argp) { - switch_event_add_header_string(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command-Argument", argp); + if (arg) { + switch_event_add_header_string(stream->param_event, SWITCH_STACK_BOTTOM, "API-Command-Argument", arg); } } if (cmd && (api = switch_loadable_module_get_api_interface(cmd)) != 0) { - if ((status = api->function(argp, session, stream)) != SWITCH_STATUS_SUCCESS) { + if ((status = api->function(arg, session, stream)) != SWITCH_STATUS_SUCCESS) { stream->write_function(stream, "COMMAND RETURNED ERROR!\n"); } UNPROTECT_INTERFACE(api); @@ -1668,8 +1660,7 @@ SWITCH_DECLARE(switch_status_t) switch_api_execute(const char *cmd, const char * switch_event_fire(&stream->param_event); } - switch_safe_free(myarg); - + return status; } From 9b4aca3b789df276cb2c345a9483e5f091d7dd2a Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 27 Jul 2010 11:11:16 -0500 Subject: [PATCH 064/161] fix regression --- src/mod/languages/mod_spidermonkey/mod_spidermonkey.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c index 77515a689e..16679d7ffa 100644 --- a/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c +++ b/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c @@ -3060,9 +3060,6 @@ static void session_destroy(JSContext * cx, JSObject * obj) if (cx && obj) { if ((jss = JS_GetPrivate(cx, obj))) { - jsval rval; - - check_hangup_hook(jss, &rval); JS_SetPrivate(cx, obj, NULL); if (jss->speech && *jss->speech->sh.name) { From 165140e0769cd84646c3f9ac4e6104bdff78e403 Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Tue, 27 Jul 2010 23:46:18 +0200 Subject: [PATCH 065/161] Skinny: ib_calls stats --- src/mod/endpoints/mod_skinny/skinny_server.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mod/endpoints/mod_skinny/skinny_server.c b/src/mod/endpoints/mod_skinny/skinny_server.c index 0210333825..b0f622c212 100644 --- a/src/mod/endpoints/mod_skinny/skinny_server.c +++ b/src/mod/endpoints/mod_skinny/skinny_server.c @@ -177,10 +177,12 @@ error: switch_core_session_destroy(&nsession); } + listener->profile->ib_failed_calls++; return SWITCH_STATUS_FALSE; done: *session = nsession; + listener->profile->ib_calls++; return SWITCH_STATUS_SUCCESS; } From 2d1c5c8dfa4670b97ab3a87733dc717f85529b6c Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Tue, 27 Jul 2010 23:47:44 +0200 Subject: [PATCH 066/161] Skinny: don't hangup remote calls --- src/mod/endpoints/mod_skinny/skinny_server.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/mod/endpoints/mod_skinny/skinny_server.c b/src/mod/endpoints/mod_skinny/skinny_server.c index b0f622c212..194157a215 100644 --- a/src/mod/endpoints/mod_skinny/skinny_server.c +++ b/src/mod/endpoints/mod_skinny/skinny_server.c @@ -1268,7 +1268,9 @@ switch_status_t skinny_handle_on_hook_message(listener_t *listener, skinny_messa channel = switch_core_session_get_channel(session); - switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); + if (skinny_line_get_state(listener, line_instance, call_id) != SKINNY_IN_USE_REMOTELY) { + switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); + } } if(session) { From 53f75e9c94a122a10be264c09d33d89633c6dd9d Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Tue, 27 Jul 2010 23:50:56 +0200 Subject: [PATCH 067/161] Skinny: blind transfer MODSKINNY-10 --- src/mod/endpoints/mod_skinny/skinny_server.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/mod/endpoints/mod_skinny/skinny_server.c b/src/mod/endpoints/mod_skinny/skinny_server.c index 194157a215..da9513a5b5 100644 --- a/src/mod/endpoints/mod_skinny/skinny_server.c +++ b/src/mod/endpoints/mod_skinny/skinny_server.c @@ -1265,11 +1265,17 @@ switch_status_t skinny_handle_on_hook_message(listener_t *listener, skinny_messa if(session) { switch_channel_t *channel = NULL; + private_t *tech_pvt = NULL; channel = switch_core_session_get_channel(session); + tech_pvt = switch_core_session_get_private(session); - if (skinny_line_get_state(listener, line_instance, call_id) != SKINNY_IN_USE_REMOTELY) { - switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); + if (tech_pvt->transfer_from_call_id) { /* blind transfer */ + status = skinny_session_transfer(session, listener, line_instance); + } else { + if (skinny_line_get_state(listener, line_instance, call_id) != SKINNY_IN_USE_REMOTELY) { + switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); + } } } From 0a04ecb8dda729ce64ff3c76fbf94b0ca790e702 Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Wed, 28 Jul 2010 00:31:52 +0200 Subject: [PATCH 068/161] Skinny: ring tone on dialing side --- src/mod/endpoints/mod_skinny/mod_skinny.c | 1 + src/mod/endpoints/mod_skinny/skinny_server.c | 1 + 2 files changed, 2 insertions(+) diff --git a/src/mod/endpoints/mod_skinny/mod_skinny.c b/src/mod/endpoints/mod_skinny/mod_skinny.c index d27d6dc2c3..79906f6302 100644 --- a/src/mod/endpoints/mod_skinny/mod_skinny.c +++ b/src/mod/endpoints/mod_skinny/mod_skinny.c @@ -637,6 +637,7 @@ int channel_on_routing_callback(void *pArg, int argc, char **argv, char **column 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 { 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); diff --git a/src/mod/endpoints/mod_skinny/skinny_server.c b/src/mod/endpoints/mod_skinny/skinny_server.c index da9513a5b5..d8ccc6d53b 100644 --- a/src/mod/endpoints/mod_skinny/skinny_server.c +++ b/src/mod/endpoints/mod_skinny/skinny_server.c @@ -597,6 +597,7 @@ switch_status_t skinny_session_ring_out(switch_core_session_t *session, listener channel = switch_core_session_get_channel(session); 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); From d146b15a9c8f5c0eb2c726c201fd0f200ee94c1c Mon Sep 17 00:00:00 2001 From: Brian West Date: Tue, 27 Jul 2010 19:47:35 -0500 Subject: [PATCH 069/161] wip1 --- src/mod/endpoints/mod_sofia/sofia_glue.c | 8 +- src/mod/endpoints/mod_sofia/sofia_presence.c | 126 +++++++++++++++---- 2 files changed, 104 insertions(+), 30 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index e0e67ba40b..a17533c4b2 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -4731,7 +4731,9 @@ int sofia_glue_init_sql(sofia_profile_t *profile) " profile_name VARCHAR(255),\n" " hostname VARCHAR(255),\n" " network_ip VARCHAR(255),\n" - " network_port VARCHAR(6)\n" + " network_port VARCHAR(6),\n" + " content_type VARCHAR(255),\n" + " content text" ");\n"; char dialog_sql[] = @@ -4921,7 +4923,7 @@ int sofia_glue_init_sql(sofia_profile_t *profile) } free(test_sql); - test_sql = switch_mprintf("delete from sip_presence where hostname='%q' ", mod_sofia_globals.hostname); + test_sql = switch_mprintf("delete from sip_presence where hostname='%q' or content_type=''", mod_sofia_globals.hostname); if (switch_odbc_handle_exec(odbc_dbh, test_sql, NULL, NULL) != SWITCH_ODBC_SUCCESS) { switch_odbc_handle_exec(odbc_dbh, "DROP TABLE sip_presence", NULL, NULL); @@ -4997,7 +4999,7 @@ int sofia_glue_init_sql(sofia_profile_t *profile) switch_core_db_test_reactive(db, test_sql, "DROP TABLE sip_dialogs", dialog_sql); free(test_sql); - test_sql = switch_mprintf("delete from sip_presence where hostname='%q' ", mod_sofia_globals.hostname); + test_sql = switch_mprintf("delete from sip_presence where hostname='%q' or content_type=''", mod_sofia_globals.hostname); switch_core_db_test_reactive(db, test_sql, "DROP TABLE sip_presence", pres_sql); free(test_sql); diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index 879ab41c57..347bd2a535 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -441,7 +441,7 @@ static void actual_sofia_presence_event_handler(switch_event_t *event) "sip_subscriptions.contact,sip_subscriptions.call_id,sip_subscriptions.full_from," "sip_subscriptions.full_via,sip_subscriptions.expires,sip_subscriptions.user_agent," "sip_subscriptions.accept,sip_subscriptions.profile_name,sip_subscriptions.network_ip" - ",1,'%q','%q',sip_presence.status,sip_presence.rpid " + ",1,'%q','%q',sip_presence.status,sip_presence.rpid,sip_presence.content_type,sip_presence.content " "from sip_subscriptions left join sip_presence on " "(sip_subscriptions.sub_to_user=sip_presence.sip_user and sip_subscriptions.sub_to_host=sip_presence.sip_host and " "sip_subscriptions.profile_name=sip_presence.profile_name) " @@ -453,7 +453,7 @@ static void actual_sofia_presence_event_handler(switch_event_t *event) "sip_subscriptions.contact,sip_subscriptions.call_id,sip_subscriptions.full_from," "sip_subscriptions.full_via,sip_subscriptions.expires,sip_subscriptions.user_agent," "sip_subscriptions.accept,sip_subscriptions.profile_name,sip_subscriptions.network_ip" - ",1,'%q','%q',sip_presence.status,sip_presence.rpid " + ",1,'%q','%q',sip_presence.status,sip_presence.rpid,sip_presence.content_type,sip_presence.content " "from sip_subscriptions left join sip_presence on " "(sip_subscriptions.sub_to_user=sip_presence.sip_user and sip_subscriptions.sub_to_host=sip_presence.sip_host and " "sip_subscriptions.profile_name=sip_presence.profile_name) " @@ -538,7 +538,7 @@ static void actual_sofia_presence_event_handler(switch_event_t *event) if (probe_euser && probe_host && (profile = sofia_glue_find_profile(probe_host))) { sql = switch_mprintf("select sip_registrations.sip_user, '%q', sip_registrations.status, " "sip_registrations.rpid,'', sip_dialogs.uuid, sip_dialogs.state, sip_dialogs.direction, " - "sip_dialogs.sip_to_user, sip_dialogs.sip_to_host, sip_presence.status,sip_presence.rpid " + "sip_dialogs.sip_to_user, sip_dialogs.sip_to_host, sip_presence.status,sip_presence.rpid,sip_presence.content_type,sip_presence.content " "from sip_registrations left join sip_dialogs on " "(sip_dialogs.sip_from_user = sip_registrations.sip_user " "and sip_dialogs.sip_from_host = sip_registrations.sip_host) " @@ -641,7 +641,7 @@ static void actual_sofia_presence_event_handler(switch_event_t *event) "sip_subscriptions.contact,sip_subscriptions.call_id,sip_subscriptions.full_from," "sip_subscriptions.full_via,sip_subscriptions.expires,sip_subscriptions.user_agent," "sip_subscriptions.accept,sip_subscriptions.profile_name" - ",'%q','%q','%q',sip_presence.status,sip_presence.rpid " + ",'%q','%q','%q',sip_presence.status,sip_presence.rpid,sip_presence.content_type,sip_presence.content " "from sip_subscriptions " "left join sip_presence on " "(sip_subscriptions.sub_to_user=sip_presence.sip_user and sip_subscriptions.sub_to_host=sip_presence.sip_host and " @@ -1011,23 +1011,52 @@ static char *gen_pidf(char *user_agent, char *id, char *url, char *open, char *r " \n" "

\n" " \n" - " \n" "
\n" " \n" "\n", status, id, id, url, open, prpid); + " \n" + " \n" + " \n" + "\n", status, id, id, url, open, prpid); } else { *ct = "application/pidf+xml"; - ret = switch_mprintf(" \n" - "\n" - " \n" - " \r\n" - " %s\n" - " \n" - " \n" - " \n" - " \r\n" - " \n" - " \n" " %s\n" " \n" "", id, open, prpid, status); + + if (!strncasecmp(status, "Registered(", 11)) { + prpid = NULL; + status = "Available"; + } + + if (prpid) { + ret = switch_mprintf(" \n" + "\n" + " \n" + " \r\n" + " %s\n" + " \n" + " \n" + " \n" + " \r\n" + " \n" + " \n" + " %s\n" + " \n" + "", id, open, prpid, status); + } else { + ret = switch_mprintf(" \n" + "\n" + " \n" + " \r\n" + " %s\n" + " \n" + " \n" + " \n" + " %s\n" + " \n" + "", id, open, status); + } } @@ -1052,6 +1081,7 @@ static int sofia_presence_sub_callback(void *pArg, int argc, char **argv, char * char *status = argv[14]; char *rpid = argv[15]; char *sub_to_host = argv[16]; + char *content = NULL; nua_handle_t *nh; char *to = NULL; @@ -1068,6 +1098,9 @@ static int sofia_presence_sub_callback(void *pArg, int argc, char **argv, char * if (argc > 18 && !zstr(argv[17]) && !zstr(argv[18])) { status = argv[17]; rpid = argv[18]; + ct = argv[19]; + content = argv[20]; + } in = helper->event && helper->event->event_id == SWITCH_EVENT_PRESENCE_IN; @@ -1313,8 +1346,14 @@ static int sofia_presence_sub_callback(void *pArg, int argc, char **argv, char * open = "closed"; } - prpid = translate_rpid(rpid); - pl = gen_pidf(user_agent, clean_id, profile->url, open, rpid, prpid, status_line, &ct); + printf("WTF %s\n%s\n", ct, content); + + if (content) { + pl = strdup(content); + } else { + prpid = translate_rpid(rpid); + pl = gen_pidf(user_agent, clean_id, profile->url, open, rpid, prpid, status_line, &ct); + } } } else { @@ -1323,8 +1362,15 @@ static int sofia_presence_sub_callback(void *pArg, int argc, char **argv, char * } else { open = "closed"; } - prpid = translate_rpid(rpid); - pl = gen_pidf(user_agent, clean_id, profile->url, open, rpid, prpid, status, &ct); + + printf("WTF2 %s\n%s\n", ct, content); + + if (content) { + pl = strdup(content); + } else { + prpid = translate_rpid(rpid); + pl = gen_pidf(user_agent, clean_id, profile->url, open, rpid, prpid, status, &ct); + } } nua_handle_bind(nh, &mod_sofia_globals.keep_private); @@ -2128,7 +2174,17 @@ void sofia_presence_handle_sip_i_subscribe(int status, switch_safe_free(sql); } + } else { + if ((sql = switch_mprintf("select proto,sip_user,'%q',sub_to_user,sub_to_host,event,contact,call_id,full_from," + "full_via,expires,user_agent,accept,profile_name,network_ip" + " from sip_subscriptions where expires > -1 and event='%s' and sip_user='%q' " + "and (sip_host='%q' or presence_hosts like '%%%q%%')", to_host, event, to_user, to_host, to_host))) { + sofia_glue_execute_sql_callback(profile, profile->ireg_mutex, sql, sofia_presence_sub_callback, profile); + + switch_safe_free(sql); + } } + end: if (event) { @@ -2249,6 +2305,7 @@ void sofia_presence_handle_sip_i_publish(nua_t *nua, sofia_profile_t *profile, n char etag[9] = ""; char expstr[30] = ""; long exp = 0, exp_delta = 3600; + char *pd_dup = NULL; /* the following could instead be refactored back to the calling event handler in sofia.c XXX MTK */ if (sofia_test_pflag(profile, PFLAG_MANAGE_SHARED_APPEARANCE)) { @@ -2269,8 +2326,16 @@ void sofia_presence_handle_sip_i_publish(nua_t *nua, sofia_profile_t *profile, n switch_event_t *event; char *sql; char *full_agent = NULL; + char *ct = "no/idea"; - if ((xml = switch_xml_parse_str(payload->pl_data, strlen(payload->pl_data)))) { + if (sip->sip_content_type) { + ct = sip_header_as_string(profile->home, (void *) sip->sip_content_type); + } + + + pd_dup = strdup(payload->pl_data); + + if ((xml = switch_xml_parse_str(pd_dup, strlen(pd_dup)))) { char *status_txt = "", *note_txt = ""; if (sip->sip_user_agent) { @@ -2314,9 +2379,10 @@ void sofia_presence_handle_sip_i_publish(nua_t *nua, sofia_profile_t *profile, n } if ((sql = - switch_mprintf("insert into sip_presence (sip_user, sip_host, status, rpid, expires, user_agent, profile_name, hostname) " - "values ('%q','%q','%q','%q',%ld,'%q','%q','%q')", - from_user, from_host, note_txt, rpid, exp, full_agent, profile->name, mod_sofia_globals.hostname))) { + switch_mprintf("insert into sip_presence (sip_user, sip_host, status, rpid, expires, user_agent," + " profile_name, hostname, content_type, content) " + "values ('%q','%q','%q','%q',%ld,'%q','%q','%q','%q','%q')", + from_user, from_host, note_txt, rpid, exp, full_agent, profile->name, mod_sofia_globals.hostname, ct, payload->pl_data))) { sofia_glue_execute_sql_now(profile, &sql, SWITCH_TRUE); } @@ -2340,10 +2406,16 @@ void sofia_presence_handle_sip_i_publish(nua_t *nua, sofia_profile_t *profile, n if (full_agent) { su_free(profile->home, full_agent); } + + if (ct) { + su_free(profile->home, ct); + } switch_xml_free(xml); } } + switch_safe_free(pd_dup); + switch_snprintf(expstr, sizeof(expstr), "%d", exp_delta); switch_stun_random_string(etag, 8, NULL); nua_respond(nh, SIP_200_OK, NUTAG_WITH_THIS(nua), SIPTAG_ETAG_STR(etag), SIPTAG_EXPIRES_STR(expstr), TAG_END()); From 638c28d0747a10911f1b0e52a72ea76bf2ffbde0 Mon Sep 17 00:00:00 2001 From: Brian West Date: Tue, 27 Jul 2010 22:08:47 -0500 Subject: [PATCH 070/161] update pidf relates presence code --- src/mod/endpoints/mod_sofia/sofia_presence.c | 99 +++++++++++--------- src/mod/endpoints/mod_sofia/sofia_reg.c | 17 +++- 2 files changed, 68 insertions(+), 48 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index 347bd2a535..1ea4bebdd3 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -55,6 +55,7 @@ static void sync_sla(sofia_profile_t *profile, const char *to_user, const char * struct resub_helper { sofia_profile_t *profile; switch_event_t *event; + int rowcount; }; struct presence_helper { @@ -549,7 +550,7 @@ static void actual_sofia_presence_event_handler(switch_event_t *event) "(sip_registrations.sip_host='%q' or sip_registrations.presence_hosts like '%%%q%%')", probe_host, probe_euser, probe_host, probe_host); switch_assert(sql); - + if (mod_sofia_globals.debug_presence > 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s START_PRESENCE_PROBE_SQL\n", profile->name); @@ -565,6 +566,18 @@ static void actual_sofia_presence_event_handler(switch_event_t *event) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s END_PRESENCE_PROBE_SQL\n\n", profile->name); } + if (!h.rowcount) { + switch_event_t *sevent; + if (switch_event_create(&sevent, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) { + switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO); + switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "login", profile->name); + switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "from", "%s@%s", probe_euser, probe_host); + switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "status", "Unregistered"); + switch_event_fire(&sevent); + } + } + + sofia_glue_release_profile(profile); switch_safe_free(sql); } @@ -953,6 +966,7 @@ static int sofia_presence_resub_callback(void *pArg, int argc, char **argv, char switch_event_fire(&event); } + h->rowcount++; return 0; } @@ -1018,11 +1032,17 @@ static char *gen_pidf(char *user_agent, char *id, char *url, char *open, char *r } else { *ct = "application/pidf+xml"; - if (!strncasecmp(status, "Registered(", 11)) { + if (!strncasecmp(status, "Registered", 10)) { prpid = NULL; status = "Available"; } + + if (!strcasecmp(status, "Unregistered")) { + prpid = NULL; + open = "closed"; + } + if (prpid) { ret = switch_mprintf(" \n" "name); - switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "from", "%s@%s", to_user, to_host); - switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "rpid", "active"); - switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "status", "Click To Call"); - switch_event_fire(&sevent); - } - - } else { - if (switch_event_create(&sevent, SWITCH_EVENT_PRESENCE_PROBE) == SWITCH_STATUS_SUCCESS) { - switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO); - switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "login", profile->name); - switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "from", "%s@%s", from_user, from_host); - switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "to", "%s@%s", to_user, to_host); - switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "proto-specific-event-name", event); - switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "expires", exp_delta_str); - switch_event_fire(&sevent); - } - } - if (to_user && strchr(to_user, '+')) { char *h; if ((proto = (d_user = strdup(to_user)))) { @@ -2174,19 +2160,42 @@ void sofia_presence_handle_sip_i_subscribe(int status, switch_safe_free(sql); } - } else { - if ((sql = switch_mprintf("select proto,sip_user,'%q',sub_to_user,sub_to_host,event,contact,call_id,full_from," - "full_via,expires,user_agent,accept,profile_name,network_ip" - " from sip_subscriptions where expires > -1 and event='%s' and sip_user='%q' " - "and (sip_host='%q' or presence_hosts like '%%%q%%')", to_host, event, to_user, to_host, to_host))) { - sofia_glue_execute_sql_callback(profile, profile->ireg_mutex, sql, sofia_presence_sub_callback, profile); - - switch_safe_free(sql); - } } end: + if (to_user && (strstr(to_user, "ext+") || strstr(to_user, "user+"))) { + char protocol[80]; + char *p; + + switch_copy_string(protocol, to_user, sizeof(protocol)); + if ((p = strchr(protocol, '+'))) { + *p = '\0'; + } + + if (switch_event_create(&sevent, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) { + switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "proto", protocol); + switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "login", profile->name); + switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "from", "%s@%s", to_user, to_host); + switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "rpid", "active"); + switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "status", "Click To Call"); + switch_event_fire(&sevent); + } + + } else { + if (switch_event_create(&sevent, SWITCH_EVENT_PRESENCE_PROBE) == SWITCH_STATUS_SUCCESS) { + switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO); + switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "login", profile->name); + switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "from", "%s@%s", from_user, from_host); + switch_event_add_header(sevent, SWITCH_STACK_BOTTOM, "to", "%s@%s", to_user, to_host); + switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "proto-specific-event-name", event); + switch_event_add_header_string(sevent, SWITCH_STACK_BOTTOM, "expires", exp_delta_str); + switch_event_fire(&sevent); + } + } + + + if (event) { su_free(profile->home, event); } diff --git a/src/mod/endpoints/mod_sofia/sofia_reg.c b/src/mod/endpoints/mod_sofia/sofia_reg.c index 32f22081b3..2e1b1273a0 100644 --- a/src/mod/endpoints/mod_sofia/sofia_reg.c +++ b/src/mod/endpoints/mod_sofia/sofia_reg.c @@ -1124,7 +1124,7 @@ uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_hand sql = switch_mprintf("delete from sip_registrations where sip_user='%q' and sip_host='%q'", to_user, reg_host); } switch_mutex_lock(profile->ireg_mutex); - sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE); + sofia_glue_execute_sql_now(profile, &sql, SWITCH_TRUE); switch_find_local_ip(guess_ip4, sizeof(guess_ip4), NULL, AF_INET); sql = switch_mprintf("insert into sip_registrations " @@ -1138,7 +1138,7 @@ uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_hand mwi_user, mwi_host, guess_ip4, mod_sofia_globals.hostname); if (sql) { - sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE); + sofia_glue_execute_sql_now(profile, &sql, SWITCH_TRUE); } switch_mutex_unlock(profile->ireg_mutex); @@ -1204,7 +1204,7 @@ uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_hand } else { - if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_OUT) == SWITCH_STATUS_SUCCESS) { + if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) { switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", rpid); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", profile->url); @@ -1287,6 +1287,17 @@ uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_hand switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "VM-Call-ID", call_id); } } + + + if (switch_event_create(&s_event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) { + switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "proto", SOFIA_CHAT_PROTO); + switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "login", profile->name); + switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "from", "%s@%s", to_user, reg_host); + switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "rpid", "closed"); + switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "status", "Registered"); + switch_event_fire(&s_event); + } + } else { if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_UNREGISTER) == SWITCH_STATUS_SUCCESS) { switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "profile-name", profile->name); From 889cadb8aa502f1f729b50b4a585a13a35eae2d3 Mon Sep 17 00:00:00 2001 From: Jeff Lenk Date: Tue, 27 Jul 2010 23:21:59 -0500 Subject: [PATCH 071/161] Fix mod_managed dynamic compile for V4 Framework --- .../mod_managed/managed/FreeSWITCH.Managed.2010.csproj | 4 ++-- .../languages/mod_managed/managed/ScriptPluginManager.cs | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.2010.csproj b/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.2010.csproj index 3e9d2519db..740ae04cff 100644 --- a/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.2010.csproj +++ b/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.2010.csproj @@ -25,7 +25,7 @@ full false ..\..\..\..\..\managed\debug\ - DEBUG;TRACE + TRACE;DEBUG;CLR_VERSION40 prompt 4 @@ -33,7 +33,7 @@ pdbonly true ..\..\..\..\..\managed\release\ - TRACE + TRACE;CLR_VERSION40 prompt 4 diff --git a/src/mod/languages/mod_managed/managed/ScriptPluginManager.cs b/src/mod/languages/mod_managed/managed/ScriptPluginManager.cs index ad8e3a11e6..754541a8f2 100644 --- a/src/mod/languages/mod_managed/managed/ScriptPluginManager.cs +++ b/src/mod/languages/mod_managed/managed/ScriptPluginManager.cs @@ -110,10 +110,18 @@ namespace FreeSWITCH { cdp = CodeDomProvider.CreateProvider("f#"); break; case ".csx": +#if (CLR_VERSION40) + cdp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary { { "CompilerVersion", "v4.0" } }); +#else cdp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary { { "CompilerVersion", "v3.5" } }); +#endif break; case ".vbx": +#if (CLR_VERSION40) + cdp = new Microsoft.VisualBasic.VBCodeProvider(new Dictionary { { "CompilerVersion", "v4.0" } }); +#else cdp = new Microsoft.VisualBasic.VBCodeProvider(new Dictionary { { "CompilerVersion", "v3.5" } }); +#endif break; case ".jsx": // Have to figure out better JS support From a1fe7c8de4b6ced9191398e71f9461b92124ccf3 Mon Sep 17 00:00:00 2001 From: Moises Silva Date: Wed, 28 Jul 2010 11:35:39 -0400 Subject: [PATCH 072/161] freetdm: call rate limit --- libs/freetdm/mod_freetdm/mod_freetdm.c | 76 +++++++++++++++++++++++--- 1 file changed, 67 insertions(+), 9 deletions(-) diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c index 6233feffbd..c7262242ef 100755 --- a/libs/freetdm/mod_freetdm/mod_freetdm.c +++ b/libs/freetdm/mod_freetdm/mod_freetdm.c @@ -38,6 +38,7 @@ #define __FUNCTION__ __SWITCH_FUNC__ #endif +#define FREETDM_LIMIT_REALM "__freetdm" #define FREETDM_VAR_PREFIX "freetdm_" #define FREETDM_VAR_PREFIX_LEN 8 @@ -55,6 +56,11 @@ typedef enum { ANALOG_OPTION_CALL_SWAP = (1 << 1) } analog_option_t; +typedef enum { + FTDM_LIMIT_RESET_ON_TIMEOUT = 0, + FTDM_LIMIT_RESET_ON_ANSWER = 1 +} limit_reset_event_t; + typedef enum { TFLAG_IO = (1 << 0), TFLAG_DTMF = (1 << 1), @@ -119,6 +125,10 @@ struct span_config { char hold_music[256]; char type[256]; analog_option_t analog_options; + const char *limit_backend; + int limit_calls; + int limit_seconds; + limit_reset_event_t limit_reset_event; chan_pvt_t pvts[FTDM_MAX_CHANNELS_SPAN]; }; @@ -1292,6 +1302,9 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi switch_caller_profile_t *caller_profile; switch_channel_t *channel = switch_core_session_get_channel(*new_session); + span_id = ftdm_channel_get_span_id(ftdmchan); + chan_id = ftdm_channel_get_id(ftdmchan); + switch_core_session_add_stream(*new_session, NULL); if ((tech_pvt = (private_t *) switch_core_session_alloc(*new_session, sizeof(private_t))) != 0) { tech_init(tech_pvt, *new_session, ftdmchan); @@ -1302,12 +1315,12 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi goto fail; } - snprintf(name, sizeof(name), "FreeTDM/%u:%u/%s", ftdm_channel_get_span_id(ftdmchan), ftdm_channel_get_id(ftdmchan), dest); + snprintf(name, sizeof(name), "FreeTDM/%u:%u/%s", span_id, chan_id, dest); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Connect outbound channel %s\n", name); switch_channel_set_name(channel, name); switch_channel_set_variable(channel, "freetdm_span_name", ftdm_channel_get_span_name(ftdmchan)); - switch_channel_set_variable_printf(channel, "freetdm_span_number", "%d", ftdm_channel_get_span_id(ftdmchan)); - switch_channel_set_variable_printf(channel, "freetdm_chan_number", "%d", ftdm_channel_get_id(ftdmchan)); + switch_channel_set_variable_printf(channel, "freetdm_span_number", "%d", span_id); + switch_channel_set_variable_printf(channel, "freetdm_chan_number", "%d", chan_id); ftdm_channel_set_caller_data(ftdmchan, &caller_data); caller_profile = switch_caller_profile_clone(*new_session, outbound_profile); caller_profile->destination_number = switch_core_strdup(caller_profile->pool, switch_str_nil(dest_num)); @@ -1325,6 +1338,18 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi } + if (SPAN_CONFIG[span_id].limit_calls) { + char spanresource[512]; + snprintf(spanresource, sizeof(spanresource), "span_%s_%s", ftdm_channel_get_span_name(ftdmchan), caller_data.dnis.digits); + ftdm_log(FTDM_LOG_DEBUG, "Adding rate limit resource on channel %d:%d (%s/%s/%d/%d)\n", span_id, chan_id, FREETDM_LIMIT_REALM, + spanresource, SPAN_CONFIG[span_id].limit_calls, SPAN_CONFIG[span_id].limit_seconds); + if (switch_limit_incr("hash", *new_session, FREETDM_LIMIT_REALM, spanresource, SPAN_CONFIG[span_id].limit_calls, SPAN_CONFIG[span_id].limit_seconds) != SWITCH_STATUS_SUCCESS) { + switch_core_session_destroy(new_session); + cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER; + goto fail; + } + } + if ((status = ftdm_channel_call_place(ftdmchan)) != FTDM_SUCCESS) { if (tech_pvt->read_codec.implementation) { switch_core_codec_destroy(&tech_pvt->read_codec); @@ -1516,6 +1541,18 @@ static FIO_SIGNAL_CB_FUNCTION(on_common_signal) } } break; + case FTDM_SIGEVENT_UP: + { + /* clear any rate limit resource for this span */ + char spanresource[512]; + if (SPAN_CONFIG[spanid].limit_reset_event == FTDM_LIMIT_RESET_ON_ANSWER && SPAN_CONFIG[spanid].limit_calls) { + ftdm_caller_data_t *caller_data = ftdm_channel_get_caller_data(sigmsg->channel); + snprintf(spanresource, sizeof(spanresource), "span_%s_%s", ftdm_channel_get_span_name(sigmsg->channel), caller_data->dnis.digits); + ftdm_log(FTDM_LOG_DEBUG, "Clearing rate limit resource on channel %d:%d (%s/%s)\n", spanid, chanid, FREETDM_LIMIT_REALM, spanresource); + switch_limit_interval_reset("hash", FREETDM_LIMIT_REALM, spanresource); + } + return FTDM_SUCCESS; + } default: return FTDM_SUCCESS; break; @@ -2344,7 +2381,7 @@ static switch_status_t load_config(void) } } - if ((spans = switch_xml_child(cfg, "sangoma_isdn_spans"))) { + if ((spans = switch_xml_child(cfg, "sangoma_pri_spans")) || (spans = switch_xml_child(cfg, "sangoma_bri_spans"))) { for (myspan = switch_xml_child(spans, "span"); myspan; myspan = myspan->next) { ftdm_status_t zstatus = FTDM_FAIL; const char *context = "default"; @@ -2362,11 +2399,6 @@ static switch_status_t load_config(void) continue; } - if (!configname) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "sangoma isdn span missing required attribute, skipping ...\n"); - continue; - } - if (name) { zstatus = ftdm_span_find_by_name(name, &span); } else { @@ -2399,6 +2431,10 @@ static switch_status_t load_config(void) } } + /* some defaults first */ + SPAN_CONFIG[span_id].limit_backend = "hash"; + SPAN_CONFIG[span_id].limit_reset_event = FTDM_LIMIT_RESET_ON_TIMEOUT; + for (param = switch_xml_child(myspan, "param"); param; param = param->next) { char *var = (char *) switch_xml_attr_soft(param, "name"); char *val = (char *) switch_xml_attr_soft(param, "value"); @@ -2412,6 +2448,28 @@ static switch_status_t load_config(void) context = val; } else if (!strcasecmp(var, "dialplan")) { dialplan = val; + } else if (!strcasecmp(var, "call_limit_backend")) { + SPAN_CONFIG[span_id].limit_backend = val; + ftdm_log(FTDM_LOG_DEBUG, "Using limit backend %s for span %d\n", SPAN_CONFIG[span_id].limit_backend, span_id); + } else if (!strcasecmp(var, "call_limit_rate")) { + int calls; + int seconds; + if (sscanf(val, "%d/%d", &calls, &seconds) != 2) { + ftdm_log(FTDM_LOG_ERROR, "Invalid %s parameter, format example: 3/1 for 3 calls per second\n", var); + } else { + if (calls < 1 || seconds < 1) { + ftdm_log(FTDM_LOG_ERROR, "Invalid %s parameter value, minimum call limit must be 1 per second\n", var); + } else { + SPAN_CONFIG[span_id].limit_calls = calls; + SPAN_CONFIG[span_id].limit_seconds = seconds; + } + } + } else if (!strcasecmp(var, "call_limit_reset_event")) { + if (!strcasecmp(val, "answer")) { + SPAN_CONFIG[span_id].limit_reset_event = FTDM_LIMIT_RESET_ON_ANSWER; + } else { + ftdm_log(FTDM_LOG_ERROR, "Invalid %s parameter value, only accepted event is 'answer'\n", var); + } } else { spanparameters[paramindex].var = var; spanparameters[paramindex].val = val; From 7eec05736ade197a6d7ce04ecc1194a797effa1d Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Wed, 28 Jul 2010 19:41:00 +0200 Subject: [PATCH 073/161] Skinny: more API - allow to set most settings at runtime (all but ip, port and odbc-dsn) - little rewrite of the config load - don't print Keepalive and KeepaliveAck messages unless profile debug is >=10 - print usage when incorrect parameters --- src/mod/endpoints/mod_skinny/mod_skinny.c | 72 +++++++++---------- src/mod/endpoints/mod_skinny/mod_skinny.h | 1 + src/mod/endpoints/mod_skinny/skinny_api.c | 48 ++++++++++++- .../endpoints/mod_skinny/skinny_protocol.c | 10 +-- src/mod/endpoints/mod_skinny/skinny_server.c | 8 ++- 5 files changed, 93 insertions(+), 46 deletions(-) diff --git a/src/mod/endpoints/mod_skinny/mod_skinny.c b/src/mod/endpoints/mod_skinny/mod_skinny.c index 79906f6302..e506f142af 100644 --- a/src/mod/endpoints/mod_skinny/mod_skinny.c +++ b/src/mod/endpoints/mod_skinny/mod_skinny.c @@ -1586,38 +1586,55 @@ switch_endpoint_interface_t *skinny_get_endpoint_interface() return skinny_endpoint_interface; } -static void skinny_profile_set(skinny_profile_t *profile, char *var, char *val) +switch_status_t skinny_profile_set(skinny_profile_t *profile, const char *var, const char *val) { if (!var) - return; + return SWITCH_STATUS_FALSE; + + if (profile->sock && (!strcasecmp(var, "ip") || !strcasecmp(var, "port") || !strcasecmp(var, "odbc-dsn"))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, + "Skinny profile settings 'ip', 'port' and 'odbc-dsn' can't be changed while running\n"); + return SWITCH_STATUS_FALSE; + } if (!strcasecmp(var, "domain")) { profile->domain = switch_core_strdup(profile->pool, val); } else if (!strcasecmp(var, "ip")) { profile->ip = switch_core_strdup(profile->pool, val); - } else if (!strcasecmp(var, "dialplan")) { - profile->dialplan = switch_core_strdup(profile->pool, val); - } else if (!strcasecmp(var, "context")) { - profile->context = switch_core_strdup(profile->pool, val); + } else if (!strcasecmp(var, "port")) { + profile->port = atoi(val); } else if (!strcasecmp(var, "patterns-dialplan")) { profile->patterns_dialplan = switch_core_strdup(profile->pool, val); } else if (!strcasecmp(var, "patterns-context")) { profile->patterns_context = switch_core_strdup(profile->pool, val); + } else if (!strcasecmp(var, "dialplan")) { + profile->dialplan = switch_core_strdup(profile->pool, val); + } else if (!strcasecmp(var, "context")) { + profile->context = switch_core_strdup(profile->pool, val); + } else if (!strcasecmp(var, "keep-alive")) { + profile->keep_alive = atoi(val); } else if (!strcasecmp(var, "date-format")) { strncpy(profile->date_format, val, 6); - } else if (!strcasecmp(var, "odbc-dsn") && !zstr(val)) { - if (switch_odbc_available()) { - profile->odbc_dsn = switch_core_strdup(profile->pool, val); - if ((profile->odbc_user = strchr(profile->odbc_dsn, ':'))) { - *profile->odbc_user++ = '\0'; - if ((profile->odbc_pass = strchr(profile->odbc_user, ':'))) { - *profile->odbc_pass++ = '\0'; + } else if (!strcasecmp(var, "odbc-dsn")) { + if (!zstr(val)) { + if (switch_odbc_available()) { + profile->odbc_dsn = switch_core_strdup(profile->pool, val); + if ((profile->odbc_user = strchr(profile->odbc_dsn, ':'))) { + *profile->odbc_user++ = '\0'; + if ((profile->odbc_pass = strchr(profile->odbc_user, ':'))) { + *profile->odbc_pass++ = '\0'; + } } + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "ODBC IS NOT AVAILABLE!\n"); } - } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "ODBC IS NOT AVAILABLE!\n"); } + } else if (!strcasecmp(var, "debug")) { + profile->debug = atoi(val); + } else { + return SWITCH_STATUS_FALSE; } + return SWITCH_STATUS_SUCCESS; } static switch_status_t load_skinny_config(void) @@ -1663,28 +1680,9 @@ static switch_status_t load_skinny_config(void) char *var = (char *) switch_xml_attr_soft(param, "name"); char *val = (char *) switch_xml_attr_soft(param, "value"); - if (!strcmp(var, "domain")) { - skinny_profile_set(profile, "domain", val); - } else if (!strcmp(var, "ip")) { - skinny_profile_set(profile, "ip", val); - } else if (!strcmp(var, "port")) { - profile->port = atoi(val); - } else if (!strcmp(var, "dialplan")) { - skinny_profile_set(profile, "dialplan", val); - } else if (!strcmp(var, "context")) { - skinny_profile_set(profile, "context", val); - } else if (!strcmp(var, "patterns-dialplan")) { - skinny_profile_set(profile, "patterns-dialplan", val); - } else if (!strcmp(var, "patterns-context")) { - skinny_profile_set(profile, "patterns-context", val); - } else if (!strcmp(var, "keep-alive")) { - profile->keep_alive = atoi(val); - } else if (!strcmp(var, "date-format")) { - skinny_profile_set(profile, "date-format", val); - } else if (!strcmp(var, "odbc-dsn")) { - skinny_profile_set(profile, "odbc-dsn", val); - } else if (!strcmp(var, "debug")) { - profile->debug = atoi(val); + 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); } } /* param */ diff --git a/src/mod/endpoints/mod_skinny/mod_skinny.h b/src/mod/endpoints/mod_skinny/mod_skinny.h index f8cd92619e..68f3fddf87 100644 --- a/src/mod/endpoints/mod_skinny/mod_skinny.h +++ b/src/mod/endpoints/mod_skinny/mod_skinny.h @@ -252,6 +252,7 @@ switch_status_t channel_kill_channel(switch_core_session_t *session, int sig); /* MODULE FUNCTIONS */ /*****************************************************************************/ switch_endpoint_interface_t *skinny_get_endpoint_interface(); +switch_status_t skinny_profile_set(skinny_profile_t *profile, const char *var, const char *val); #endif /* _MOD_SKINNY_H */ diff --git a/src/mod/endpoints/mod_skinny/skinny_api.c b/src/mod/endpoints/mod_skinny/skinny_api.c index 79ebcfe122..cf54deb8b8 100644 --- a/src/mod/endpoints/mod_skinny/skinny_api.c +++ b/src/mod/endpoints/mod_skinny/skinny_api.c @@ -214,6 +214,30 @@ static switch_status_t skinny_api_list_call_ids(const char *line, const char *cu 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_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"); + + if (my_matches) { + *matches = my_matches; + status = SWITCH_STATUS_SUCCESS; + } + return status; +} + /*****************************************************************************/ /* skinny_api_cmd_* */ /*****************************************************************************/ @@ -336,6 +360,21 @@ static switch_status_t skinny_api_cmd_profile_device_send_reset_message(const ch 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; + + if ((profile = skinny_find_profile(profile_name))) { + if (skinny_profile_set(profile, name, value) != SWITCH_STATUS_SUCCESS) { + 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; +} + /*****************************************************************************/ /* API */ /*****************************************************************************/ @@ -355,6 +394,7 @@ SWITCH_STANDARD_API(skinny_function) "skinny profile device send SetLampMessage \n" "skinny profile device send SetSpeakerModeMessage \n" "skinny profile device send CallStateMessage \n" + "skinny profile set \n" "--------------------------------------------------------------------------------\n"; if (session) { return SWITCH_STATUS_FALSE; @@ -377,7 +417,6 @@ SWITCH_STANDARD_API(skinny_function) if (!strcasecmp(argv[0], "help")) {/* skinny help */ stream->write_function(stream, "%s", usage_string); - goto done; } else if (argc == 3 && !strcasecmp(argv[0], "status") && !strcasecmp(argv[1], "profile")) { /* skinny status profile */ status = skinny_api_cmd_status_profile(argv[2], stream); @@ -420,8 +459,11 @@ SWITCH_STANDARD_API(skinny_function) 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, "Unknown Command [%s]\n", argv[0]); + stream->write_function(stream, "%s", usage_string); } done: @@ -444,6 +486,7 @@ switch_status_t skinny_api_register(switch_loadable_module_interface_t **module_ 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 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); @@ -457,6 +500,7 @@ switch_status_t skinny_api_register(switch_loadable_module_interface_t **module_ 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; } diff --git a/src/mod/endpoints/mod_skinny/skinny_protocol.c b/src/mod/endpoints/mod_skinny/skinny_protocol.c index 9486c5c869..ba4cba70db 100644 --- a/src/mod/endpoints/mod_skinny/skinny_protocol.c +++ b/src/mod/endpoints/mod_skinny/skinny_protocol.c @@ -915,10 +915,12 @@ switch_status_t skinny_perform_send_reply(listener_t *listener, const char *file ptr = (char *) reply; if (listener_is_ready(listener)) { - 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); + 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); + } return switch_socket_send(listener->sock, ptr, &len); } else { switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, SWITCH_LOG_WARNING, diff --git a/src/mod/endpoints/mod_skinny/skinny_server.c b/src/mod/endpoints/mod_skinny/skinny_server.c index d8ccc6d53b..4de568b72c 100644 --- a/src/mod/endpoints/mod_skinny/skinny_server.c +++ b/src/mod/endpoints/mod_skinny/skinny_server.c @@ -1926,9 +1926,11 @@ switch_status_t skinny_handle_feature_stat_request(listener_t *listener, skinny_ switch_status_t skinny_handle_request(listener_t *listener, skinny_message_t *request) { - 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); + 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); + } if(zstr(listener->device_name) && request->type != REGISTER_MESSAGE && request->type != ALARM_MESSAGE) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Device should send a register message first.\n"); From 7d328478949ec67baf97457f6b1d3d02d015a39b Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 28 Jul 2010 14:18:49 -0500 Subject: [PATCH 074/161] only do this when we are a SCA call --- src/mod/endpoints/mod_sofia/sofia.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index e4736690b7..ae1e78698f 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -6593,10 +6593,10 @@ void sofia_handle_sip_i_invite(nua_t *nua, sofia_profile_t *profile, nua_handle_ int do_conf = 0; const char *c_app = NULL; const char *c_data = NULL; - + uuid = switch_core_session_strdup(b_session, uuid); - if ((c_session = switch_core_session_locate(uuid))) { + if (call_info && (c_session = switch_core_session_locate(uuid))) { switch_channel_t *c_channel = switch_core_session_get_channel(c_session); private_object_t *c_tech_pvt = NULL; From b062eef12e51be58cabf95eb4bf6392ab0885883 Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Wed, 28 Jul 2010 21:43:12 +0200 Subject: [PATCH 075/161] Skinny: pack data in mem to fix 64bit On 64bit, fields are aligned which cause Skinny to fail --- .../endpoints/mod_skinny/skinny_protocol.h | 106 +++++++++--------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/src/mod/endpoints/mod_skinny/skinny_protocol.h b/src/mod/endpoints/mod_skinny/skinny_protocol.h index 53d908a4b2..d08e5f3431 100644 --- a/src/mod/endpoints/mod_skinny/skinny_protocol.h +++ b/src/mod/endpoints/mod_skinny/skinny_protocol.h @@ -45,7 +45,7 @@ /* RegisterMessage */ #define REGISTER_MESSAGE 0x0001 -struct register_message { +struct PACKED register_message { char device_name[16]; uint32_t user_id; uint32_t instance; @@ -56,13 +56,13 @@ struct register_message { /* PortMessage */ #define PORT_MESSAGE 0x0002 -struct port_message { +struct PACKED port_message { uint16_t port; }; /* KeypadButtonMessage */ #define KEYPAD_BUTTON_MESSAGE 0x0003 -struct keypad_button_message { +struct PACKED keypad_button_message { uint32_t button; uint32_t line_instance; uint32_t call_id; @@ -70,7 +70,7 @@ struct keypad_button_message { /* StimulusMessage */ #define STIMULUS_MESSAGE 0x0005 -struct stimulus_message { +struct PACKED stimulus_message { uint32_t instance_type; /* See enum skinny_button_definition */ uint32_t instance; uint32_t call_id; @@ -78,27 +78,27 @@ struct stimulus_message { /* OffHookMessage */ #define OFF_HOOK_MESSAGE 0x0006 -struct off_hook_message { +struct PACKED off_hook_message { uint32_t line_instance; uint32_t call_id; }; /* OnHookMessage */ #define ON_HOOK_MESSAGE 0x0007 -struct on_hook_message { +struct PACKED on_hook_message { uint32_t line_instance; uint32_t call_id; }; /* SpeedDialStatReqMessage */ #define SPEED_DIAL_STAT_REQ_MESSAGE 0x000A -struct speed_dial_stat_req_message { +struct PACKED speed_dial_stat_req_message { uint32_t number; }; /* LineStatReqMessage */ #define LINE_STAT_REQ_MESSAGE 0x000B -struct line_stat_req_message { +struct PACKED line_stat_req_message { uint32_t number; }; @@ -116,20 +116,20 @@ struct line_stat_req_message { /* CapabilitiesResMessage */ #define CAPABILITIES_RES_MESSAGE 0x0010 -struct station_capabilities { +struct PACKED station_capabilities { uint32_t codec; uint16_t frames; char reserved[10]; }; -struct capabilities_res_message { +struct PACKED capabilities_res_message { uint32_t count; struct station_capabilities caps[SWITCH_MAX_CODECS]; }; /* AlarmMessage */ #define ALARM_MESSAGE 0x0020 -struct alarm_message { +struct PACKED alarm_message { uint32_t alarm_severity; char display_message[80]; uint32_t alarm_param1; @@ -138,7 +138,7 @@ struct alarm_message { /* OpenReceiveChannelAck */ #define OPEN_RECEIVE_CHANNEL_ACK_MESSAGE 0x0022 -struct open_receive_channel_ack_message { +struct PACKED open_receive_channel_ack_message { uint32_t status; struct in_addr ip; uint32_t port; @@ -150,7 +150,7 @@ struct open_receive_channel_ack_message { /* SoftKeyEventMessage */ #define SOFT_KEY_EVENT_MESSAGE 0x0026 -struct soft_key_event_message { +struct PACKED soft_key_event_message { uint32_t event; uint32_t line_instance; uint32_t call_id; @@ -164,31 +164,31 @@ struct soft_key_event_message { /* HeadsetStatusMessage */ #define HEADSET_STATUS_MESSAGE 0x002B -struct headset_status_message { +struct PACKED headset_status_message { uint32_t mode; }; /* RegisterAvailableLinesMessage */ #define REGISTER_AVAILABLE_LINES_MESSAGE 0x002D -struct register_available_lines_message { +struct PACKED register_available_lines_message { uint32_t count; }; /* ServiceUrlStatReqMessage */ #define SERVICE_URL_STAT_REQ_MESSAGE 0x0033 -struct service_url_stat_req_message { +struct PACKED service_url_stat_req_message { uint32_t service_url_index; }; /* FeatureStatReqMessage */ #define FEATURE_STAT_REQ_MESSAGE 0x0034 -struct feature_stat_req_message { +struct PACKED feature_stat_req_message { uint32_t feature_index; }; /* RegisterAckMessage */ #define REGISTER_ACK_MESSAGE 0x0081 -struct register_ack_message { +struct PACKED register_ack_message { uint32_t keep_alive; char date_format[6]; char reserved[2]; @@ -198,7 +198,7 @@ struct register_ack_message { /* StartToneMessage */ #define START_TONE_MESSAGE 0x0082 -struct start_tone_message { +struct PACKED start_tone_message { uint32_t tone; /* see enum skinny_tone */ uint32_t reserved; uint32_t line_instance; @@ -207,14 +207,14 @@ struct start_tone_message { /* StopToneMessage */ #define STOP_TONE_MESSAGE 0x0083 -struct stop_tone_message { +struct PACKED stop_tone_message { uint32_t line_instance; uint32_t call_id; }; /* SetRingerMessage */ #define SET_RINGER_MESSAGE 0x0085 -struct set_ringer_message { +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; @@ -223,7 +223,7 @@ struct set_ringer_message { /* SetLampMessage */ #define SET_LAMP_MESSAGE 0x0086 -struct set_lamp_message { +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 */ @@ -231,13 +231,13 @@ struct set_lamp_message { /* SetSpeakerModeMessage */ #define SET_SPEAKER_MODE_MESSAGE 0x0088 -struct set_speaker_mode_message { +struct PACKED set_speaker_mode_message { uint32_t mode; /* See enum skinny_speaker_mode */ }; /* StartMediaTransmissionMessage */ #define START_MEDIA_TRANSMISSION_MESSAGE 0x008A -struct start_media_transmission_message { +struct PACKED start_media_transmission_message { uint32_t conference_id; uint32_t pass_thru_party_id; uint32_t remote_ip; @@ -253,7 +253,7 @@ struct start_media_transmission_message { /* StopMediaTransmissionMessage */ #define STOP_MEDIA_TRANSMISSION_MESSAGE 0x008B -struct stop_media_transmission_message { +struct PACKED stop_media_transmission_message { uint32_t conference_id; uint32_t pass_thru_party_id; uint32_t conference_id2; @@ -262,7 +262,7 @@ struct stop_media_transmission_message { /* CallInfoMessage */ #define CALL_INFO_MESSAGE 0x008F -struct call_info_message { +struct PACKED call_info_message { char calling_party_name[40]; char calling_party[24]; char called_party_name[40]; @@ -287,7 +287,7 @@ struct call_info_message { /* SpeedDialStatMessage */ #define SPEED_DIAL_STAT_RES_MESSAGE 0x0091 -struct speed_dial_stat_res_message { +struct PACKED speed_dial_stat_res_message { uint32_t number; char line[24]; char label[40]; @@ -295,7 +295,7 @@ struct speed_dial_stat_res_message { /* LineStatMessage */ #define LINE_STAT_RES_MESSAGE 0x0092 -struct line_stat_res_message { +struct PACKED line_stat_res_message { uint32_t number; char name[24]; char shortname[40]; @@ -304,7 +304,7 @@ struct line_stat_res_message { /* ConfigStatMessage */ #define CONFIG_STAT_RES_MESSAGE 0x0093 -struct config_stat_res_message { +struct PACKED config_stat_res_message { char device_name[16]; uint32_t user_id; uint32_t instance; @@ -316,7 +316,7 @@ struct config_stat_res_message { /* DefineTimeDate */ #define DEFINE_TIME_DATE_MESSAGE 0x0094 -struct define_time_date_message { +struct PACKED define_time_date_message { uint32_t year; uint32_t month; uint32_t day_of_week; /* monday = 1 */ @@ -330,13 +330,13 @@ struct define_time_date_message { /* ButtonTemplateMessage */ #define BUTTON_TEMPLATE_RES_MESSAGE 0x0097 -struct button_definition { +struct PACKED button_definition { uint8_t instance_number; uint8_t button_definition; /* See enum skinny_button_definition */ }; #define SKINNY_MAX_BUTTON_COUNT 42 -struct button_template_message { +struct PACKED button_template_message { uint32_t button_offset; uint32_t button_count; uint32_t total_button_count; @@ -345,7 +345,7 @@ struct button_template_message { /* VersionMessage */ #define VERSION_MESSAGE 0x0098 -struct version_message { +struct PACKED version_message { char version[16]; }; @@ -354,13 +354,13 @@ struct version_message { /* RegisterRejectMessage */ #define REGISTER_REJECT_MESSAGE 0x009D -struct register_reject_message { +struct PACKED register_reject_message { char error[33]; }; /* ResetMessage */ #define RESET_MESSAGE 0x009F -struct reset_message { +struct PACKED reset_message { uint32_t reset_type; /* See enum skinny_device_reset_types */ }; @@ -369,7 +369,7 @@ struct reset_message { /* OpenReceiveChannelMessage */ #define OPEN_RECEIVE_CHANNEL_MESSAGE 0x0105 -struct open_receive_channel_message { +struct PACKED open_receive_channel_message { uint32_t conference_id; uint32_t pass_thru_party_id; uint32_t packets; @@ -382,7 +382,7 @@ struct open_receive_channel_message { /* CloseReceiveChannelMessage */ #define CLOSE_RECEIVE_CHANNEL_MESSAGE 0x0106 -struct close_receive_channel_message { +struct PACKED close_receive_channel_message { uint32_t conference_id; uint32_t pass_thru_party_id; uint32_t conference_id2; @@ -391,12 +391,12 @@ struct close_receive_channel_message { /* SoftKeyTemplateResMessage */ #define SOFT_KEY_TEMPLATE_RES_MESSAGE 0x0108 -struct soft_key_template_definition { +struct PACKED soft_key_template_definition { char soft_key_label[16]; uint32_t soft_key_event; }; -struct soft_key_template_res_message { +struct PACKED soft_key_template_res_message { uint32_t soft_key_offset; uint32_t soft_key_count; uint32_t total_soft_key_count; @@ -405,12 +405,12 @@ struct soft_key_template_res_message { /* SoftKeySetResMessage */ #define SOFT_KEY_SET_RES_MESSAGE 0x0109 -struct soft_key_set_definition { +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]; }; -struct soft_key_set_res_message { +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; @@ -420,7 +420,7 @@ struct soft_key_set_res_message { /* SelectSoftKeysMessage */ #define SELECT_SOFT_KEYS_MESSAGE 0x0110 -struct select_soft_keys_message { +struct PACKED select_soft_keys_message { uint32_t line_instance; uint32_t call_id; uint32_t soft_key_set; /* See enum skinny_key_set */ @@ -429,7 +429,7 @@ struct select_soft_keys_message { /* CallStateMessage */ #define CALL_STATE_MESSAGE 0x0111 -struct call_state_message { +struct PACKED call_state_message { uint32_t call_state; /* See enum skinny_call_state */ uint32_t line_instance; uint32_t call_id; @@ -437,7 +437,7 @@ struct call_state_message { /* DisplayPromptStatusMessage */ #define DISPLAY_PROMPT_STATUS_MESSAGE 0x0112 -struct display_prompt_status_message { +struct PACKED display_prompt_status_message { uint32_t timeout; char display[32]; uint32_t line_instance; @@ -446,33 +446,33 @@ struct display_prompt_status_message { /* ClearPromptStatusMessage */ #define CLEAR_PROMPT_STATUS_MESSAGE 0x0113 -struct clear_prompt_status_message { +struct PACKED clear_prompt_status_message { uint32_t line_instance; uint32_t call_id; }; /* ActivateCallPlaneMessage */ #define ACTIVATE_CALL_PLANE_MESSAGE 0x0116 -struct activate_call_plane_message { +struct PACKED activate_call_plane_message { uint32_t line_instance; }; /* UnregisterAckMessage */ #define UNREGISTER_ACK_MESSAGE 0x0118 -struct unregister_ack_message { +struct PACKED unregister_ack_message { uint32_t unregister_status; }; /* BackSpaceReqMessage */ #define BACK_SPACE_REQ_MESSAGE 0x0119 -struct back_space_req_message { +struct PACKED back_space_req_message { uint32_t line_instance; uint32_t call_id; }; /* DialedNumberMessage */ #define DIALED_NUMBER_MESSAGE 0x011D -struct dialed_number_message { +struct PACKED dialed_number_message { char called_party[24]; uint32_t line_instance; uint32_t call_id; @@ -480,7 +480,7 @@ struct dialed_number_message { /* FeatureStatMessage */ #define FEATURE_STAT_RES_MESSAGE 0x011F -struct feature_stat_res_message { +struct PACKED feature_stat_res_message { uint32_t index; uint32_t id; char text_label[40]; @@ -489,7 +489,7 @@ struct feature_stat_res_message { /* DisplayPriNotifyMessage */ #define DISPLAY_PRI_NOTIFY_MESSAGE 0x0120 -struct display_pri_notify_message { +struct PACKED display_pri_notify_message { uint32_t message_timeout; uint32_t priority; char notify[32]; @@ -497,7 +497,7 @@ struct display_pri_notify_message { /* ServiceUrlStatMessage */ #define SERVICE_URL_STAT_RES_MESSAGE 0x012F -struct service_url_stat_res_message { +struct PACKED service_url_stat_res_message { uint32_t index; char url[256]; char display_name[40]; @@ -570,7 +570,7 @@ union skinny_data { * body is type+data * length is length of body */ -struct skinny_message { +struct PACKED skinny_message { uint32_t length; uint32_t version; uint32_t type; From 59e197584c4111a89ea6470ec32865adfde3f879 Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Wed, 28 Jul 2010 22:17:54 +0200 Subject: [PATCH 076/161] Skinny: more on device types - print device type name when doing skinny status profile internal device ... - add 7962 and 7965 - use base10 number --- src/mod/endpoints/mod_skinny/mod_skinny.c | 3 ++- src/mod/endpoints/mod_skinny/skinny_tables.c | 26 +++++++++++--------- src/mod/endpoints/mod_skinny/skinny_tables.h | 2 +- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/mod/endpoints/mod_skinny/mod_skinny.c b/src/mod/endpoints/mod_skinny/mod_skinny.c index e506f142af..d231d822d4 100644 --- a/src/mod/endpoints/mod_skinny/mod_skinny.c +++ b/src/mod/endpoints/mod_skinny/mod_skinny.c @@ -1291,7 +1291,8 @@ static int dump_device_callback(void *pArg, int argc, char **argv, char **column stream->write_function(stream, "UserId \t%s\n", user_id); stream->write_function(stream, "Instance \t%s\n", instance); stream->write_function(stream, "IP \t%s\n", ip); - stream->write_function(stream, "DeviceType \t%s\n", type); + stream->write_function(stream, "DeviceTypeId \t%s\n", type); + stream->write_function(stream, "DeviceType \t%s\n", skinny_device_type2str(atoi(type))); stream->write_function(stream, "MaxStreams \t%s\n", max_streams); stream->write_function(stream, "Port \t%s\n", port); stream->write_function(stream, "Codecs \t%s\n", codec_string); diff --git a/src/mod/endpoints/mod_skinny/skinny_tables.c b/src/mod/endpoints/mod_skinny/skinny_tables.c index ac16b6509f..d9f0aad0ef 100644 --- a/src/mod/endpoints/mod_skinny/skinny_tables.c +++ b/src/mod/endpoints/mod_skinny/skinny_tables.c @@ -99,18 +99,20 @@ SKINNY_DECLARE_ID2STR(skinny_message_type2str, SKINNY_MESSAGE_TYPES, "UnknownMes SKINNY_DECLARE_STR2ID(skinny_str2message_type, SKINNY_MESSAGE_TYPES, -1) struct skinny_table SKINNY_DEVICE_TYPES[] = { - {"Cisco 30 SP+", 0x0001}, - {"Cisco 12 SP+", 0x0002}, - {"Cisco 12 SP", 0x0003}, - {"Cisco 12", 0x0004}, - {"Cisco 30 VIP", 0x0005}, - {"Cisco IP Phone 7910", 0x0006}, - {"Cisco IP Phone 7960", 0x0007}, - {"Cisco IP Phone 7940", 0x0008}, - {"Cisco IP Phone 7935", 0x0009}, - {"Cisco ATA 186", 0x000c}, - {"Cisco IP Phone 7961", 0x4275}, - {"Cisco IP Phone 7936", 0x4276}, + {"Cisco 30 SP+", 1}, + {"Cisco 12 SP+", 2}, + {"Cisco 12 SP", 3}, + {"Cisco 12", 4}, + {"Cisco 30 VIP", 5}, + {"Cisco IP Phone 7910", 6}, + {"Cisco IP Phone 7960", 7}, + {"Cisco IP Phone 7940", 8}, + {"Cisco IP Phone 7935", 9}, + {"Cisco ATA 186", 12}, + {"Cisco IP Phone CP-7962G", 404}, + {"Cisco IP Phone CP-7965G", 436}, + {"Cisco IP Phone CP-7961G", 30018}, + {"Cisco IP Phone 7936", 30019}, {NULL, 0} }; SKINNY_DECLARE_ID2STR(skinny_device_type2str, SKINNY_DEVICE_TYPES, "UnknownDeviceType") diff --git a/src/mod/endpoints/mod_skinny/skinny_tables.h b/src/mod/endpoints/mod_skinny/skinny_tables.h index 09c2b229c8..0b2c544242 100644 --- a/src/mod/endpoints/mod_skinny/skinny_tables.h +++ b/src/mod/endpoints/mod_skinny/skinny_tables.h @@ -92,7 +92,7 @@ const char *skinny_message_type2str(uint32_t id); uint32_t skinny_str2message_type(const char *str); #define SKINNY_PUSH_MESSAGE_TYPES SKINNY_DECLARE_PUSH_MATCH(SKINNY_MESSAGE_TYPES) -extern struct skinny_table SKINNY_DEVICE_TYPES[13]; +extern struct skinny_table SKINNY_DEVICE_TYPES[15]; const char *skinny_device_type2str(uint32_t id); uint32_t skinny_str2device_type(const char *str); #define SKINNY_PUSH_DEVICE_TYPES SKINNY_DECLARE_PUSH_MATCH(SKINNY_DEVICE_TYPES) From cc73aec6cf135840181ecf09420615e7d1c9cbf6 Mon Sep 17 00:00:00 2001 From: Christopher Rienzo Date: Wed, 28 Jul 2010 21:07:24 +0000 Subject: [PATCH 077/161] Updated mod_unimrcp to allow speech/asr channels to be named for logging --- src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c | 56 +++++++++++++---------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c b/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c index e70844311e..41c0ccdaa4 100644 --- a/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c +++ b/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c @@ -1510,7 +1510,7 @@ static switch_status_t synth_speech_open(switch_speech_handle_t *sh, const char const char *profile_name = sh->param; profile_t *profile = NULL; int speech_channel_number = get_next_speech_channel_number(); - char name[200] = { 0 }; + char *name = NULL; switch_hash_index_t *hi = NULL; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, @@ -1518,18 +1518,26 @@ static switch_status_t synth_speech_open(switch_speech_handle_t *sh, const char sh->speed, sh->samples, sh->voice, sh->engine, sh->param); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "voice = %s, rate = %d\n", voice_name, rate); - /* It would be nice if FreeSWITCH let us know which session owns this handle, but it doesn't. So, lets - make our own unique name */ - switch_snprintf(name, sizeof(name) - 1, "TTS-%d", speech_channel_number); - name[sizeof(name) - 1] = '\0'; - + /* Name the channel */ + if (profile_name && strchr(profile_name, ':')) { + /* Profile has session name appended to it. Pick it out */ + profile_name = switch_core_strdup(sh->memory_pool, profile_name); + name = strchr(profile_name, ':'); + *name = '\0'; + name++; + name = switch_core_sprintf(sh->memory_pool, "%s TTS-%d", name, speech_channel_number); + } else { + name = switch_core_sprintf(sh->memory_pool, "TTS-%d", speech_channel_number); + } + + /* Allocate the channel */ if (speech_channel_create(&schannel, name, SPEECH_CHANNEL_SYNTHESIZER, &globals.synth, (uint16_t) rate, sh->memory_pool) != SWITCH_STATUS_SUCCESS) { status = SWITCH_STATUS_FALSE; goto done; } sh->private_info = schannel; - /* try to open an MRCP channel */ + /* Open the channel */ if (zstr(profile_name)) { profile_name = globals.unimrcp_default_synth_profile; } @@ -2697,8 +2705,8 @@ static switch_status_t recog_asr_open(switch_asr_handle_t *ah, const char *codec switch_status_t status = SWITCH_STATUS_SUCCESS; speech_channel_t *schannel = NULL; int speech_channel_number = get_next_speech_channel_number(); - char name[200] = { 0 }; - const char *profile_name = NULL; + char *name = ""; + const char *profile_name = !zstr(dest) ? dest : ah->param; profile_t *profile = NULL; recognizer_data_t *r = NULL; switch_hash_index_t *hi = NULL; @@ -2707,37 +2715,39 @@ static switch_status_t recog_asr_open(switch_asr_handle_t *ah, const char *codec ah->name, ah->codec, ah->rate, ah->grammar, ah->param); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "codec = %s, rate = %d, dest = %s\n", codec, rate, dest); - /* It would be nice if FreeSWITCH let us know which session owns this handle, but it doesn't. So, lets - make our own unique name */ - switch_snprintf(name, sizeof(name) - 1, "ASR-%d", speech_channel_number); - name[sizeof(name) - 1] = '\0'; - + /* Name the channel */ + if (profile_name && strchr(profile_name, ':')) { + /* Profile has session name appended to it. Pick it out */ + profile_name = switch_core_strdup(ah->memory_pool, profile_name); + name = strchr(profile_name, ':'); + *name = '\0'; + name++; + name = switch_core_sprintf(ah->memory_pool, "%s ASR-%d", name, speech_channel_number); + } else { + name = switch_core_sprintf(ah->memory_pool, "ASR-%d", name, speech_channel_number); + } + + /* Allocate the channel */ if (speech_channel_create(&schannel, name, SPEECH_CHANNEL_RECOGNIZER, &globals.recog, (uint16_t) rate, ah->memory_pool) != SWITCH_STATUS_SUCCESS) { status = SWITCH_STATUS_FALSE; goto done; } ah->private_info = schannel; - r = (recognizer_data_t *) switch_core_alloc(ah->memory_pool, sizeof(recognizer_data_t)); schannel->data = r; memset(r, 0, sizeof(recognizer_data_t)); switch_core_hash_init(&r->grammars, ah->memory_pool); - /* try to open an MRCP channel */ - if (!(profile_name = dest)) { - if (!(profile_name = ah->param)) { - profile_name = globals.unimrcp_default_recog_profile; - } + /* Open the channel */ + if (zstr(profile_name)) { + profile_name = globals.unimrcp_default_recog_profile; } - profile = (profile_t *) switch_core_hash_find(globals.profiles, profile_name); - if (!profile) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "(%s) Can't find profile, %s\n", name, profile_name); status = SWITCH_STATUS_FALSE; goto done; } - if ((status = speech_channel_open(schannel, profile)) != SWITCH_STATUS_SUCCESS) { goto done; } From 83181fa2de0a11373d7402d6eeab69305997c897 Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Wed, 28 Jul 2010 22:52:33 +0200 Subject: [PATCH 078/161] Skinny use 1100 to 1119 to not conflict with groupdial --- conf/dialplan/default.xml | 2 +- conf/dialplan/skinny-patterns/20-Local_extension.xml | 2 +- conf/directory/default/skinny-example.xml | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/dialplan/default.xml b/conf/dialplan/default.xml index 42c84added..9146e0a589 100644 --- a/conf/dialplan/default.xml +++ b/conf/dialplan/default.xml @@ -269,7 +269,7 @@ - + diff --git a/conf/dialplan/skinny-patterns/20-Local_extension.xml b/conf/dialplan/skinny-patterns/20-Local_extension.xml index 7e8c51859b..a3693e80c8 100644 --- a/conf/dialplan/skinny-patterns/20-Local_extension.xml +++ b/conf/dialplan/skinny-patterns/20-Local_extension.xml @@ -5,7 +5,7 @@ - + diff --git a/conf/directory/default/skinny-example.xml b/conf/directory/default/skinny-example.xml index f99725976f..2f19710136 100644 --- a/conf/directory/default/skinny-example.xml +++ b/conf/directory/default/skinny-example.xml @@ -17,12 +17,12 @@ value is the directory number (or user) caller-name is shown to the calling party during call --> -