along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id: protocol.c,v 1.28.4.91 2001/05/25 11:54:28 guus Exp $
+ $Id: protocol.c,v 1.28.4.96 2001/07/01 09:21:01 guus Exp $
*/
#include "config.h"
/* Copy string to cl */
+ if(cl->name)
+ free(cl->name);
+
cl->name = xstrdup(name);
/* Load information about peer */
node = avl_unlink(connection_tree, cl);
cl->port = port;
- avl_insert_node(connection_tree, node);
-
+ if(!avl_insert_node(connection_tree, node))
+ {
+ old = avl_search_node(connection_tree, node)->data;
+ syslog(LOG_ERR, _("%s is listening on %s:%hd, which is already in use by %s!"),
+ cl->name, cl->hostname, cl->port, old->name);
+ return -1;
+ }
+
/* Read in the public key, so that we can send a metakey */
if(read_rsa_public_key(cl))
if(debug_lvl >= DEBUG_CONNECTIONS)
syslog(LOG_NOTICE, _("Connection with %s (%s) activated"), cl->name, cl->hostname);
+ if(cl->status.outgoing)
+ seconds_till_retry = 5; /* Reset retry timeout */
cp
/* Check some options */
This reduces unnecessary key_changed broadcasts.
*/
- if(mykeyused)
+ if(from==myself && !mykeyused)
+ return 0;
+
+ for(node = connection_tree->head; node; node = node->next)
{
- for(node = connection_tree->head; node; node = node->next)
- {
- p = (connection_t *)node->data;
- if(p != cl && p->status.meta && p->status.active)
- if(!(p->options & OPTION_INDIRECT) || from == myself)
- send_request(p, "%d %s", KEY_CHANGED, from->name);
- }
- mykeyused = 0;
- }
+ p = (connection_t *)node->data;
+ if(p != cl && p->status.meta && p->status.active)
+ if(!(p->options & OPTION_INDIRECT) || from == myself)
+ send_request(p, "%d %s", KEY_CHANGED, from->name);
+ }
cp
return 0;
}