summaryrefslogtreecommitdiffstats
path: root/call.cpp
diff options
context:
space:
mode:
authorSuper User2007-05-06 15:54:52 +0200
committerSuper User2007-05-06 15:54:52 +0200
commit2ed0fee489c37a6e2d4473f6185ebbe3e746ac11 (patch)
treefcf232bc282c083404cfde0ce5b04236fe202c3e /call.cpp
parentfirst commit (diff)
downloadlcr-2ed0fee489c37a6e2d4473f6185ebbe3e746ac11.tar.gz
lcr-2ed0fee489c37a6e2d4473f6185ebbe3e746ac11.tar.xz
lcr-2ed0fee489c37a6e2d4473f6185ebbe3e746ac11.zip
only for backup, still in coding state - no compile!!!
Diffstat (limited to 'call.cpp')
-rw-r--r--call.cpp147
1 files changed, 147 insertions, 0 deletions
diff --git a/call.cpp b/call.cpp
new file mode 100644
index 0000000..a566080
--- /dev/null
+++ b/call.cpp
@@ -0,0 +1,147 @@
+/*****************************************************************************\
+** **
+** PBX4Linux **
+** **
+**---------------------------------------------------------------------------**
+** Copyright: Andreas Eversberg **
+** **
+** call functions **
+** **
+\*****************************************************************************/
+
+#include <stdio.h>
+//#include <string.h>
+//#include <stdlib.h>
+//#include <unistd.h>
+//#include <poll.h>
+//#include <sys/types.h>
+//#include <sys/stat.h>
+//#include <fcntl.h>
+#include "main.h"
+//#define __u8 unsigned char
+//#define __u16 unsigned short
+//#define __u32 unsigned long
+//#include "linux/isdnif.h"
+
+unsigned long call_serial = 1; /* must be 1, because 0== no call */
+
+//CALL_STATES
+
+class Call *call_first = NULL;
+
+/*
+ * find the call with call_id
+ */
+class Call *find_call_id(unsigned long call_id)
+{
+ class Call *call = call_first;
+
+ while(call)
+ {
+//printf("comparing: '%s' with '%s'\n", name, call->c_name);
+ if (call->c_serial == call_id)
+ return(call);
+ call = call->next;
+ }
+
+ return(NULL);
+}
+
+
+/*
+ * constructor for a new call
+ */
+Call::Call(class Endpoint *epoint)
+{
+ class Call **callp;
+
+ if (!epoint)
+ {
+ PERROR("software error, epoint is NULL.\n");
+ exit(-1);
+ }
+ c_serial = call_serial++;
+ c_type = CALL_TYPE_NONE;
+
+ /* attach to chain */
+ next = NULL;
+ callp = &call_first;
+ while(*callp)
+ callp = &((*callp)->next);
+ *callp = this;
+
+ classuse++;
+}
+
+
+/*
+ * call descructor
+ */
+Call::~Call()
+{
+ class Call *cl, **clp;
+
+ classuse--;
+
+ cl = call_first;
+ clp = &call_first;
+ while(cl)
+ {
+ if (cl == this)
+ break;
+ clp = &cl->next;
+ cl = cl->next;
+ }
+ if (!cl)
+ {
+ PERROR("software error, call not in chain! exitting\n");
+ exit(-1);
+ }
+ *clp = cl->next; /* detach from chain */
+}
+
+
+
+/* epoint sends a message to a call
+ *
+ */
+void Call::message_epoint(unsigned long epoint_id, int message_type, union parameter *param)
+{
+}
+
+
+/* call process is called from the main loop
+ * it processes the current calling state.
+ * returns 0 if call nothing was done
+ */
+int Call::handler(void)
+{
+ return(0);
+}
+
+void Call::release(unsigned long epoint_id, int hold, int location, int cause)
+{
+}
+
+/* free all call structures */
+void call_free(void)
+{
+
+ if (!call_first)
+ {
+ PDEBUG(DEBUG_CALL, "no more pending call(s), done!\n");
+ return;
+ }
+ while(call_first)
+ {
+ if (options.deb & DEBUG_CALL)
+ {
+ PDEBUG(DEBUG_CALL, "freeing pending call\n");
+ }
+
+ delete call_first;
+ }
+}
+
+
+