return ret;
}
-CORBA_boolean
+static CORBA_boolean
forb_iop_prepare_hello(FORB_CDR_Codec *codec,
const forb_server_id *server_id,
const void *src_addr,
- CORBA_boolean (*serialize_addr)(FORB_CDR_Codec *codec, const void *addr))
+ CORBA_boolean (*serialize_addr)(FORB_CDR_Codec *codec, const void *addr),
+ const CORBA_string orb_id)
{
if (!forb_server_id_serialize(codec, server_id)) return CORBA_FALSE;
if (serialize_addr) {
if (!serialize_addr(codec, src_addr)) return CORBA_FALSE;
}
+ if (!CORBA_string_serialize(codec, &orb_id)) return CORBA_FALSE;
if (!forb_iop_prepend_message_header(codec, forb_iop_HELLO)) return CORBA_FALSE;
return CORBA_TRUE;
}
}
void new_peer_discovered(forb_port_t *port, forb_peer_t *peer,
- forb_server_id server_id, void *addr)
+ forb_server_id server_id, void *addr,
+ CORBA_string orb_id)
{
forb_t *forb = port->forb;
bool notify_waiters = false;
peer->server_id = server_id;
peer->port = port;
peer->addr = addr;
+ peer->orb_id = orb_id;
peer->state = FORB_PEER_DISCOVERED;
if (notify_waiters) {
fosa_cond_broadcast(&peer->cond);
fosa_mutex_unlock(&forb->peer_mutex);
{
char str[60];
- ul_logdeb("new peer discovered %s\n", forb_server_id_to_string(str, &peer->server_id, sizeof(str)));
+ ul_logdeb("new peer discovered %s (orb_id '%s')\n",
+ forb_server_id_to_string(str, &peer->server_id, sizeof(str)),
+ orb_id);
}
forb_peer_put(peer);
void *addr = NULL;
forb_peer_t *peer;
forb_t *forb = port->forb;
+ CORBA_string peer_orb_id = NULL;
/* printf("Hello received at port %p\n", port); */
if (port->desc.proto->deserialize_addr) {
port->desc.proto->deserialize_addr(codec, &addr);
}
+ CORBA_string_deserialize(codec, &peer_orb_id);
if (forb_server_id_cmp(&server_id, &forb->server_id) != 0) {
peer = forb_peer_find(forb, &server_id);
if (peer && peer->state == FORB_PEER_DISCOVERED) {
/* TODO: Update last hello receive time */
if (addr)
forb_free(addr);
+ if (peer_orb_id)
+ forb_free(peer_orb_id);
forb_peer_put(peer);
} else {
- new_peer_discovered(port, peer, server_id, addr);
+ new_peer_discovered(port, peer, server_id, addr, peer_orb_id);
}
}
}
FORB_CDR_buffer_reset(&codec, forb_iop_MESSAGE_HEADER_SIZE);
forb_iop_prepare_hello(&codec, &port->forb->server_id, port->desc.addr,
- proto->serialize_addr);
+ proto->serialize_addr, port->forb->attr.orb_id);
/* printf("Broadcasting hello from port %p\n", port); */
proto->broadcast(port, &codec.buffer[codec.rptr],
FORB_CDR_data_size(&codec));