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;
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));
+ memset(¶m, 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, ¶m)<0)
FATAL("No socket with remote application '%s' found, this shall not happen. because we already created one.\n", j_remote_name);
}
}
}
-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(¶m, 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, ¶m)<0)
+ if (admin_message_from_join(remote_id, ref, MESSAGE_BCHANNEL, ¶m)<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;
}
}