+ /* start recording, if not already */
+ if (p_vbox_mode == VBOX_MODE_NORMAL)
+ {
+ /* 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)
+ {
+ /* send release */
+ message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_RELEASE);
+ 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 */
+ }
+ } else
+ {
+ if (p_record)
+ record(buffer, tosend, 0); // from down
+ message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_DATA);
+ message->param.data.len = tosend;
+ memcpy(message->param.data.data, buffer, tosend);
+ message_put(message);
+ }