<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[Freeswitch-trunk][17525] </title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<div id="header">FreeSWITCH Subversion</div>
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://fisheye.freeswitch.org/changelog/FreeSWITCH?cs=17525">17525</a></dd>
<dt>Author</dt> <dd>moy</dd>
<dt>Date</dt> <dd>2010-05-11 14:09:59 -0500 (Tue, 11 May 2010)</dd>
</dl>
<h3>Log Message</h3>
<pre>freetdm: modify prototype for ftdm_span_create to accept I/O module name instead of pointer</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#freeswitchtrunklibsfreetdmsrcftdm_ioc">freeswitch/trunk/libs/freetdm/src/ftdm_io.c</a></li>
<li><a href="#freeswitchtrunklibsfreetdmsrcincludefreetdmh">freeswitch/trunk/libs/freetdm/src/include/freetdm.h</a></li>
<li><a href="#freeswitchtrunklibsfreetdmsrcincludeprivateftdm_typesh">freeswitch/trunk/libs/freetdm/src/include/private/ftdm_types.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="freeswitchtrunklibsfreetdmsrcftdm_ioc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/freetdm/src/ftdm_io.c (17524 => 17525)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/freetdm/src/ftdm_io.c        2010-05-11 17:07:13 UTC (rev 17524)
+++ freeswitch/trunk/libs/freetdm/src/ftdm_io.c        2010-05-11 19:09:59 UTC (rev 17525)
</span><span class="lines">@@ -522,17 +522,41 @@
</span><span class="cx">         return FTDM_FAIL;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-FT_DECLARE(ftdm_status_t) ftdm_span_create(ftdm_io_interface_t *fio, ftdm_span_t **span, const char *name)
</del><ins>+FT_DECLARE(ftdm_status_t) ftdm_span_create(const char *iotype, const char *name, ftdm_span_t **span)
</ins><span class="cx"> {
</span><span class="cx">         ftdm_span_t *new_span = NULL;
</span><ins>+        ftdm_io_interface_t *fio = NULL;
</ins><span class="cx">         ftdm_status_t status = FTDM_FAIL;
</span><ins>+        char buf[128] = "";
</ins><span class="cx">
</span><del>-        ftdm_assert(fio != NULL, "No IO provided\n");
</del><ins>+        ftdm_assert_return(iotype != NULL, FTDM_FAIL, "No IO type provided\n");
+        ftdm_assert_return(name != NULL, FTDM_FAIL, "No span name provided\n");
+        
+        *span = NULL;
</ins><span class="cx">
</span><span class="cx">         ftdm_mutex_lock(globals.mutex);
</span><ins>+        if (!(fio = (ftdm_io_interface_t *) hashtable_search(globals.interface_hash, (void *)iotype))) {
+                ftdm_load_module_assume(iotype);
+                if ((fio = (ftdm_io_interface_t *) hashtable_search(globals.interface_hash, (void *)iotype))) {
+                        ftdm_log(FTDM_LOG_INFO, "Auto-loaded I/O module '%s'\n", iotype);
+                }
+        }
+        ftdm_mutex_unlock(globals.mutex);
</ins><span class="cx">
</span><ins>+        if (!fio) {
+                ftdm_log(FTDM_LOG_CRIT, "failure creating span, no such I/O type '%s'\n", iotype);
+                return FTDM_FAIL;
+        }
+
+        if (!fio->configure_span) {
+                ftdm_log(FTDM_LOG_CRIT, "failure creating span, no configure_span method for I/O type '%s'\n", iotype);
+                return FTDM_FAIL;
+        }
+
+        ftdm_mutex_lock(globals.mutex);
</ins><span class="cx">         if (globals.span_index < FTDM_MAX_SPANS_INTERFACE) {
</span><span class="cx">                 new_span = ftdm_calloc(sizeof(*new_span), 1);
</span><ins>+                
</ins><span class="cx">                 ftdm_assert(new_span, "allocating span failed\n");
</span><span class="cx">
</span><span class="cx">                 status = ftdm_mutex_create(&new_span->mutex);
</span><span class="lines">@@ -556,11 +580,11 @@
</span><span class="cx">                 ftdm_mutex_unlock(globals.span_mutex);
</span><span class="cx">                 
</span><span class="cx">                 if (!name) {
</span><del>-                        char buf[128] = "";
</del><span class="cx">                         snprintf(buf, sizeof(buf), "span%d", new_span->span_id);
</span><span class="cx">                         name = buf;
</span><span class="cx">                 }
</span><span class="cx">                 new_span->name = ftdm_strdup(name);
</span><ins>+                new_span->type = ftdm_strdup(iotype);
</ins><span class="cx">                 ftdm_span_add(new_span);
</span><span class="cx">                 *span = new_span;
</span><span class="cx">                 status = FTDM_SUCCESS;
</span><span class="lines">@@ -1657,6 +1681,16 @@
</span><span class="cx">         return ftdmchan->span->name;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+FT_DECLARE(void) ftdm_span_set_trunk_type(ftdm_span_t *span, ftdm_trunk_type_t type)
+{
+        span->trunk_type = type;
+}
+
+FT_DECLARE(ftdm_trunk_type_t) ftdm_span_get_trunk_type(const ftdm_span_t *span)
+{
+        return span->trunk_type;
+}
+
</ins><span class="cx"> FT_DECLARE(uint32_t) ftdm_span_get_id(const ftdm_span_t *span)
</span><span class="cx"> {
</span><span class="cx">         return span->span_id;
</span><span class="lines">@@ -3227,7 +3261,15 @@
</span><span class="cx">
</span><span class="cx"> FT_DECLARE(ftdm_status_t) ftdm_configure_span_channels(ftdm_span_t *span, const char* str, ftdm_channel_config_t *chan_config, unsigned *configured)
</span><span class="cx"> {
</span><del>-        int currindex = span->chan_count;
</del><ins>+        int currindex;
+
+        ftdm_assert_return(span != NULL, FTDM_EINVAL, "span is null\n");
+        ftdm_assert_return(chan_config != NULL, FTDM_EINVAL, "config is null\n");
+        ftdm_assert_return(configured != NULL, FTDM_EINVAL, "configured pointer is null\n");
+        ftdm_assert_return(span->fio != NULL, FTDM_EINVAL, "span with no I/O configured\n");
+        ftdm_assert_return(span->fio->configure_span != NULL, FTDM_NOTIMPL, "span I/O with no channel configuration implemented\n");
+
+         currindex = span->chan_count;
</ins><span class="cx">         *configured = 0;
</span><span class="cx">         *configured = span->fio->configure_span(span, str, chan_config->type, chan_config->name, chan_config->number);
</span><span class="cx">         if (!*configured) {
</span><span class="lines">@@ -3235,18 +3277,24 @@
</span><span class="cx">                 return FTDM_FAIL;
</span><span class="cx">         }
</span><span class="cx">
</span><del>-        if (ftdm_group_add_channels(span, currindex, chan_config->group_name) != FTDM_SUCCESS) {
-                ftdm_log(FTDM_LOG_ERROR, "%d:Failed to add channels to group %s\n", span->span_id, chan_config->group_name);
</del><ins>+        if (chan_config->group_name[0]) {
+                if (ftdm_group_add_channels(span, currindex, chan_config->group_name) != FTDM_SUCCESS) {
+                        ftdm_log(FTDM_LOG_ERROR, "%d:Failed to add channels to group %s\n", span->span_id, chan_config->group_name);
+                        return FTDM_FAIL;
+                }
+        }
+
+        if (ftdm_set_channels_gains(span, currindex, chan_config->rxgain, chan_config->txgain) != FTDM_SUCCESS) {
+                ftdm_log(FTDM_LOG_ERROR, "%d:Failed to set channel gains\n", span->span_id);
</ins><span class="cx">                 return FTDM_FAIL;
</span><span class="cx">         }
</span><ins>+
+
</ins><span class="cx">         if (ftdm_set_channels_alarms(span, currindex) != FTDM_SUCCESS) {
</span><span class="cx">                 ftdm_log(FTDM_LOG_ERROR, "%d:Failed to set channel alarms\n", span->span_id);
</span><span class="cx">                 return FTDM_FAIL;
</span><span class="cx">         }
</span><del>-        if (ftdm_set_channels_gains(span, currindex, chan_config->rxgain, chan_config->txgain) != FTDM_SUCCESS) {
-                ftdm_log(FTDM_LOG_ERROR, "%d:Failed to set channel gains\n", span->span_id);
-                return FTDM_FAIL;
-        }
</del><ins>+
</ins><span class="cx">         return FTDM_SUCCESS;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -3260,7 +3308,6 @@
</span><span class="cx">         int intparam = 0;
</span><span class="cx">         ftdm_span_t *span = NULL;
</span><span class="cx">         unsigned configured = 0, d = 0;
</span><del>-        ftdm_io_interface_t *fio = NULL;
</del><span class="cx">         ftdm_analog_start_type_t tmp;
</span><span class="cx">         ftdm_size_t len = 0;
</span><span class="cx">         ftdm_channel_config_t chan_config;
</span><span class="lines">@@ -3271,7 +3318,7 @@
</span><span class="cx">         if (!ftdm_config_open_file(&cfg, cfg_name)) {
</span><span class="cx">                 return FTDM_FAIL;
</span><span class="cx">         }
</span><del>-        
</del><ins>+        ftdm_log(FTDM_LOG_DEBUG, "Reading FreeTDM configuration file\n");        
</ins><span class="cx">         while (ftdm_config_next_pair(&cfg, &var, &val)) {
</span><span class="cx">                 if (*cfg.category == '#') {
</span><span class="cx">                         if (cfg.catno != catno) {
</span><span class="lines">@@ -3300,33 +3347,9 @@
</span><span class="cx">                                         *name++ = '\0';
</span><span class="cx">                                 }
</span><span class="cx">
</span><del>-                                ftdm_mutex_lock(globals.mutex);
-                                if (!(fio = (ftdm_io_interface_t *) hashtable_search(globals.interface_hash, type))) {
-                                        ftdm_load_module_assume(type);
-                                        if ((fio = (ftdm_io_interface_t *) hashtable_search(globals.interface_hash, type))) {
-                                                ftdm_log(FTDM_LOG_INFO, "auto-loaded '%s'\n", type);
-                                        }
-                                }
-                                ftdm_mutex_unlock(globals.mutex);
-
-                                if (!fio) {
-                                        ftdm_log(FTDM_LOG_CRIT, "failure creating span, no such type '%s'\n", type);
-                                        span = NULL;
-                                        continue;
-                                }
-
-                                if (!fio->configure_span) {
-                                        ftdm_log(FTDM_LOG_CRIT, "failure creating span, no configure_span method for '%s'\n", type);
-                                        span = NULL;
-                                        continue;
-                                }
-
-                                if (ftdm_span_create(fio, &span, name) == FTDM_SUCCESS) {
-                                        span->type = ftdm_strdup(type);
</del><ins>+                                if (ftdm_span_create(type, name, &span) == FTDM_SUCCESS) {
+                                        ftdm_log(FTDM_LOG_DEBUG, "created span %d (%s) of type %s\n", span->span_id, span->name, type);
</ins><span class="cx">                                         d = 0;
</span><del>-
-                                        ftdm_log(FTDM_LOG_DEBUG, "created span %d (%s) of type %s\n", span->span_id, span->name, type);
-                                        
</del><span class="cx">                                 } else {
</span><span class="cx">                                         ftdm_log(FTDM_LOG_CRIT, "failure creating span of type %s\n", type);
</span><span class="cx">                                         span = NULL;
</span><span class="lines">@@ -3341,8 +3364,9 @@
</span><span class="cx">                         ftdm_log(FTDM_LOG_DEBUG, "span %d [%s]=[%s]\n", span->span_id, var, val);
</span><span class="cx">                         
</span><span class="cx">                         if (!strcasecmp(var, "trunk_type")) {
</span><del>-                                span->trunk_type = ftdm_str2ftdm_trunk_type(val);
-                                ftdm_log(FTDM_LOG_DEBUG, "setting trunk type to '%s'\n", ftdm_trunk_type2str(span->trunk_type));
</del><ins>+                                ftdm_trunk_type_t trtype = ftdm_str2ftdm_trunk_type(val);
+                                ftdm_span_set_trunk_type(span, trtype);
+                                ftdm_log(FTDM_LOG_DEBUG, "setting trunk type to '%s'\n", ftdm_trunk_type2str(trtype));
</ins><span class="cx">                         } else if (!strcasecmp(var, "name")) {
</span><span class="cx">                                 if (!strcasecmp(val, "undef")) {
</span><span class="cx">                                         chan_config.name[0] = '\0';
</span><span class="lines">@@ -3371,7 +3395,7 @@
</span><span class="cx">                                                         ftdm_analog_start_type2str(span->start_type));
</span><span class="cx">                                 }
</span><span class="cx">                                 if (span->trunk_type == FTDM_TRUNK_FXO) {
</span><del>-                         unsigned chans_configured = 0;
</del><ins>+                                        unsigned chans_configured = 0;
</ins><span class="cx">                                         chan_config.type = FTDM_CHAN_TYPE_FXO;
</span><span class="cx">                                         if (ftdm_configure_span_channels(span, val, &chan_config, &chans_configured) == FTDM_SUCCESS) {
</span><span class="cx">                                                 configured += chans_configured;
</span></span></pre></div>
<a id="freeswitchtrunklibsfreetdmsrcincludefreetdmh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/freetdm/src/include/freetdm.h (17524 => 17525)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/freetdm/src/include/freetdm.h        2010-05-11 17:07:13 UTC (rev 17524)
+++ freeswitch/trunk/libs/freetdm/src/include/freetdm.h        2010-05-11 19:09:59 UTC (rev 17525)
</span><span class="lines">@@ -67,7 +67,8 @@
</span><span class="cx">         FTDM_MEMERR, /*!< Memory error, most likely allocation failure */
</span><span class="cx">         FTDM_TIMEOUT, /*!< Operation timed out (ie: polling on a device)*/
</span><span class="cx">         FTDM_NOTIMPL, /*!< Operation not implemented */
</span><del>-        FTDM_BREAK /*!< Request the caller to perform a break (context-dependant, ie: stop getting DNIS/ANI) */
</del><ins>+        FTDM_BREAK, /*!< Request the caller to perform a break (context-dependant, ie: stop getting DNIS/ANI) */
+        FTDM_EINVAL /*!< Invalid argument */
</ins><span class="cx"> } ftdm_status_t;
</span><span class="cx">
</span><span class="cx"> /*! \brief FreeTDM bool type. */
</span><span class="lines">@@ -299,6 +300,23 @@
</span><span class="cx"> /*! \brief Move from string to ftdm_signal_event_t and viceversa */
</span><span class="cx"> FTDM_STR2ENUM_P(ftdm_str2ftdm_signal_event, ftdm_signal_event2str, ftdm_signal_event_t)
</span><span class="cx">
</span><ins>+/*! \brief Span trunk types */
+typedef enum {
+        FTDM_TRUNK_E1,
+        FTDM_TRUNK_T1,
+        FTDM_TRUNK_J1,
+        FTDM_TRUNK_BRI,
+        FTDM_TRUNK_BRI_PTMP,
+        FTDM_TRUNK_FXO,
+        FTDM_TRUNK_FXS,
+        FTDM_TRUNK_EM,
+        FTDM_TRUNK_NONE
+} ftdm_trunk_type_t;
+#define TRUNK_STRINGS "E1", "T1", "J1", "BRI", "BRI_PTMP", "FXO", "FXS", "EM", "NONE"
+
+/*! \brief Move from string to ftdm_trunk_type_t and viceversa */
+FTDM_STR2ENUM_P(ftdm_str2ftdm_trunk_type, ftdm_trunk_type2str, ftdm_trunk_type_t)
+
</ins><span class="cx"> /*! \brief Basic channel configuration provided to ftdm_configure_span_channels */
</span><span class="cx"> typedef struct ftdm_channel_config {
</span><span class="cx">         char name[FTDM_MAX_NAME_STR_SZ];
</span><span class="lines">@@ -809,14 +827,18 @@
</span><span class="cx"> /*!
</span><span class="cx"> * \brief Create a new span (not needed if you are using freetdm.conf)
</span><span class="cx"> *
</span><del>- * \param fio The I/O interface the span will use
</del><ins>+ * \param iotype The I/O interface type this span will use.
+ * This depends on the available I/O modules
+ * ftmod_wanpipe = "wanpipe" (Sangoma)
+ * ftmod_zt = "zt" (DAHDI or Zaptel)
+ * ftmod_pika "pika" (this one is most likely broken)
+ * \param name Name for the span
</ins><span class="cx"> * \param span Pointer to store the create span
</span><del>- * \param name Name for the span
</del><span class="cx"> *
</span><span class="cx"> * \retval FTDM_SUCCESS success (the span was created)
</span><span class="cx"> * \retval FTDM_FAIL failure (span was not created)
</span><span class="cx"> */
</span><del>-FT_DECLARE(ftdm_status_t) ftdm_span_create(ftdm_io_interface_t *fio, ftdm_span_t **span, const char *name);
</del><ins>+FT_DECLARE(ftdm_status_t) ftdm_span_create(const char *iotype, const char *name, ftdm_span_t **span);
</ins><span class="cx">
</span><span class="cx"> /*!
</span><span class="cx"> * \brief Add a new channel to a span
</span><span class="lines">@@ -1144,9 +1166,40 @@
</span><span class="cx"> * \return FTDM_FAIL failure
</span><span class="cx"> */
</span><span class="cx"> FT_DECLARE(ftdm_status_t) ftdm_conf_node_destroy(ftdm_conf_node_t *node);
</span><ins>+
+/*!
+ * \brief Create and configure channels in the given span
+ *
+ * \param span The span container
+ * \param str The channel range null terminated string. "1-10", "24" etc
+ * \param chan_config The basic channel configuration for each channel within the range
+ * \param configured Pointer where the number of channels configured will be stored
+ *
+ * \return FTDM_SUCCESS success
+ * \return FTDM_FAIL failure
+ */
</ins><span class="cx"> FT_DECLARE(ftdm_status_t) ftdm_configure_span_channels(ftdm_span_t *span, const char *str, ftdm_channel_config_t *chan_config, unsigned *configured);
</span><span class="cx">
</span><span class="cx"> /*!
</span><ins>+ * \brief Set the trunk type for a span
+ * This must be called before configuring any channels within the span
+ *
+ * \param span The span
+ * \param type The trunk type
+ *
+ */
+FT_DECLARE(void) ftdm_span_set_trunk_type(ftdm_span_t *span, ftdm_trunk_type_t type);
+
+/*!
+ * \brief Get the trunk type for a span
+ *
+ * \param span The span
+ *
+ * \return The span trunk type
+ */
+FT_DECLARE(ftdm_trunk_type_t) ftdm_span_get_trunk_type(const ftdm_span_t *span);
+
+/*!
</ins><span class="cx"> * \brief Return the channel identified by the provided id
</span><span class="cx"> *
</span><span class="cx"> * \param span The span where the channel belongs
</span></span></pre></div>
<a id="freeswitchtrunklibsfreetdmsrcincludeprivateftdm_typesh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/freetdm/src/include/private/ftdm_types.h (17524 => 17525)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/freetdm/src/include/private/ftdm_types.h        2010-05-11 17:07:13 UTC (rev 17524)
+++ freeswitch/trunk/libs/freetdm/src/include/private/ftdm_types.h        2010-05-11 19:09:59 UTC (rev 17525)
</span><span class="lines">@@ -112,20 +112,6 @@
</span><span class="cx"> FTDM_STR2ENUM_P(ftdm_str2ftdm_tonemap, ftdm_tonemap2str, ftdm_tonemap_t)
</span><span class="cx">
</span><span class="cx"> typedef enum {
</span><del>-        FTDM_TRUNK_E1,
-        FTDM_TRUNK_T1,
-        FTDM_TRUNK_J1,
-        FTDM_TRUNK_BRI,
-        FTDM_TRUNK_BRI_PTMP,
-        FTDM_TRUNK_FXO,
-        FTDM_TRUNK_FXS,
-        FTDM_TRUNK_EM,
-        FTDM_TRUNK_NONE
-} ftdm_trunk_type_t;
-#define TRUNK_STRINGS "E1", "T1", "J1", "BRI", "BRI_PTMP", "FXO", "FXS", "EM", "NONE"
-FTDM_STR2ENUM_P(ftdm_str2ftdm_trunk_type, ftdm_trunk_type2str, ftdm_trunk_type_t)
-
-typedef enum {
</del><span class="cx">         FTDM_ANALOG_START_KEWL,
</span><span class="cx">         FTDM_ANALOG_START_LOOP,
</span><span class="cx">         FTDM_ANALOG_START_GROUND,
</span></span></pre>
</div>
</div>
<div id="footer">See you at ClueCon</div>
</body>
</html>