| | 66 | | static void irc_channels_join(IRC_SERVER_REC *server, const char *data, | | | 67 | | int automatic) | | | 68 | | { | | | 69 | | CHANNEL_SETUP_REC *schannel; | | | 70 | | IRC_CHANNEL_REC *chanrec; | | | 71 | | GString *outchans, *outkeys; | | | 72 | | char *channels, *keys, *key, *space; | | | 73 | | char **chanlist, **keylist, **tmp, **tmpkey, **tmpstr, *channel, *channame; | | | 74 | | void *free_arg; | | | 75 | | int use_keys, cmdlen; | | | 76 | | | | | 77 | | g_return_if_fail(data != NULL);
| | | 78 | | g_return_if_fail(IS_IRC_SERVER(server) && server->connected);
| | | 79 | | if (*data == '\0') return; | | | 80 | | | | | 81 | | if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST,
| | | 82 | | &channels, &keys)) | | | 83 | | return; | | | 84 | | | | | 85 | | | | | 86 | | space = strchr(keys, ' '); | | | 87 | | if (space != NULL) {
| | | 88 | | *space = '\0'; | | | 89 | | } | | | 90 | | | | | 91 | | chanlist = g_strsplit(channels, ",", -1); | | | 92 | | keylist = g_strsplit(keys, ",", -1); | | | 93 | | | | | 94 | | outchans = g_string_new(NULL);
| | | 95 | | outkeys = g_string_new(NULL);
| | | 96 | | | | | 97 | | use_keys = *keys != '\0'; | | | 98 | | tmpkey = keylist; | | | 99 | | tmp = chanlist; | | | 100 | | for (;; tmp++) { | | | 101 | | if (*tmp != NULL) {
| | | 102 | | channel = ischannel(**tmp) ? g_strdup(*tmp) :
| | | 103 | | g_strdup_printf("#%s", *tmp); | | | 104 | | | | | 105 | | chanrec = irc_channel_find(server, channel);
| | | 106 | | if (chanrec == NULL) {
| | | 107 | | schannel = channel_setup_find(channel, server->connrec->chatnet); | | | 108 | | | | | 109 | | g_string_append_printf(outchans, "%s,", channel); | | | 110 | | if (*tmpkey != NULL && **tmpkey != '\0')
| | | 111 | | key = *tmpkey; | | | 112 | | else if (schannel != NULL && schannel->password != NULL) {
| | | 113 | | | | | 114 | | use_keys = TRUE;
| | | 115 | | key = schannel->password; | | | 116 | | } else key = NULL;
| | | 117 | | | | | 118 | | g_string_append_printf(outkeys, "%s,", get_join_key(key));
| | | 119 | | channame = channel + (channel[0] == '!' && | | | 120 | | channel[1] == '!'); | | | 121 | | chanrec = irc_channel_create(server, channame, NULL,
|
| | 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 |
|
|