aboutsummaryrefslogtreecommitdiffstats
path: root/package/libtapi/src/tapi-session.c
diff options
context:
space:
mode:
Diffstat (limited to 'package/libtapi/src/tapi-session.c')
-rw-r--r--package/libtapi/src/tapi-session.c122
1 files changed, 0 insertions, 122 deletions
diff --git a/package/libtapi/src/tapi-session.c b/package/libtapi/src/tapi-session.c
deleted file mode 100644
index 8b17053115..0000000000
--- a/package/libtapi/src/tapi-session.c
+++ /dev/null
@@ -1,122 +0,0 @@
-#include <stdlib.h>
-#include <stdbool.h>
-#include <stdint.h>
-
-#include "tapi-device.h"
-#include "tapi-port.h"
-#include "tapi-session.h"
-
-enum tapi_session_port_state {
- TAPI_SESSION_PORT_STATE_IDLE,
- TAPI_SESSION_PORT_STATE_RINGING,
- TAPI_SESSION_PORT_STATE_ACTIVE,
-};
-
-struct tapi_session_port {
- struct tapi_port *port;
- struct tapi_port_event_listener event_listener;
-
- enum tapi_session_port_state state;
-};
-
-struct tapi_session {
- struct tapi_device *dev;
- struct tapi_session_port caller;
- struct tapi_session_port callee;
-
- bool active;
- unsigned int link;
-
- void (*release)(struct tapi_session *session, void *data);
-};
-
-static void tapi_session_terminate(struct tapi_session *session)
-{
- if (session->active) {
- tapi_link_enable(session->dev, session->link);
- tapi_sync(session->dev);
- tapi_link_free(session->dev, session->link);
- }
-
- switch (session->callee.state) {
- case TAPI_SESSION_PORT_STATE_RINGING:
- tapi_port_set_ring(session->callee.port, false);
- break;
- default:
- break;
- }
-
- session->active = false;
-}
-
-static void tapi_session_caller_event(struct tapi_port *port,
- struct tapi_event *event, void *data)
-{
- struct tapi_session *session = data;
-
- if (event->type != TAPI_EVENT_TYPE_HOOK)
- return;
-
- if (event->hook.on) {
- tapi_session_terminate(session);
- }
-}
-
-static void tapi_session_callee_event(struct tapi_port *port,
- struct tapi_event *event, void *data)
-{
- struct tapi_session *session = data;
-
- if (event->type != TAPI_EVENT_TYPE_HOOK)
- return;
-
- if (event->hook.on) {
- if (session->callee.state == TAPI_SESSION_PORT_STATE_ACTIVE) {
- tapi_session_terminate(session);
- }
- } else {
- if (session->callee.state == TAPI_SESSION_PORT_STATE_RINGING) {
- tapi_port_set_ring(session->callee.port, false);
- session->link = tapi_link_alloc(session->dev,
- session->caller.port->ep, session->callee.port->ep);
- session->callee.state = TAPI_SESSION_PORT_STATE_ACTIVE;
- tapi_link_enable(session->dev, session->link);
- tapi_sync(session->dev);
- session->active = true;
- }
- }
-}
-
-struct tapi_session *tapi_session_alloc(struct tapi_device *dev,
- struct tapi_port *caller, struct tapi_port *callee,
- void (*release)(struct tapi_session *session, void *data), void *release_data)
-{
- struct tapi_session *session;
- struct tapi_session_port *session_port;
-
- session = malloc(sizeof(*session));
-
- session->dev = dev;
-
- session->callee.port = callee;
- session->callee.state = TAPI_SESSION_PORT_STATE_RINGING;
- session->callee.event_listener.callback = tapi_session_callee_event;
- session->callee.event_listener.data = session;
- tapi_port_register_event(callee, &session->callee.event_listener);
-
- session->caller.port = caller;
- session->caller.state = TAPI_SESSION_PORT_STATE_ACTIVE;
- session->caller.event_listener.callback = tapi_session_caller_event;
- session->caller.event_listener.data = session;
- tapi_port_register_event(caller, &session->caller.event_listener);
-
- tapi_port_set_ring(callee, true);
-}
-
-void tapi_session_free(struct tapi_session *session)
-{
- tapi_session_terminate(session);
- tapi_port_register_event(session->callee.port, &session->callee.event_listener);
- tapi_port_register_event(session->caller.port, &session->caller.event_listener);
- free(session);
-}