| | 210 | | static void event_join(IRC_SERVER_REC *server, const char *data, const char *nick, const char *address) | | | 211 | | { | | | 212 | | char *params, *channel, *tmp, *shortchan; | | | 213 | | IRC_CHANNEL_REC *chanrec; | | | 214 | | | | | 215 | | g_return_if_fail(data != NULL);
| | | 216 | | | | | 217 | | if (g_strcasecmp(nick, server->nick) != 0) { | | | 218 | | | | | 219 | | return; | | | 220 | | } | | | 221 | | | | | 222 | | if (server->userhost == NULL)
| | | 223 | | server->userhost = g_strdup(address); | | | 224 | | | | | 225 | | params = event_get_params(data, 1, &channel); | | | 226 | | tmp = strchr(channel, 7); | | | 227 | | if (tmp != NULL) *tmp = '\0';
| | | 228 | | | | | 229 | | if (*channel != '!' || strlen(channel) < 7) | | | 230 | | shortchan = NULL;
| | | 231 | | else { | | | 232 | | | | | 233 | | | | | 234 | | | | | 235 | | shortchan = g_strdup_printf("!%s", channel+6); | | | 236 | | chanrec = channel_find_unjoined(server, shortchan); | | | 237 | | if (chanrec != NULL) {
| | | 238 | | channel_change_name(CHANNEL(chanrec), channel);
| | | 239 | | g_free(chanrec->name); | | | 240 | | chanrec->name = g_strdup(channel); | | | 241 | | } else { | | | 242 | | | | | 243 | | | | | 244 | | chanrec = channel_find_unjoined(server, channel); | | | 245 | | if (chanrec != NULL &&
| | | 246 | | irc_channel_find(server, shortchan) == NULL) {
| | | 247 | | channel_change_visible_name(CHANNEL(chanrec),
| | | 248 | | shortchan); | | | 249 | | } | | | 250 | | } | | | 251 | | } | | | 252 | | | | | 253 | | chanrec = irc_channel_find(server, channel);
| | | 254 | | if (chanrec != NULL && chanrec->joined) {
| | | 255 | | | | | 256 | | | | | 257 | | chanrec->left = TRUE;
| | | 258 | | channel_destroy(CHANNEL(chanrec));
| | | 259 | | chanrec = NULL;
| | | 260 | | } | | | 261 | | | | | 262 | | if (chanrec == NULL) {
| | | 263 | | | | | 264 | | chanrec = channel_find_unjoined(server, channel); | | | 265 | | } | | | 266 | | | | | 267 | | if (chanrec == NULL) {
| | | 268 | | |
| | 47 | | | | IRC_CHANNEL_REC *irc_channel_create(IRC_SERVER_REC *server, const char *name, | | | 48 | | | | const char *visible_name, int automatic) | | | 49 | | | | { | | | 50 | | | | IRC_CHANNEL_REC *rec; | | | 51 | | | | | | true | 52 | | | | g_return_val_if_fail(server == NULL || IS_IRC_SERVER(server), NULL);
| | | 53 | | | | g_return_val_if_fail(name != NULL, NULL);
| | | 54 | | | | | | | 55 | | | | rec = g_new0(IRC_CHANNEL_REC, 1);
| | | 56 | | | | if (*name == '+') rec->no_modes = TRUE;
| | | 57 | | | | | | | 58 | | | | channel_init((CHANNEL_REC *) rec, (SERVER_REC *) server, | | | 59 | | | | name, visible_name, automatic); | | | 60 | | | | return rec; | | irc_channel_create$return <= 4095 | 61 | | | | } | Problem | | irc_channel_create$return <= 4095 |
|
|