}
}
+ /* record data */
+ if (p_record)
+ record(data, 160, 0); // from down
+ if (p_tap)
+ tap(data, 160, 0); // from down
+
/* local echo */
if (p_echotest)
bridge_rx(data, 160);
{
unsigned char frame[33];
+ /* record data */
+ if (p_record)
+ record(data, len, 1); // from up
+ if (p_tap)
+ tap(data, len, 1); // from up
+
/* encoder init failed */
if (!p_g_encoder)
return -EINVAL;
// printf(".");fflush(stdout);return;
if (p_record)
record(data, len, 1); // from up
+ if (p_tap)
+ tap(data, len, 1); // from up
return;
}
if (hh->prim != PH_DATA_IND && hh->prim != DL_DATA_IND) {
/* record data */
if (p_record)
record(data, len, 0); // from down
+ if (p_tap)
+ tap(data, len, 0); // from down
/* randomize and listen to crypt message if enabled */
if (p_m_crypt_listen) {
int tx_dejitter = 0;
/* call bridges in user space OR crypto OR recording */
- if (p_bridge || p_m_crypt_msg_loops || p_m_crypt_listen || p_record || p_m_inband_receive_on) {
+ if (p_bridge || p_m_crypt_msg_loops || p_m_crypt_listen || p_record || p_tap || p_m_inband_receive_on) {
/* rx IS required */
if (p_m_rxoff) {
/* turn on RX */
ph_control(p_m_mISDNport, this, p_m_mISDNport->b_sock[p_m_b_index].fd, DSP_RECEIVE_OFF, 0, "DSP-RXOFF", 1);
}
}
- /* recording */
- if (p_record) {
+ /* recording / tapping */
+ if (p_record || p_tap) {
/* txdata IS required */
if (!p_m_txdata) {
/* turn on RX */
/* call recording */
p_record = NULL;
+ p_tap = 0;
p_record_type = 0;
p_record_length = 0;
p_record_skip = 0;
}
+void Port::tap(unsigned char *data, int length, int dir_fromup)
+{
+}
+
void Port::update_rxoff(void)
{
}
struct capa_info p_capainfo; /* info on l2,l3 capacity */
int p_echotest; /* set to echo audio data FROM port back to port's mixer */
- /* recording */
+ /* recording/tapping */
int open_record(int type, int mode, int skip, char *terminal, int anon_ignore, const char *vbox_email, int vbox_email_file);
void close_record(int beep, int mute);
void record(unsigned char *data, int length, int dir_fromup);
+ void tap(unsigned char *data, int length, int dir_fromup);
FILE *p_record; /* recording fp: if not NULL, recording is enabled */
+ unsigned int p_tap; /* enpoint to send tapping audio to */
int p_record_type; /* codec to use: RECORD_MONO, RECORD_STEREO, ... */
int p_record_skip; /* skip bytes before writing the sample */
unsigned int p_record_length; /* size of what's written so far */
switch (message_type) {
case MESSAGE_TRAFFIC:
+ /* record audio */
+ if (p_record)
+ record(param->traffic.data, param->traffic.len, 0); // from down
+ if (p_tap)
+ tap(param->traffic.data, param->traffic.len, 0); // from down
bridge_tx(param->traffic.data, param->traffic.len);
if (p_tone_name[0]) {
read_audio(param->traffic.data, param->traffic.len);
+ /* record audio */
+ if (p_record)
+ record(param->traffic.data, param->traffic.len, 1); // from up
+ if (p_tap)
+ tap(param->traffic.data, param->traffic.len, 1); // from up
admin_message_from_lcr(p_r_remote_id, p_r_ref, MESSAGE_TRAFFIC, param);
}
return;
len -= l;
memcpy(newparam.traffic.data, data, l);
data += l;
+ /* record audio */
+ if (p_record)
+ record(data, len, 1); // from up
+ if (p_tap)
+ tap(data, len, 1); // from up
admin_message_from_lcr(p_r_remote_id, p_r_ref, MESSAGE_TRAFFIC, &newparam);
}
return 0;
}
+ /* record audio */
+ if (psip->p_record)
+ psip->record(payload, payload_len, 0); // from down
+ if (psip->p_tap)
+ psip->tap(payload, payload_len, 0); // from down
+
n = payload_len;
from = payload;
to = payload;
int duration; /* in samples */
unsigned char buffer[256];
+ /* record audio */
+ if (p_record)
+ record(data, len, 1); // from up
+ if (p_tap)
+ tap(data, len, 1); // from up
+
if (!p_s_rtp_is_connected) {
/* drop silently */
return 0;