1 /*****************************************************************************\
3 ** Linux Call Router **
5 **---------------------------------------------------------------------------**
6 ** Copyright: Andreas Eversberg **
8 ** join functions for remote application **
10 \*****************************************************************************/
17 //#include <sys/types.h>
18 //#include <sys/stat.h>
21 //#define __u8 unsigned char
22 //#define __u16 unsigned short
23 //#define __u32 unsigned long
24 //#include "linux/isdnif.h"
28 * constructor for a new join
29 * the join will have a relation to the calling endpoint
31 JoinRemote::JoinRemote(unsigned long serial, char *remote) : Join()
33 PDEBUG(DEBUG_JOIN, "Constructor(new join)");
34 union parameter *param;
36 SCPY(j_remote, remote);
37 j_type = JOIN_TYPE_REMOTE;
41 PDEBUG(DEBUG_JOIN, "New remote join connected to endpoint id %lu and application %s\n", j_epoint_id, remote);
43 /* send new ref to remote socket */
44 memset(¶m, 0, sizeof(param));
45 if (admin_message_from_join(j_remote, j_serial, MESSAGE_NEWREF, param)<0)
46 FATAL("No socket with remote application '%s' found, this shall not happen. because we already created one.\n", j_remote);
53 JoinRemote::~JoinRemote()
59 /* join process is called from the main loop
60 * it processes the current calling state.
61 * returns 0 if join nothing was done
63 int JoinRemote::handler(void)
69 void JoinRemote::message_epoint(unsigned long epoint_id, int message_type, union parameter *param)
71 /* if endpoint has just been removed, but still a message in the que */
72 if (epoint_id != j_epoint_id)
75 /* look for Remote's interface */
76 if (admin_message_from_join(j_remote, j_serial, message_type, param)<0)
78 PERROR("No socket with remote application '%s' found, this shall not happen. Closing socket shall cause release of all joins.\n", j_remote);
82 if (message_type == MESSAGE_RELEASE)
89 void JoinRemote::message_remote(unsigned long ref, int message_type, union parameter *param)
91 struct message *message;
93 /* create relation if no relation exists */
96 class Endpoint *epoint;
98 if (!(epoint = new Endpoint(0, j_serial, ref)))
99 FATAL("No memory for Endpoint instance\n");
100 if (!(epoint->ep_app = new DEFAULT_ENDPOINT_APP(epoint)))
101 FATAL("No memory for Endpoint Application instance\n");
104 message = message_create(j_serial, j_epoint_id, JOIN_TO_EPOINT, message_type);
105 memcpy(&message->param, param, sizeof(message->param));
106 message_put(message);
108 if (message_type == MESSAGE_RELEASE)