X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=appbridge.cpp;h=e94de02b02c2b2dc52786c54728c0539a9197e18;hp=b52e12582a9a4ec57ad51d33db84dea29bbad396;hb=1ba14173313beeae18b600d4c889521822821a07;hpb=d6866316df3f8f9456304af57999d03b9d762268 diff --git a/appbridge.cpp b/appbridge.cpp index b52e125..e94de02 100644 --- a/appbridge.cpp +++ b/appbridge.cpp @@ -114,6 +114,7 @@ fail: message->param.disconnectinfo.cause = cause; message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; message_put(message); + ea_endpoint->free_portlist(portlist); /* destroy endpoint */ ea_endpoint->ep_use = 0; @@ -147,13 +148,13 @@ fail: #endif #ifdef WITH_GSM_MS if (interface_out->gsm_ms) { - port = new Pgsm_bs(PORT_TYPE_GSM_MS_OUT, portname, &port_settings, interface_out); + port = new Pgsm_ms(PORT_TYPE_GSM_MS_OUT, portname, &port_settings, interface_out); } else #endif { + char *ifname = interface_out->name; #ifdef WITH_MISDN struct mISDNport *mISDNport; - char *ifname = interface_out->name; int channel = 0; struct admin_list *admin; int earlyb; @@ -198,7 +199,7 @@ fail: add_trace("interface", NULL, "%s", ifname); end_trace(); cause = 31; - goto fail + goto fail; #endif } if (!port) @@ -223,18 +224,22 @@ fail: /* port MESSAGE_RELEASE */ void EndpointAppBridge::port_release(struct port_list *portlist, int message_type, union parameter *param) { - unsigned int remote; + struct port_list *remote; PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint received release from port\n"); if (!ea_endpoint->ep_portlist || !ea_endpoint->ep_portlist->next) goto out; if (ea_endpoint->ep_portlist->port_id == portlist->port_id) - remote = ea_endpoint->ep_portlist->next->port_id; + remote = ea_endpoint->ep_portlist->next; else - remote = ea_endpoint->ep_portlist->port_id; + remote = ea_endpoint->ep_portlist; /* forward release */ - message_forward(ea_endpoint->ep_serial, remote, EPOINT_TO_PORT, param); + message_forward(ea_endpoint->ep_serial, remote->port_id, EPOINT_TO_PORT, param); + + /* remove relations to in and out port */ + ea_endpoint->free_portlist(portlist); + ea_endpoint->free_portlist(remote); out: /* destroy endpoint */