X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=joinremote.cpp;h=c02de8e4a70c406505ee281647c0f40d4f49f346;hp=3b7291cf297564f25a91e718cc8e1c76691ee29c;hb=9f505bd729375423e885dcbe4db30df65541f7a7;hpb=b5427b9c694cc2c0c1e5361d4cba721c87ad1cac diff --git a/joinremote.cpp b/joinremote.cpp index 3b7291c..c02de8e 100644 --- a/joinremote.cpp +++ b/joinremote.cpp @@ -9,41 +9,36 @@ ** ** \*****************************************************************************/ -#include -#include -#include -//#include -//#include -//#include -//#include -//#include #include "main.h" //#define __u8 unsigned char //#define __u16 unsigned short -//#define __u32 unsigned long -//#include "linux/isdnif.h" +//#define __u32 unsigned int +extern unsigned int new_remote; /* * constructor for a new join * the join will have a relation to the calling endpoint */ -JoinRemote::JoinRemote(unsigned long serial, char *remote_name, int remote_id) : Join() +JoinRemote::JoinRemote(unsigned int serial, char *remote_name, int remote_id) : Join() { PDEBUG(DEBUG_JOIN, "Constructor(new join)"); - union parameter *param; + union parameter param; SCPY(j_remote_name, remote_name); j_remote_id = remote_id; j_type = JOIN_TYPE_REMOTE; + j_remote_ref = new_remote++; - j_epoint_id = serial; + j_epoint_id = serial; /* this is the endpoint, if created by epoint */ if (j_epoint_id) PDEBUG(DEBUG_JOIN, "New remote join connected to endpoint id %lu and application %s\n", j_epoint_id, remote_name); /* send new ref to remote socket */ - memset(¶m, 0, sizeof(param)); - if (admin_message_from_join(j_remote_id, j_serial, MESSAGE_NEWREF, param)<0) + memset(¶m, 0, sizeof(union parameter)); + if (serial) + param.newref.direction = 1; /* new ref from lcr */ + if (admin_message_from_lcr(j_remote_id, j_remote_ref, MESSAGE_NEWREF, ¶m)<0) FATAL("No socket with remote application '%s' found, this shall not happen. because we already created one.\n", j_remote_name); } @@ -53,61 +48,54 @@ JoinRemote::JoinRemote(unsigned long serial, char *remote_name, int remote_id) : */ JoinRemote::~JoinRemote() { - -} - - -/* join process is called from the main loop - * it processes the current calling state. - * returns 0 if join nothing was done - */ -int JoinRemote::handler(void) -{ - return(0); } - -void JoinRemote::message_epoint(unsigned long epoint_id, int message_type, union parameter *param) +void JoinRemote::message_epoint(unsigned int epoint_id, int message_type, union parameter *param) { /* if endpoint has just been removed, but still a message in the que */ if (epoint_id != j_epoint_id) return; /* look for Remote's interface */ - if (admin_message_from_join(j_remote_id, j_serial, message_type, param)<0) - { + if (admin_message_from_lcr(j_remote_id, j_remote_ref, message_type, param)<0) { PERROR("No socket with remote application '%s' found, this shall not happen. Closing socket shall cause release of all joins.\n", j_remote_name); return; } - if (message_type == MESSAGE_RELEASE) - { + if (message_type == MESSAGE_RELEASE) { delete this; return; } } -void JoinRemote::message_remote(unsigned long ref, int message_type, union parameter *param) +void JoinRemote::message_remote(int message_type, union parameter *param) { - struct message *message; + struct lcr_msg *message; /* create relation if no relation exists */ - if (!j_epoint_id) - { + if (!j_epoint_id) { class Endpoint *epoint; - if (!(epoint = new Endpoint(0, j_serial, ref))) + if (!(epoint = new Endpoint(0, j_serial))) FATAL("No memory for Endpoint instance\n"); - if (!(epoint->ep_app = new DEFAULT_ENDPOINT_APP(epoint))) + j_epoint_id = epoint->ep_serial; + if (!(epoint->ep_app = new DEFAULT_ENDPOINT_APP(epoint, 1))) // outgoing FATAL("No memory for Endpoint Application instance\n"); } + /* set serial on bchannel message + * also ref is given, so we send message with ref */ + if (message_type == MESSAGE_BCHANNEL) { + message_bchannel_from_remote(this, param->bchannel.type, param->bchannel.handle); + return; + } + + /* cannot just forward, because param is not of container "struct lcr_msg" */ message = message_create(j_serial, j_epoint_id, JOIN_TO_EPOINT, message_type); memcpy(&message->param, param, sizeof(message->param)); message_put(message); - if (message_type == MESSAGE_RELEASE) - { + if (message_type == MESSAGE_RELEASE) { delete this; return; }