Mercurial > pidgin
comparison src/protocols/irc/irc.c @ 3730:a20bf3d247ff
[gaim-migrate @ 3868]
Pretty do_ask_dialog. I also "fixed" the "hitting yes calls the 'no' function
anyway" behavior.
committer: Tailor Script <tailor@pidgin.im>
| author | Sean Egan <seanegan@gmail.com> |
|---|---|
| date | Thu, 17 Oct 2002 21:29:53 +0000 |
| parents | 34c95669952f |
| children | 242e52b37a78 |
comparison
equal
deleted
inserted
replaced
| 3729:a8f0c169e529 | 3730:a20bf3d247ff |
|---|---|
| 441 GString *str = decode_html(what); | 441 GString *str = decode_html(what); |
| 442 serv_got_im(gc, who, str->str, flags, t, -1); | 442 serv_got_im(gc, who, str->str, flags, t, -1); |
| 443 g_string_free(str, TRUE); | 443 g_string_free(str, TRUE); |
| 444 } | 444 } |
| 445 | 445 |
| 446 static void dcc_chat_cancel(void *, struct dcc_chat *); | 446 static void dcc_chat_cancel(struct dcc_chat *); |
| 447 | 447 |
| 448 void | 448 void |
| 449 dcc_chat_in (gpointer data, gint source, GaimInputCondition condition) | 449 dcc_chat_in (gpointer data, gint source, GaimInputCondition condition) |
| 450 { | 450 { |
| 451 struct dcc_chat *chat = data; | 451 struct dcc_chat *chat = data; |
| 471 g_snprintf (buf, sizeof buf, _("DCC Chat with %s closed"), | 471 g_snprintf (buf, sizeof buf, _("DCC Chat with %s closed"), |
| 472 chat->nick); | 472 chat->nick); |
| 473 convo = new_conversation (chat->nick); | 473 convo = new_conversation (chat->nick); |
| 474 write_to_conv (convo, buf, WFLAG_SYSTEM, NULL, | 474 write_to_conv (convo, buf, WFLAG_SYSTEM, NULL, |
| 475 time ((time_t) NULL), -1); | 475 time ((time_t) NULL), -1); |
| 476 dcc_chat_cancel (NULL,chat); | 476 dcc_chat_cancel (chat); |
| 477 } | 477 } |
| 478 } | 478 } |
| 479 | 479 |
| 480 static void irc_file_transfer_do(struct gaim_connection *gc, struct irc_file_transfer *ift) { | 480 static void irc_file_transfer_do(struct gaim_connection *gc, struct irc_file_transfer *ift) { |
| 481 /* Ok, we better be receiving some crap here boyeee */ | 481 /* Ok, we better be receiving some crap here boyeee */ |
| 1105 } | 1105 } |
| 1106 g_free(tmp); | 1106 g_free(tmp); |
| 1107 } | 1107 } |
| 1108 } | 1108 } |
| 1109 | 1109 |
| 1110 static void dcc_chat_init(gpointer obj, struct dcc_chat *data) { | 1110 static void dcc_chat_init(struct dcc_chat *data) { |
| 1111 struct dcc_chat * chat = g_new0(struct dcc_chat, 1); | 1111 proxy_connect(data->ip_address, data->port, dcc_chat_callback, data); |
| 1112 | 1112 } |
| 1113 memcpy(chat, data, sizeof(struct dcc_chat)); /* we have to make a new one | 1113 |
| 1114 * because the old one get's freed by | 1114 static void dcc_chat_cancel(struct dcc_chat *data){ |
| 1115 * dcc_chat_cancel. */ | |
| 1116 | |
| 1117 printf("ONE MORE TIME: %s:%d\n", chat->ip_address, chat->port); | |
| 1118 proxy_connect(chat->ip_address, chat->port, dcc_chat_callback, chat); | |
| 1119 } | |
| 1120 | |
| 1121 static void dcc_chat_cancel(gpointer obj, struct dcc_chat *data){ | |
| 1122 if (find_dcc_chat(data->gc, data->nick)) { | 1115 if (find_dcc_chat(data->gc, data->nick)) { |
| 1123 dcc_chat_list = g_slist_remove(dcc_chat_list, data); | 1116 dcc_chat_list = g_slist_remove(dcc_chat_list, data); |
| 1124 gaim_input_remove (data->inpa); | 1117 gaim_input_remove (data->inpa); |
| 1125 close (data->fd); | 1118 close (data->fd); |
| 1126 } | 1119 } |
| 1131 { | 1124 { |
| 1132 struct dcc_chat *dchat = find_dcc_chat(gc, who); | 1125 struct dcc_chat *dchat = find_dcc_chat(gc, who); |
| 1133 if (!dchat) | 1126 if (!dchat) |
| 1134 return; | 1127 return; |
| 1135 | 1128 |
| 1136 dcc_chat_cancel(NULL, dchat); | 1129 dcc_chat_cancel(dchat); |
| 1137 } | 1130 } |
| 1138 | 1131 |
| 1139 static void handle_ctcp(struct gaim_connection *gc, char *to, char *nick, | 1132 static void handle_ctcp(struct gaim_connection *gc, char *to, char *nick, |
| 1140 char *msg, char *word[], char *word_eol[]) | 1133 char *msg, char *word[], char *word_eol[]) |
| 1141 { | 1134 { |
| 1170 dccchat->gc = gc; | 1163 dccchat->gc = gc; |
| 1171 g_snprintf(dccchat->ip_address, sizeof(dccchat->ip_address), chat_args[3]); | 1164 g_snprintf(dccchat->ip_address, sizeof(dccchat->ip_address), chat_args[3]); |
| 1172 printf("DCC CHAT DEBUG CRAP: %s\n", dccchat->ip_address); | 1165 printf("DCC CHAT DEBUG CRAP: %s\n", dccchat->ip_address); |
| 1173 dccchat->port=atoi(chat_args[4]); | 1166 dccchat->port=atoi(chat_args[4]); |
| 1174 g_snprintf(dccchat->nick, sizeof(dccchat->nick), nick); | 1167 g_snprintf(dccchat->nick, sizeof(dccchat->nick), nick); |
| 1175 g_snprintf(ask, sizeof(ask), _("%s has requested a DCC chat. " | 1168 g_snprintf(ask, sizeof(ask), _("%s would like to establish a DCC chat"), nick); |
| 1176 "Would you like to establish the direct connection?"), nick); | 1169 do_ask_dialog(ask, _("This requires a direct connection to be established between the two computers. Messages sent will not pass through the IRC server"), dccchat, _("Connect"), dcc_chat_init, _("Cancel"), dcc_chat_cancel); |
| 1177 do_ask_dialog(ask, dccchat, dcc_chat_init, dcc_chat_cancel); | |
| 1178 } | 1170 } |
| 1179 | 1171 |
| 1180 | 1172 |
| 1181 if (!g_strncasecmp(msg, "DCC SEND", 8)) { | 1173 if (!g_strncasecmp(msg, "DCC SEND", 8)) { |
| 1182 struct irc_file_transfer *ift = g_new0(struct irc_file_transfer, 1); | 1174 struct irc_file_transfer *ift = g_new0(struct irc_file_transfer, 1); |
| 2122 addr.sin_family = AF_INET; | 2114 addr.sin_family = AF_INET; |
| 2123 addr.sin_port = htons (chat->port); | 2115 addr.sin_port = htons (chat->port); |
| 2124 addr.sin_addr.s_addr = INADDR_ANY; | 2116 addr.sin_addr.s_addr = INADDR_ANY; |
| 2125 chat->fd = accept (chat->fd, (struct sockaddr *) (&addr), &addrlen); | 2117 chat->fd = accept (chat->fd, (struct sockaddr *) (&addr), &addrlen); |
| 2126 if (!chat->fd) { | 2118 if (!chat->fd) { |
| 2127 dcc_chat_cancel (NULL,chat); | 2119 dcc_chat_cancel (chat); |
| 2128 convo = new_conversation (chat->nick); | 2120 convo = new_conversation (chat->nick); |
| 2129 g_snprintf (buf, sizeof buf, _("DCC Chat with %s closed"), | 2121 g_snprintf (buf, sizeof buf, _("DCC Chat with %s closed"), |
| 2130 chat->nick); | 2122 chat->nick); |
| 2131 write_to_conv (convo, buf, WFLAG_SYSTEM, NULL, | 2123 write_to_conv (convo, buf, WFLAG_SYSTEM, NULL, |
| 2132 time ((time_t) NULL), -1); | 2124 time ((time_t) NULL), -1); |
| 2298 chat = g_new0 (struct dcc_chat, 1); | 2290 chat = g_new0 (struct dcc_chat, 1); |
| 2299 chat->fd = socket (AF_INET, SOCK_STREAM, 0); | 2291 chat->fd = socket (AF_INET, SOCK_STREAM, 0); |
| 2300 chat->gc = gc; | 2292 chat->gc = gc; |
| 2301 g_snprintf (chat->nick, sizeof (chat->nick), "%s", who); | 2293 g_snprintf (chat->nick, sizeof (chat->nick), "%s", who); |
| 2302 if (chat->fd < 0) { | 2294 if (chat->fd < 0) { |
| 2303 dcc_chat_cancel (NULL,chat); | 2295 dcc_chat_cancel (chat); |
| 2304 return; | 2296 return; |
| 2305 } | 2297 } |
| 2306 addr.sin_family = AF_INET; | 2298 addr.sin_family = AF_INET; |
| 2307 addr.sin_port = 0; | 2299 addr.sin_port = 0; |
| 2308 addr.sin_addr.s_addr = INADDR_ANY; | 2300 addr.sin_addr.s_addr = INADDR_ANY; |
