-void EndpointAppPBX::action_dialing_remote(void)
-{
- struct route_param *rparam;
- struct port_list *portlist = ea_endpoint->ep_portlist;
- struct lcr_msg *message;
- struct capa_info capainfo;
- struct caller_info callerinfo;
- struct redir_info redirinfo;
- struct dialing_info dialinginfo;
- char context[128] = "";
- char remote[32];
-
- if (!ea_endpoint->ep_join_id) {
- /* no join yet, sending setup */
- if (!(rparam = routeparam(e_action, PARAM_APPLICATION))) {
- trace_header("ACTION remote (no application given)", DIRECTION_NONE);
- end_trace();
- new_state(EPOINT_STATE_OUT_DISCONNECT);
- message_disconnect_port(portlist, CAUSE_SERVICEUNAVAIL, LOCATION_PRIVATE_LOCAL, "");
- set_tone(portlist, "cause_3f");
- return;
- }
- SCPY(remote, rparam->string_value);
- if (!_action_init_call(remote))
- return;
-
- /* create bearer/caller/dialinginfo */
- memcpy(&capainfo, &e_capainfo, sizeof(capainfo));
- memcpy(&callerinfo, &e_callerinfo, sizeof(callerinfo));
- memcpy(&redirinfo, &e_redirinfo, sizeof(redirinfo));
- memset(&dialinginfo, 0, sizeof(dialinginfo));
-
- if ((rparam = routeparam(e_action, PARAM_CONTEXT))) {
- SCPY(context, rparam->string_value);
- }
- if ((rparam = routeparam(e_action, PARAM_EXTEN))) {
- SCPY(dialinginfo.id, rparam->string_value);
- dialinginfo.ntype = INFO_NTYPE_UNKNOWN;
- } else {
- SCPY(dialinginfo.id, e_extdialing);
- }
- e_extdialing = e_dialinginfo.id + strlen(e_dialinginfo.id);
- /* send setup to remote */
- trace_header("ACTION remote (setup)", DIRECTION_NONE);
- add_trace("number", NULL, dialinginfo.id);
- add_trace("remote", NULL, remote);
- if (context[0])
- add_trace("context", NULL, context);
- end_trace();
- message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_join_id, EPOINT_TO_JOIN, MESSAGE_SETUP);
- memcpy(&message->param.setup.dialinginfo, &dialinginfo, sizeof(struct dialing_info));
- memcpy(&message->param.setup.redirinfo, &redirinfo, sizeof(struct redir_info));
- memcpy(&message->param.setup.callerinfo, &callerinfo, sizeof(struct caller_info));
- memcpy(&message->param.setup.capainfo, &capainfo, sizeof(struct capa_info));
- SCPY(message->param.setup.context, context);
- message_put(message);
- } else {
- /* send overlap digits */
- trace_header("ACTION remote (dialing)", DIRECTION_NONE);
- add_trace("number", NULL, e_extdialing);
- end_trace();
- if (e_extdialing[0]) {
- message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_join_id, EPOINT_TO_JOIN, MESSAGE_INFORMATION);
- memcpy(&message->param.information, &e_dialinginfo, sizeof(struct dialing_info));
- SCPY(message->param.information.id, e_extdialing);
- e_extdialing = e_dialinginfo.id + strlen(e_dialinginfo.id);
- message_put(message);
- }
- }
-}
-
-