g_assert(l->origin == NULL);
if (nc->type == NETWORK_VIRTUAL) {
- if (s->connection.data.virtual.ops == NULL)
- return FALSE;
+ g_assert (s->connection.data.virtual.ops != NULL) ;
return s->connection.data.virtual.ops->to_server(s, c, l);
} else {
if (s->connection.transport == NULL)
struct irc_login_details *details;
struct network_config *nc = s->private_data;
- if (nc->type_settings.virtual.ops == NULL)
+ g_assert(nc->type_settings.virtual_name != NULL);
+
+ s->connection.data.virtual.ops = find_virtual_network(nc->type_settings.virtual_name);
+ if (s->connection.data.virtual.ops == NULL) {
+ log_global(LOG_WARNING, "Unable to find virtual network kind '%s'",
+ nc->type_settings.virtual_name);
return FALSE;
+ }
details = s->callbacks->get_login_details(s);
s->callbacks->state_set(s);
s->connection.state = NETWORK_CONNECTION_STATE_MOTD_RECVD;
- if (nc->type_settings.virtual.ops->init)
- return nc->type_settings.virtual.ops->init(s);
+ if (s->connection.data.virtual.ops->init)
+ return s->connection.data.virtual.ops->init(s);
return TRUE;
}
static void privmsg_admin_out(admin_handle h, const char *data)
{
struct irc_client *c = h->client;
+ struct irc_network *n = h->network;
char *nick = c->state->me.nick;
char *hostmask;
- hostmask = admin_hostmask(c->network);
- if (c->network->external_state != NULL)
- nick = c->network->external_state->me.nick;
+ hostmask = admin_hostmask(n);
+ if (n->external_state != NULL)
+ nick = n->external_state->me.nick;
client_send_args_ex(c, hostmask, "NOTICE", nick, data, NULL);
g_free(hostmask);
switch(n->type) {
case NETWORK_VIRTUAL:
- g_key_file_set_string(kf, n->groupname, "virtual", n->type_settings.virtual.name);
+ g_key_file_set_string(kf, n->groupname, "virtual", n->type_settings.virtual_name);
break;
case NETWORK_PROGRAM:
g_key_file_set_string(kf, n->groupname, "program", n->type_settings.program_location);
n->type_settings.program_location = g_key_file_get_string(kf, groupname, "program", NULL);
break;
case NETWORK_VIRTUAL:
- n->type_settings.virtual.name = g_key_file_get_string(kf, groupname, "virtual", NULL);
- n->type_settings.virtual.ops = find_virtual_network(n->type_settings.virtual.name);
+ n->type_settings.virtual_name = g_key_file_get_string(kf, groupname, "virtual", NULL);
break;
case NETWORK_IOCHANNEL:
/* Don't store */
g_free(nc->type_settings.tcp.default_bind_address);
break;
case NETWORK_VIRTUAL:
- g_free(nc->type_settings.virtual.name);
+ g_free(nc->type_settings.virtual_name);
break;
case NETWORK_PROGRAM:
g_free(nc->type_settings.program_location);
union {
char *program_location;
- struct {
- char *name;
- struct virtual_network_ops *ops;
- } virtual;
+ char *virtual_name;
struct {
char *default_bind_address;
GList *servers;