+static void vbox_trace_header(class VBoxPort *vbox, const char *message, int direction)
+{
+ /* init trace with given values */
+ start_trace(-1,
+ NULL,
+ vbox?numberrize_callerinfo(vbox->p_callerinfo.id, vbox->p_callerinfo.ntype, options.national, options.international):NULL,
+ vbox?vbox->p_dialinginfo.id:NULL,
+ direction,
+ CATEGORY_CH,
+ vbox?vbox->p_serial:0,
+ message);
+}
+
+
+int record_timeout(struct lcr_timer *timer, void *instance, int index)
+{
+ class VBoxPort *vboxport = (class VBoxPort *)instance;
+ struct lcr_msg *message;
+
+ while(vboxport->p_epointlist) {
+ /* send release */
+ message = message_create(vboxport->p_serial, vboxport->p_epointlist->epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE);
+ message->param.disconnectinfo.cause = 16;
+ message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL;
+ message_put(message);
+ vbox_trace_header(vboxport, "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 */
+ vboxport->free_epointlist(vboxport->p_epointlist);
+ }
+ /* recording is close during destruction */
+ delete vboxport;
+ return 0;
+}
+
+int announce_timer(struct lcr_timer *timer, void *instance, int index)
+{
+ class VBoxPort *vboxport = (class VBoxPort *)instance;
+
+ /* port my self destruct here */
+ vboxport->send_announcement();
+
+ return 0;
+}
+
+void VBoxPort::send_announcement(void)