summaryrefslogtreecommitdiffstats
path: root/joinasterisk.cpp
diff options
context:
space:
mode:
authorSuper User2007-07-17 19:28:09 +0200
committerSuper User2007-07-17 19:28:09 +0200
commit5a22e57828617abc14e27814ee918cc63b96fd46 (patch)
tree049837484887d674939020203a2111197c7e3d5d /joinasterisk.cpp
parentbackup (diff)
downloadlcr-5a22e57828617abc14e27814ee918cc63b96fd46.tar.gz
lcr-5a22e57828617abc14e27814ee918cc63b96fd46.tar.xz
lcr-5a22e57828617abc14e27814ee918cc63b96fd46.zip
alpha phase is open, this means:
it compiles! it runs! it calls without known bug yet! comments to jolly@eversberg.eu
Diffstat (limited to 'joinasterisk.cpp')
-rw-r--r--joinasterisk.cpp109
1 files changed, 109 insertions, 0 deletions
diff --git a/joinasterisk.cpp b/joinasterisk.cpp
new file mode 100644
index 0000000..0ea0633
--- /dev/null
+++ b/joinasterisk.cpp
@@ -0,0 +1,109 @@
+/*****************************************************************************\
+** **
+** Linux Call Router **
+** **
+**---------------------------------------------------------------------------**
+** Copyright: Andreas Eversberg **
+** **
+** join functions for channel driver **
+** **
+\*****************************************************************************/
+
+#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"
+
+
+/*
+ * constructor for a new join
+ * the join will have a relation to the calling endpoint
+ */
+JoinAsterisk::JoinAsterisk(unsigned long serial) : Join()
+{
+ PDEBUG(DEBUG_JOIN, "Constructor(new join)");
+
+ c_type = JOIN_TYPE_ASTERISK;
+
+ c_epoint_id = serial;
+ if (c_epoint_id)
+ PDEBUG(DEBUG_JOIN, "New join connected to endpoint id %lu\n", c_epoint_id);
+}
+
+
+/*
+ * join descructor
+ */
+JoinAsterisk::~JoinAsterisk()
+{
+
+}
+
+
+/* join process is called from the main loop
+ * it processes the current calling state.
+ * returns 0 if join nothing was done
+ */
+int JoinAsterisk::handler(void)
+{
+ return(0);
+}
+
+
+void JoinAsterisk::message_epoint(unsigned long epoint_id, int message_type, union parameter *param)
+{
+ /* if endpoint has just been removed, but still a message in the que */
+ if (epoint_id != c_epoint_id)
+ return;
+
+ /* look for asterisk's interface */
+ if (admin_message_from_join(epoint_id, message_type, param)<0)
+ {
+ PERROR("No socket with asterisk found, this shall not happen. Closing socket shall cause release of all asterisk joins\n");
+ return;
+ }
+
+ if (message_type == MESSAGE_RELEASE)
+ {
+ delete this;
+ return;
+ }
+}
+
+void JoinAsterisk::message_asterisk(unsigned long ref, int message_type, union parameter *param)
+{
+ struct message *message;
+
+ /* create relation if no relation exists */
+ if (!c_epoint_id)
+ {
+ class Endpoint *epoint;
+
+ if (!(epoint = new Endpoint(0, c_serial, ref)))
+ FATAL("No memory for Endpoint instance\n");
+ if (!(epoint->ep_app = new DEFAULT_ENDPOINT_APP(epoint)))
+ FATAL("No memory for Endpoint Application instance\n");
+ }
+
+ message = message_create(c_serial, c_epoint_id, JOIN_TO_EPOINT, message_type);
+ memcpy(&message->param, param, sizeof(message->param));
+ message_put(message);
+
+ if (message_type == MESSAGE_RELEASE)
+ {
+ delete this;
+ return;
+ }
+}
+
+
+