#include "exec_req.h"
#include <errno.h>
#include "peer.h"
+#include "discovery.h"
/** Version of the protocol */
#define VER_MAJOR 0
peer = forb_get_next_hop(forb, dest, &timeout);
if (!peer) {
- ul_logerr("Reply destination not found\n");
+ char str[60];
+ forb_server_id_to_string(str, dest, sizeof(str));
+ ul_logerr("Reply destination not found: %s\n", str);
goto err;
+ } else {
+ char str[60];
+ forb_server_id_to_string(str, dest, sizeof(str));
+ ul_logdeb("sending reply: dest=%s, id=%u\n", str, request_id);
}
forb_proto_send(peer, codec);
forb_peer_put(peer);
;
}
-void new_peer_discovered(forb_port_t *port, forb_peer_t *peer,
- forb_server_id server_id, void *addr,
- CORBA_string orb_id);
-
-
static void
process_request(forb_port_t *port, FORB_CDR_Codec *codec, uint32_t message_size)
{
forb_peer_put(port->new_peer);
port->new_peer = NULL;
} else {
+ ul_logdeb("discovered new_peer from incomming connection\n");
peer = port->new_peer;
port->new_peer = NULL;
- new_peer_discovered(port, peer, request_header.source,
- peer->addr, peer->orb_id);
+ forb_new_peer_discovered(port, peer, request_header.source,
+ peer->addr, peer->orb_id);
}
}
forb_syncobj_wait(&port->reply_processed);
}
-void new_peer_discovered(forb_port_t *port, forb_peer_t *peer,
- forb_server_id server_id, void *addr,
- CORBA_string orb_id)
-{
- forb_t *forb = port->forb;
- bool notify_waiters = false;
- if (peer /* && peer->state == FORB_PEER_WANTED */) {
- notify_waiters = true;
- } else {
- peer = forb_peer_new();
- }
- if (!peer)
- return;
-
- fosa_mutex_lock(&forb->peer_mutex);
- 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);
- } else {
- forb_peer_nolock_insert(forb, forb_peer_get(peer));
- }
- forb_port_peer_ins_tail(port, forb_peer_get(peer));
- fosa_mutex_unlock(&forb->peer_mutex);
- {
- char str[60];
- ul_logdeb("new peer discovered %s (orb_id '%s')\n",
- forb_server_id_to_string(str, &peer->server_id, sizeof(str)),
- orb_id);
- }
- if (forb->attr.peer_discovery_callback) {
- forb_orb peer_orb = forb_object_new(forb->orb, &peer->server_id, 0);
- forb->attr.peer_discovery_callback(peer_orb, orb_id);
- forb_object_release(peer_orb);
- }
- forb_peer_put(peer);
-
- /* Broadcast our hello packet now */
- forb_syncobj_signal(&port->hello);
-}
-
/**
* Process incomming HELLO messages.
*
forb_free(peer_orb_id);
forb_peer_put(peer);
} else {
- new_peer_discovered(port, peer, server_id, addr, peer_orb_id);
+ forb_new_peer_discovered(port, peer, server_id, addr, peer_orb_id);
}
}
}
pthread_cleanup_pop(1);
return NULL;
}
-
-