X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=port.cpp;h=0a5687c1d6fcd5120e959119a4d050ae6cdaa22a;hp=16fcd724b3a336a027a927cbbd1cc4b9beb56490;hb=79bd731c0db3e3202cfeed2af3fb217ae744b70f;hpb=e233557e40043050c72b46d4b32b3a04cfd3d947 diff --git a/port.cpp b/port.cpp index 16fcd72..0a5687c 100644 --- 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(¶m->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;