-
- case OP_NUMBER_WANTED:
- {
- int nr_wanted = buf[2];
- int nr_is_free = 1;
-
- if (verbose)
- printf("RND_SERVER: client %d (%s) wants to switch to # %d\n",
- u->number, u->nick, nr_wanted);
-
- for (v=user0; v; v=v->next)
- {
- if (v->number == nr_wanted)
- {
- nr_is_free = 0;
- break;
- }
- }
-
- if (verbose)
- {
- if (nr_is_free)
- printf("RND_SERVER: client %d (%s) switches to # %d\n",
- u->number, u->nick, nr_wanted);
- else if (u->number == nr_wanted)
- printf("RND_SERVER: client %d (%s) still has # %d\n",
- u->number, u->nick, nr_wanted);
- else
- printf("RND_SERVER: client %d (%s) cannot switch (client %d still exists)\n",
- u->number, u->nick, nr_wanted);
- }
-
- if (nr_is_free)
- u->number = nr_wanted;
-
- buf[0] = 0;
- buf[1] = OP_NUMBER_WANTED;
- buf[2] = nr_wanted;
- buf[3] = u->number;
- sendtoone(u, 4);
- break;
- }
-
- case OP_PROTOCOL_VERSION:
- if (len != 5 || buf[2] != PROT_VERS_1 || buf[3] != PROT_VERS_2)
- {
- if (verbose)
- printf("RND_SERVER: client %d (%s) has wrong protocol version %d.%d.%d\n", u->number, u->nick, buf[2], buf[3], buf[4]);
-
- buf[0] = 0;
- buf[1] = OP_BADVERS;
- buf[2] = PROT_VERS_1;
- buf[3] = PROT_VERS_2;
- buf[4] = PROT_VERS_3;
- sendtoone(u, 5);
- flushuser(u);
-
- dropuser(u);
- interrupt = 1;
- }
- else
- {
- if (verbose)
- printf("RND_SERVER: client %d (%s) uses protocol version %d.%d.%d\n", u->number, u->nick, buf[2], buf[3], buf[4]);
- }
- break;
-
- case OP_LINES:
- if (len != 3)
- {
- if (verbose)
- printf("RND_SERVER: client %d (%s) sends crap for an OP_LINES\n", u->number, u->nick);
-
- dropuser(u);
- interrupt = 1;
- break;
- }
- if (u->nextvictim)
- {
- if (verbose)
- printf("RND_SERVER: client %d (%s) sends %d %s to client %d (%s)\n", u->number, u->nick, (int)buf[2], buf[2] == 1 ? "line" : "lines", u->nextvictim->number, u->nextvictim->nick);
- sendtoone(u->nextvictim, 3);
- buf[3] = u->nextvictim->number;
- buf[1] = OP_LINESTO;
- broadcast(u->nextvictim, 4, 1);
- for (v=NEXT(u->nextvictim); v!=u->nextvictim; v=NEXT(v))
- {
- if (v->active && v != u && v->playing)
- {
- u->nextvictim = v;
- break;
- }
- }
- }
- else if (verbose)
- printf("RND_SERVER: client %d (%s) makes %d %s but has no victim\n", u->number, u->nick, (int)buf[2], buf[2] == 1 ? "line" : "lines");
- break;