Example #1
0
/* dump servers */
static void m_dump_server(char *arg)
{
  struct server *sptr = NULL;

  if(arg)
  {
    if(chars_isdigit(*arg))
      sptr = server_find_id(atoi(arg));
    else
      sptr = server_find_name(arg);
  }

  server_dump(sptr);
}
Example #2
0
dbase_server *server_find_name(char *name, dbase_server *root)
{
  if (root)
  {
    int i;
    dbase_server *tmp;

    if (!strcmp(name, root->name)) return root;

    for (i = 0; i < root->children_count; i++)
      if ((tmp = server_find_name(name, root->children[i]))) return tmp;
  }
  return NULL;
}
Example #3
0
void server_remove(char *name)
{
  dbase_server *server = servers;

  if (name)
  {
    server = server_find_name(name, servers);
  }

  if (server)
  {
    if (server == servers) servers = NULL;
    server_free(server, 1);
  }
}
Example #4
0
/* -------------------------------------------------------------------------- *
 * argv[0] - prefix                                                           *
 * argv[1] - 'connect'                                                        *
 * argv[2] - server to connect from/to                                        *
 * argv[3] - [server to connect to]                                           *
 * -------------------------------------------------------------------------- */
static void mo_connect(struct lclient *lcptr, struct client *cptr,
                       int             argc,  char         **argv)
{
  struct connect *cnptr;
  struct server  *asptr;

  /* We have 2 arguments, the message must be relayed */
  if(argv[3])
  {
    if(server_relay_always(lcptr, cptr, 2, ":%C CONNECT %s %s", &argc, argv))
      return;
  }

  /* Message is targeted to us, search connect{} block */
  if((cnptr = connect_find_name(argv[2])) == NULL)
  {
    client_send(cptr, ":%S NOTICE %C :*** no connect{} block for %s",
                server_me, cptr, argv[3]);
    return;
  }

  /* Cannot have redundant links (currently) */
  if((asptr = server_find_name(cnptr->name)))
  {
    if(asptr->client->origin != client_me)
      client_send(cptr,
                  ":%S NOTICE %C :*** server %S already exists from %S.",
                  server_me, cptr, asptr, asptr->client->origin->server);
    else
      client_send(cptr,
                  ":%S NOTICE %C :*** server %S already exists.",
                  server_me, cptr, asptr);
    return;
  }

  /* Intitiate the connect{} block */
  if(server_connect(cptr, cnptr))
  {
    client_send(cptr, ":%S NOTICE %C :*** couldn't connect to %s[%s:%u]",
                server_me, cptr, cnptr->name,
                cnptr->address, cnptr->port_remote);
  }
}