summaryrefslogtreecommitdiffstats
path: root/vbox.cpp
diff options
context:
space:
mode:
authorSuper User2008-01-06 12:30:37 +0100
committerSuper User2008-01-06 12:30:37 +0100
commita0beafd25e37f01f404ee0020d076d0ecc01ada8 (patch)
tree4438ee6eff55da2ed0d2cc1f071a93136f750a48 /vbox.cpp
parentfixes, screen in and out works, fixed release problem in mISDNuser (diff)
downloadlcr-a0beafd25e37f01f404ee0020d076d0ecc01ada8.tar.gz
lcr-a0beafd25e37f01f404ee0020d076d0ecc01ada8.tar.xz
lcr-a0beafd25e37f01f404ee0020d076d0ecc01ada8.zip
fixes
trace of vbox better beep after announcement announcements without beep recording of answering machine (vbox) works, as well as call recording. modified: README modified: action_vbox.cpp modified: port.cpp modified: port.h modified: todo.txt modified: vbox.cpp
Diffstat (limited to 'vbox.cpp')
-rw-r--r--vbox.cpp60
1 files changed, 54 insertions, 6 deletions
diff --git a/vbox.cpp b/vbox.cpp
index 9fde9fa..238a1da 100644
--- a/vbox.cpp
+++ b/vbox.cpp
@@ -55,6 +55,20 @@ VBoxPort::~VBoxPort()
}
+static void vbox_trace_header(class VBoxPort *vbox, char *message, int direction)
+{
+ /* init trace with given values */
+ start_trace(0,
+ NULL,
+ vbox?numberrize_callerinfo(vbox->p_callerinfo.id, vbox->p_callerinfo.ntype):NULL,
+ vbox?vbox->p_dialinginfo.id:NULL,
+ direction,
+ CATEGORY_CH,
+ vbox?vbox->p_serial:0,
+ message);
+}
+
+
/*
* handler of vbox
*/
@@ -82,6 +96,10 @@ int VBoxPort::handler(void)
message->param.disconnectinfo.cause = 16;
message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL;
message_put(message);
+ vbox_trace_header(this, "RELEASE from VBox (recoding limit reached)", DIRECTION_IN);
+ add_trace("cause", "value", "%d", message->param.disconnectinfo.cause);
+ add_trace("cause", "location", "%d", message->param.disconnectinfo.location);
+ end_trace();
/* remove epoint */
free_epointlist(p_epointlist);
}
@@ -134,6 +152,8 @@ int VBoxPort::handler(void)
message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_CONNECT);
memcpy(&message->param.connectinfo, &p_connectinfo, sizeof(struct connect_info));
message_put(message);
+ vbox_trace_header(this, "CONNECT from VBox (announcement is over)", DIRECTION_IN);
+ end_trace();
new_state(PORT_STATE_CONNECT);
}
}
@@ -143,6 +163,8 @@ int VBoxPort::handler(void)
{
/* recording start */
open_record(p_vbox_ext.vbox_codec, 2, 0, p_vbox_ext.number, p_vbox_ext.anon_ignore, p_vbox_ext.vbox_email, p_vbox_ext.vbox_email_file);
+ vbox_trace_header(this, "RECORDING (announcement is over)", DIRECTION_IN);
+ end_trace();
} else // else!!
if (p_vbox_mode == VBOX_MODE_ANNOUNCEMENT)
{
@@ -151,6 +173,10 @@ int VBoxPort::handler(void)
message->param.disconnectinfo.cause = 16;
message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL;
message_put(message);
+ vbox_trace_header(this, "RELEASE from VBox (after annoucement)", DIRECTION_IN);
+ add_trace("cause", "value", "%d", message->param.disconnectinfo.cause);
+ add_trace("cause", "location", "%d", message->param.disconnectinfo.location);
+ end_trace();
/* recording is close during destruction */
delete this;
return(-1); /* must return because port is gone */
@@ -196,9 +222,11 @@ int VBoxPort::message_epoint(unsigned long epoint_id, int message_id, union para
return(1);
case MESSAGE_DISCONNECT: /* call has been disconnected */
- PDEBUG(DEBUG_VBOX, "PORT(%s) vbox port with (caller id %s) received disconnect cause=%d\n", p_name, p_callerinfo.id, param->disconnectinfo.cause);
-
new_state(PORT_STATE_OUT_DISCONNECT);
+ vbox_trace_header(this, "DISCONNECT to VBox", DIRECTION_OUT);
+ add_trace("cause", "value", "%d", param->disconnectinfo.cause);
+ add_trace("cause", "location", "%d", param->disconnectinfo.location);
+ end_trace();
while(p_epointlist)
{
@@ -206,6 +234,10 @@ int VBoxPort::message_epoint(unsigned long epoint_id, int message_id, union para
message->param.disconnectinfo.cause = CAUSE_NORMAL;
message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL;
message_put(message);
+ vbox_trace_header(this, "RELEASE from VBox (after disconnect)", DIRECTION_IN);
+ add_trace("cause", "value", "%d", message->param.disconnectinfo.cause);
+ add_trace("cause", "location", "%d", message->param.disconnectinfo.location);
+ end_trace();
/* remove epoint */
free_epointlist(p_epointlist);
}
@@ -215,7 +247,10 @@ int VBoxPort::message_epoint(unsigned long epoint_id, int message_id, union para
break;
case MESSAGE_RELEASE: /* release vbox port */
- PDEBUG(DEBUG_VBOX, "PORT(%s) vbox port with (caller id %s) received release\n", p_name, p_callerinfo.id);
+ vbox_trace_header(this, "RELEASE to VBox", DIRECTION_OUT);
+ add_trace("cause", "value", "%d", param->disconnectinfo.cause);
+ add_trace("cause", "location", "%d", param->disconnectinfo.location);
+ end_trace();
/* we are done */
/* recording is close during destruction */
@@ -238,7 +273,11 @@ int VBoxPort::message_epoint(unsigned long epoint_id, int message_id, union para
{
SPRINT(filename, "%s/%s/%s/vbox/announcement", INSTALL_DATA, options.extensions_dir, p_vbox_ext.number);
}
- PDEBUG(DEBUG_VBOX, "PORT(%s) vbox port received setup from '%s' to '%s'\n", p_name, param->setup.callerinfo.id, param->setup.dialinginfo.id);
+ vbox_trace_header(this, "SETUP to VBox", DIRECTION_OUT);
+ add_trace("from", "id", "%s", param->setup.callerinfo.id);
+ add_trace("to", "box", "%s", param->setup.dialinginfo.id);
+ end_trace();
+ memcpy(&p_dialinginfo, &param->setup.dialinginfo, sizeof(p_dialinginfo));
memcpy(&p_callerinfo, &param->setup.callerinfo, sizeof(p_callerinfo));
memcpy(&p_redirinfo, &param->setup.redirinfo, sizeof(p_redirinfo));
/* link relation */
@@ -262,12 +301,16 @@ int VBoxPort::message_epoint(unsigned long epoint_id, int message_id, union para
message = message_create(p_serial, epoint_id, PORT_TO_EPOINT, MESSAGE_CONNECT);
memcpy(&message->param.connectinfo, &p_connectinfo, sizeof(struct connect_info));
message_put(message);
+ vbox_trace_header(this, "CONNECT from VBox (after setup)", DIRECTION_IN);
+ end_trace();
new_state(PORT_STATE_CONNECT);
} else
{
/* send alerting message */
message = message_create(p_serial, epoint_id, PORT_TO_EPOINT, MESSAGE_ALERTING);
message_put(message);
+ vbox_trace_header(this, "ALERTING from VBox (play announcement before connect)", DIRECTION_IN);
+ end_trace();
new_state(PORT_STATE_IN_ALERTING);
}
@@ -276,14 +319,19 @@ int VBoxPort::message_epoint(unsigned long epoint_id, int message_id, union para
{
fhuse++;
}
+ vbox_trace_header(this, "ANNOUNCEMENT", DIRECTION_OUT);
+ add_trace("file", "name", "%s", filename);
+ add_trace("file", "exists", "%s", (p_vbox_announce_fh>=0)?"yes":"no");
+ end_trace();
/* start recording if desired */
p_vbox_mode = p_vbox_ext.vbox_mode;
p_vbox_record_limit = p_vbox_ext.vbox_time;
- if (!p_vbox_announce_fh || p_vbox_mode==VBOX_MODE_PARALLEL)
+ if (p_vbox_announce_fh<0 || p_vbox_mode==VBOX_MODE_PARALLEL)
{
- PDEBUG(DEBUG_VBOX, "PORT(%s) parallel mode OR no announcement found at: '%s' so we start recording now.\n", p_name, filename);
/* recording start */
open_record(p_vbox_ext.vbox_codec, 2, 0, p_vbox_ext.number, p_vbox_ext.anon_ignore, p_vbox_ext.vbox_email, p_vbox_ext.vbox_email_file);
+ vbox_trace_header(this, "RECORDING", DIRECTION_IN);
+ end_trace();
}
break;