summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sccp/sccp.h5
-rw-r--r--src/sccp/sccp.c11
2 files changed, 16 insertions, 0 deletions
diff --git a/include/sccp/sccp.h b/include/sccp/sccp.h
index 2e14788..604a2ac 100644
--- a/include/sccp/sccp.h
+++ b/include/sccp/sccp.h
@@ -106,6 +106,11 @@ int sccp_connection_close(struct sccp_connection *connection, int cause);
int sccp_connection_free(struct sccp_connection *connection);
/**
+ * internal..
+ */
+int sccp_connection_force_free(struct sccp_connection *conn);
+
+/**
* Create a new socket. Set your callbacks and then call bind to open
* the connection.
*/
diff --git a/src/sccp/sccp.c b/src/sccp/sccp.c
index 4bd87c8..e0fd02e 100644
--- a/src/sccp/sccp.c
+++ b/src/sccp/sccp.c
@@ -1198,6 +1198,17 @@ int sccp_connection_free(struct sccp_connection *connection)
return 0;
}
+int sccp_connection_force_free(struct sccp_connection *con)
+{
+ if (con->connection_state > SCCP_CONNECTION_STATE_NONE &&
+ con->connection_state < SCCP_CONNECTION_STATE_RELEASE_COMPLETE)
+ llist_del(&con->list);
+
+ con->connection_state = SCCP_CONNECTION_STATE_REFUSED;
+ sccp_connection_free(con);
+ return 0;
+}
+
struct sccp_connection *sccp_connection_socket(void)
{
return talloc_zero(tall_sccp_ctx, struct sccp_connection);