// Initialize intermud services.
private void startup_reply(mixed *packet) {
string host;
int port;
if (sizeof(packet) != (S_P + SIZEOF_STARTUP_REPLY)) {
packet_invalid(packet);
return;
}
if ((packet[S_P+STARTUP_REPLY_ROUTERS][0][0]!=config->routers[0][0]) ||
(packet[S_P+STARTUP_REPLY_ROUTERS][0][1]!=config->routers[0][1])) {
tcp_client::close_socket(0);
config -> connected = NULL;
config -> routers = copy(packet[S_P + STARTUP_REPLY_ROUTERS]);
sscanf(config -> routers[0][1], "%s %d", host, port);
open_socket(host, port, MUD);
return;
}
config -> routers = packet[S_P + STARTUP_REPLY_ROUTERS];
config -> connected = packet[S_P + STARTUP_REPLY_ROUTERS][0][0];
config -> passwd = packet[S_P + STARTUP_REPLY_PASSWD];
config -> mud_list -> list = ([ ]);
config -> channel_list -> list = ([ ]);
save_me();
} /* startup_reply() */
// Register ourselves with the router.
private void startup_req() {
mixed *packet = packet_allocate(STARTUP_REQ_PACKET);
packet[P_DESTINATION] = config -> routers[0][0];
packet[S_P + STARTUP_REQ_PASSWD] = config -> passwd;
packet[S_P + STARTUP_REQ_MUDLIST] = config -> mud_list -> id;
packet[S_P + STARTUP_REQ_CHANLIST] = config -> channel_list -> id;
packet[S_P + STARTUP_REQ_PPORT] = PORT_MUD;
packet[S_P + STARTUP_REQ_TCPPORT] = PORT_OOB;
packet[S_P + STARTUP_REQ_UDPPORT] = 0;
packet[S_P + STARTUP_REQ_MUDLIB] = MUDLIB;
packet[S_P + STARTUP_REQ_BMUDLIB] = "Discworld";
packet[S_P + STARTUP_REQ_DRIVER] = __VERSION__;
packet[S_P + STARTUP_REQ_TYPE] = "LP";
packet[S_P + STARTUP_REQ_STATUS] = "Mudlib Development";
packet[S_P + STARTUP_REQ_EMAIL] = ADMIN_EMAIL;
packet[S_P + STARTUP_REQ_SERVICES] = SERVICES;
packet[S_P + STARTUP_REQ_OTHER] = ([ ]);
add_buffer(0, packet);
} /* startup_req() */