Add -lncurses to LDD flags
[lcr.git] / port.cpp
index 16fcd72..0a5687c 100644 (file)
--- a/port.cpp
+++ b/port.cpp
@@ -159,8 +159,10 @@ Port::Port(int type, const char *portname, struct port_settings *settings, struc
                memset(&p_settings, 0, sizeof(p_settings));
        }
        SCPY(p_name, portname);
-       if (interface)
+       if (interface) {
                SCPY(p_interface_name, interface->name);
+               SCPY(p_tones_interface, interface->tones_dir);
+       }
        p_tone_dir[0] = '\0';
        p_type = type;
        p_serial = port_serial++;
@@ -192,6 +194,8 @@ Port::Port(int type, const char *portname, struct port_settings *settings, struc
 #ifdef WITH_VOOTP
        p_vootp = NULL;
 #endif
+       /* D-O-V */
+       dov_init();
 
        /* append port to chain */
        next = NULL;
@@ -234,6 +238,8 @@ Port::~Port(void)
        if (p_record)
                close_record(0, 0);
 
+       dov_exit();
+
        classuse--;
 
        /* disconnect port from endpoint */
@@ -319,8 +325,12 @@ void Port::set_tone(const char *dir, const char *name)
        if (name == NULL)
                name = "";
 
-       if (!dir || !dir[0])
-               dir = options.tones_dir; /* just in case we have no PmISDN instance */
+       if (!dir || !dir[0]) {
+               if (p_tones_interface[0])
+                       dir = p_tones_interface;
+               else
+                       dir = options.tones_dir; /* just in case we have no PmISDN instance */
+       }
 
        /* no counter, no eof, normal speed */
        p_tone_counter = 0;
@@ -660,6 +670,16 @@ int Port::message_epoint(unsigned int epoint_id, int message_id, union parameter
                set_vootp(&param->vootp);
                return 1;
 #endif
+
+       case MESSAGE_DOV_REQUEST: /* Data-Over-Voice message */
+               PDEBUG(DEBUG_PORT, "PORT(%s) sending data over voice message (len=%d)\n", p_name, param->dov.length);
+               dov_sendmsg(param->dov.data, param->dov.length, (enum dov_type)param->dov.type, param->dov.level);
+               return 1;
+
+       case MESSAGE_DOV_LISTEN: /* Data-Over-Voice listen order */
+               PDEBUG(DEBUG_PORT, "PORT(%s) sending data over voice listen order\n", p_name);
+               dov_listen((enum dov_type)param->dov.type);
+               return 1;
        }
 
        return 0;
@@ -754,6 +774,7 @@ int Port::open_record(int type, int vbox, int skip, char *extension, int anon_ig
                case CODEC_MONO:
                case CODEC_STEREO:
                case CODEC_8BIT:
+               memset(&dummyheader, 0, sizeof(dummyheader));
                ret = fwrite(dummyheader, sizeof(dummyheader), 1, p_record);
                break;