summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--action.cpp10
-rw-r--r--admin_client.c2
-rw-r--r--admin_server.c2
-rw-r--r--joinpbx.cpp6
4 files changed, 15 insertions, 5 deletions
diff --git a/action.cpp b/action.cpp
index 4b3f383..9f9db8e 100644
--- a/action.cpp
+++ b/action.cpp
@@ -236,6 +236,7 @@ void EndpointAppPBX::action_dialing_internal(void)
trace_header("ACTION extension (extension doesn't exist)", DIRECTION_NONE);
add_trace("extension", NULL, dialinginfo.id);
end_trace();
+ release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, 0, 0);
new_state(EPOINT_STATE_OUT_DISCONNECT);
message_disconnect_port(portlist, CAUSE_UNALLOCATED, LOCATION_PRIVATE_LOCAL, "");
set_tone(portlist, "cause_86");
@@ -248,6 +249,7 @@ void EndpointAppPBX::action_dialing_internal(void)
add_trace("extension", NULL, dialinginfo.id);
end_trace();
new_state(EPOINT_STATE_OUT_DISCONNECT);
+ release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, 0, 0);
message_disconnect_port(portlist, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, "");
set_tone(portlist, "cause_81");
return;
@@ -382,7 +384,7 @@ void EndpointAppPBX::action_dialing_external(void)
{
trace_header("ACTION extern (calling denied)", DIRECTION_NONE);
end_trace();
- release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, 0);
+ release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, 0, 0);
set_tone(portlist, "cause_82");
denied:
message_disconnect_port(portlist, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, "");
@@ -399,7 +401,7 @@ void EndpointAppPBX::action_dialing_external(void)
{
trace_header("ACTION extern (national calls denied)", DIRECTION_NONE);
end_trace();
- release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, 0);
+ release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, 0, 0);
set_tone(portlist, "cause_83");
goto denied;
}
@@ -413,7 +415,7 @@ void EndpointAppPBX::action_dialing_external(void)
{
trace_header("ACTION extern (international calls denied)", DIRECTION_NONE);
end_trace();
- release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, 0);
+ release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, 0, 0);
set_tone(portlist, "cause_84");
goto denied;
}
@@ -2292,7 +2294,7 @@ void EndpointAppPBX::process_dialing(void)
release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL);
goto end;
}
- release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, 0);
+ release(RELEASE_JOIN, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, 0, 0);
e_action = e_action->next;
if (!e_action)
{
diff --git a/admin_client.c b/admin_client.c
index 9baad71..65937e0 100644
--- a/admin_client.c
+++ b/admin_client.c
@@ -1626,9 +1626,11 @@ int main(int argc, char *argv[])
case MODE_TESTCALL:
ret = admin_testcall(sock, argc, argv);
+ break;
case MODE_TRACE:
ret = admin_trace(sock, argc, argv);
+ break;
}
close(sock);
diff --git a/admin_server.c b/admin_server.c
index c42f25f..419d2ec 100644
--- a/admin_server.c
+++ b/admin_server.c
@@ -1153,7 +1153,7 @@ int admin_handle(void)
if (epoint)
{
((class DEFAULT_ENDPOINT_APP *)epoint->ep_app)->
- release(RELEASE_ALL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, 0, 0);
+ release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL);
}
}
diff --git a/joinpbx.cpp b/joinpbx.cpp
index 750705f..ec03dc5 100644
--- a/joinpbx.cpp
+++ b/joinpbx.cpp
@@ -855,6 +855,12 @@ void JoinPBX::message_epoint(unsigned long epoint_id, int message_type, union pa
break;
case RELATION_TYPE_CALLING: /* by calling */
+ /* remove us, if we don't have a called releation yet */
+ if (!j_relation->next)
+ {
+ release(j_relation, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL);
+ return; // must return, because join IS destroyed
+ }
/* remove all relations that are in called */
release_again2:
reltemp = j_relation;