]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[mod_spandsp] Fix compilation against >=2023/06/02 spandsp
authorPatrice Fournier <patrice.fournier@t38fax.com>
Tue, 4 Feb 2025 20:54:26 +0000 (15:54 -0500)
committerGitHub <noreply@github.com>
Tue, 4 Feb 2025 20:54:26 +0000 (23:54 +0300)
* [mod_spandsp] Fix compilation against >=2023/06/02 spandsp

spandsp, beginning with commit d9681c37 and coinciding with the
SPANDSP_RELEASE_DATE of 20230620, introduced the following changes to
its V.18 protocol API, which FreeSWITCH is not able to compile against:
- Certain V.18 constants were renamed.
- The v18_init function now requires passing a third function, handling
the V.18 modem's status changes.

This patch allows FreeSWITCH to build against current versions of
spandsp by:
- Using the new V.18 constant names.
- Implementing a simple status reporter callback function and passing it
as the third function to v18_init.

Additionally, it retains backward compatibility with prior versions of
spandp through #if conditions checking the value of
SPANDSP_RELEASE_DATE.

Signed-off-by: Patrice Fournier <patrice.fournier@t38fax.com>
* [mod_spandsp] Pass session to handle_v18_status.

---------

Signed-off-by: Patrice Fournier <patrice.fournier@t38fax.com>
Co-authored-by: Morgan Scarafiotti <morgan.scarafiotti@t38fax.com>
Co-authored-by: Andrey Volk <andywolk@gmail.com>
src/mod/applications/mod_spandsp/mod_spandsp.c
src/mod/applications/mod_spandsp/mod_spandsp.h
src/mod/applications/mod_spandsp/mod_spandsp_dsp.c

index 3f69b9746a57d02e3b5e91761c4f0fbd2d8c839e..50d03f93a3d21da02b02da894b86d54d428d2f3c 100644 (file)
@@ -37,7 +37,6 @@
 
 
 #include "mod_spandsp.h"
-#include <spandsp/version.h>
 #include "mod_spandsp_modem.h"
 
 /* **************************************************************************
index 01f79e254df00b6eb939901622719201524e00ff..6a936eee1856b6dcff30f1bbf4199866da561267 100644 (file)
@@ -58,6 +58,12 @@ typedef int zap_socket_t;
 #define SPANDSP_EVENT_TXFAXNEGOCIATERESULT "spandsp::txfaxnegociateresult"
 #define SPANDSP_EVENT_RXFAXNEGOCIATERESULT "spandsp::rxfaxnegociateresult"
 
+#include <spandsp/version.h>
+
+#if SPANDSP_RELEASE_DATE < 20230620
+#define V18_MODE_WEITBRECHT_5BIT_4545 V18_MODE_5BIT_4545
+#define V18_MODE_WEITBRECHT_5BIT_50   V18_MODE_5BIT_50
+#endif
 
 
 /* The global stuff */
index 836808a48d28978a6291a0d4655ad446ae1a1d5b..51ac2a0e63969697bba39bb4a3f9a4ee3c06df99 100644 (file)
@@ -152,17 +152,27 @@ static void put_text_msg(void *user_data, const uint8_t *msg, int len)
 
 }
 
+#if SPANDSP_RELEASE_DATE >= 20230620
+static void handle_v18_status(void *user_data, int status)
+{
+       switch_core_session_t *session = (switch_core_session_t *) user_data;
+       switch_channel_t *channel = switch_core_session_get_channel(session);
+
+       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "%s detected V.18 modem: %s\n", switch_channel_get_name(channel), v18_status_to_str(status));
+}
+#endif
+
 static int get_v18_mode(switch_core_session_t *session)
 {
        switch_channel_t *channel = switch_core_session_get_channel(session);
        const char *var;
-       int r = V18_MODE_5BIT_4545;
+       int r = V18_MODE_WEITBRECHT_5BIT_4545;
 
        if ((var = switch_channel_get_variable(channel, "v18_mode"))) {
                if (!strcasecmp(var, "5BIT_45") || !strcasecmp(var, "baudot")) {
-                       r = V18_MODE_5BIT_4545;
+                       r = V18_MODE_WEITBRECHT_5BIT_4545;
                } else if (!strcasecmp(var, "5BIT_50")) {
-                       r = V18_MODE_5BIT_50;
+                       r = V18_MODE_WEITBRECHT_5BIT_50;
                } else if (!strcasecmp(var, "DTMF")) {
                        r = V18_MODE_DTMF;
                } else if (!strcasecmp(var, "EDT")) {
@@ -213,8 +223,11 @@ switch_status_t spandsp_tdd_send_session(switch_core_session_t *session, const c
                return SWITCH_STATUS_FALSE;
        }
 
+#if SPANDSP_RELEASE_DATE >= 20230620
+       tdd_state = v18_init(NULL, TRUE, get_v18_mode(session), V18_AUTOMODING_GLOBAL, put_text_msg, NULL, handle_v18_status, session);
+#else
        tdd_state = v18_init(NULL, TRUE, get_v18_mode(session), V18_AUTOMODING_GLOBAL, put_text_msg, NULL);
-
+#endif
 
        v18_put(tdd_state, text, -1);
 
@@ -260,7 +273,13 @@ switch_status_t spandsp_tdd_encode_session(switch_core_session_t *session, const
        }
 
        pvt->session = session;
+
+#if SPANDSP_RELEASE_DATE >= 20230620
+       pvt->tdd_state = v18_init(NULL, TRUE, get_v18_mode(session), V18_AUTOMODING_GLOBAL, put_text_msg, NULL, handle_v18_status, session);
+#else
        pvt->tdd_state = v18_init(NULL, TRUE, get_v18_mode(session), V18_AUTOMODING_GLOBAL, put_text_msg, NULL);
+#endif
+
        pvt->head_lead = TDD_LEAD;
 
        v18_put(pvt->tdd_state, text, -1);
@@ -338,7 +357,12 @@ switch_status_t spandsp_tdd_decode_session(switch_core_session_t *session)
        }
 
        pvt->session = session;
+
+#if SPANDSP_RELEASE_DATE >= 20230620
+       pvt->tdd_state = v18_init(NULL, FALSE, get_v18_mode(session), V18_AUTOMODING_GLOBAL, put_text_msg, pvt, handle_v18_status, session);
+#else
        pvt->tdd_state = v18_init(NULL, FALSE, get_v18_mode(session), V18_AUTOMODING_GLOBAL, put_text_msg, pvt);
+#endif
 
        if ((status = switch_core_media_bug_add(session, "spandsp_tdd_decode", NULL,
                                                tdd_decode_callback, pvt, 0, SMBF_READ_REPLACE | SMBF_NO_PAUSE, &bug)) != SWITCH_STATUS_SUCCESS) {