work...
[lcr.git] / joinremote.cpp
index f2c08b7..ba0612c 100644 (file)
@@ -31,7 +31,7 @@
 JoinRemote::JoinRemote(unsigned long 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;
@@ -42,9 +42,11 @@ JoinRemote::JoinRemote(unsigned long serial, char *remote_name, int remote_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(&param, 0, sizeof(param));
+       memset(&param, 0, sizeof(union parameter));
+       if (serial)
+               param.direction = 1; /* new ref from lcr */
        /* the j_serial is assigned by Join() parent. this is sent as new ref */
-       if (admin_message_from_join(j_remote_id, j_serial, MESSAGE_NEWREF, param)<0)
+       if (admin_message_from_join(j_remote_id, j_serial, MESSAGE_NEWREF, &param)<0)
                FATAL("No socket with remote application '%s' found, this shall not happen. because we already created one.\n", j_remote_name);
 }
 
@@ -123,32 +125,16 @@ void JoinRemote::message_remote(int message_type, union parameter *param)
        }
 }
 
-void message_bchannel_to_join(int serial, int type, unsigned long addr)
+void message_bchannel_to_join(unsigned long remote_id, unsigned long ref, int type, unsigned long addr)
 {
        union parameter param;
-       class Join *join;
-       class JoinRemote *joinremote;
-
-       /* find join serial */
-       join = find_join_id(serial);
-       if (!join)
-       {
-               PDEBUG(DEBUG_JOIN | DEBUG_BCHANNEL, "Join %d not found\n", serial);
-               return;
-       }
-       if (!join->j_type != JOIN_TYPE_REMOTE)
-       {
-               PERROR("Join %d not of remote type. This shall not happen.\n", serial);
-               return;
-       }
-       joinremote = (class JoinRemote *)join;
 
        memset(&param, 0, sizeof(union parameter));
        param.bchannel.type = type;
        param.bchannel.addr = addr;
-       if (admin_message_from_join(joinremote->j_remote_id, joinremote->j_serial, MESSAGE_BCHANNEL, &param)<0)
+       if (admin_message_from_join(remote_id, ref, MESSAGE_BCHANNEL, &param)<0)
        {
-               PERROR("No socket with remote application '%s' found, this shall not happen. Closing socket shall cause release of all joins.\n", joinremote->j_remote_name);
+               PERROR("No socket with remote id %d found, this happens, if the socket is closed before all bchannels are imported.\n", remote_id);
                return;         
        }
 }