Mercurial > pidgin
diff src/dialogs.c @ 198:73e9a0bfff62
[gaim-migrate @ 208]
Moved all the RVOUS stuff into rvous.c (mostly to reduce the size of dialogs.c).
Started trying to implement FILE_GET_UID, without much luck. I'm going to do
some dumps of the win client tomorrow to see if I can figure out what's going on
a little better.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Sun, 30 Apr 2000 10:39:35 +0000 |
| parents | 24f0fef56a73 |
| children | f3b61c04f44e |
line wrap: on
line diff
--- a/src/dialogs.c Sun Apr 30 00:52:53 2000 +0000 +++ b/src/dialogs.c Sun Apr 30 10:39:35 2000 +0000 @@ -41,8 +41,6 @@ static GList *dialogwindows = NULL; static GtkWidget *linkdialog, *colordialog, *exportdialog, *importdialog, *logdialog; -static void accept_callback(GtkWidget *widget, struct file_transfer *t); - struct create_away { GtkWidget *window; GtkWidget *entry; @@ -2192,385 +2190,3 @@ } - -/*------------------------------------------------------------------------*/ -/* The dialog for file requests */ -/*------------------------------------------------------------------------*/ - - -static void cancel_callback(GtkWidget *widget, struct file_transfer *ft) -{ - char *send = g_malloc(256); - - if (ft->accepted) { - g_free(send); - return; - } - - g_snprintf(send, 255, "toc_rvous_cancel %s %s %s", ft->user, ft->cookie, FILE_SEND_UID); - sflap_send(send, strlen(send), TYPE_DATA); - g_free(send); - destroy_dialog(NULL, ft->window); - g_free(ft->user); - if (ft->message) - g_free(ft->message); - g_free(ft->filename); - g_free(ft->cookie); - g_free(ft->ip); - g_free(ft); -} - - -static void warn_callback(GtkWidget *widget, struct file_transfer *ft) -{ - show_warn_dialog(ft->user); -} - -static void info_callback(GtkWidget *widget, struct file_transfer *ft) -{ - serv_get_info(ft->user); -} - -static char *put_16_int(gint i) { - static char tmp[2]; - g_snprintf(tmp, 2, "%c%c", i >> 8, i & 0xff); - return tmp; -} - -static char *put_32_int(gint i) { - static char tmp[4]; - g_snprintf(tmp, 4, "%c%c%c%c", (i >> 24) & 0xff, (i >> 16) & 0xff, (i >> 8) & 0xff, i & 0xff); - return tmp; -} - - -static int get_16_int(char *text) -{ - int tmp = 0; - tmp = ((*text << 8) & 0xff00); - text++; - tmp |= (*text & 0xff); - text++; - return tmp; -} - -static int get_32_int(char *text) -{ - int tmp = 0; - tmp = ((*text << 24) & 0xff000000); - text++; - tmp |= ((*text << 16) & 0xff0000); - text++; - tmp |= ((*text << 8) & 0xff00); - text++; - tmp |= (*text & 0xff); - text++; - return tmp; -} - -static void do_accept(GtkWidget *w, struct file_transfer *ft) -{ - char *send = g_malloc(256); - char *file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(ft->window)); - char *buf; - char *header; - short hdrlen; - int read_rv; - char bmagic[7]; - struct sockaddr_in sin; - guint32 rcv; - guint32 size; - char *c; - GtkWidget *fw = NULL, *fbar = NULL, *label; - - if (!(ft->f = fopen(file,"w"))) { - buf = g_malloc(BUF_LONG); - g_snprintf(buf, BUF_LONG / 2, "Error writing file %s", file); - do_error_dialog(buf, "Error"); - g_free(buf); - ft->accepted = 0; - accept_callback(NULL, ft); - return; - } - - ft->accepted = 1; - - destroy_dialog(NULL, ft->window); - g_snprintf(send, 255, "toc_rvous_accept %s %s %s", ft->user, ft->cookie, FILE_SEND_UID); - sflap_send(send, strlen(send), TYPE_DATA); - g_free(send); - - - - sin.sin_addr.s_addr = inet_addr(ft->ip); - sin.sin_family = AF_INET; - sin.sin_port = htons(ft->port); - - ft->fd = socket(AF_INET, SOCK_STREAM, 0); - - if (ft->fd <= -1 || connect(ft->fd, (struct sockaddr_in *)&sin, sizeof(sin))) { - return; - } - - rcv = 0; - header = g_malloc(6); - while (rcv != 6) { - read_rv = read(ft->fd, header + rcv, 6 - rcv); - if(read_rv < 0) { - close(ft->fd); - g_free(header); - return; - } - rcv += read_rv; - while(gtk_events_pending()) - gtk_main_iteration(); - } - - strncpy(bmagic, header, 6); - bmagic[6] = 0; - - hdrlen = get_16_int(&header[4]); - hdrlen -= 6; - sprintf(debug_buff, "my header is %d\n", hdrlen); - debug_print(debug_buff); - - hdrlen = 0; - hdrlen = header[4]; - hdrlen <<= 8; - hdrlen |= header[5]; - hdrlen -= 6; - - sprintf(debug_buff, "header length %d\n", hdrlen); - debug_print(debug_buff); - - g_free(header); - header = g_malloc(hdrlen); - - rcv = 0; - - while (rcv != hdrlen) { - read_rv = read(ft->fd, header + rcv, hdrlen - rcv); - if(read_rv < 0) { - close(ft->fd); - g_free(header); - return; - } - rcv += read_rv; - while(gtk_events_pending()) - gtk_main_iteration(); - } - - c = header; - - header[0] = 2; header[1] = 2; - memcpy(header + 2, ft->cookie, 8); - memset(header + 62, 0, 32); strcpy(header + 62, "Gaim"); - memset(header + 10, 0, 4); - header[18] = 1; header[19] = 0; - header[20] = 1; header[21] = 0; - - sprintf(debug_buff, "sending confirmation\n"); - debug_print(debug_buff); - write(ft->fd, bmagic, 6); - write(ft->fd, header, hdrlen); - - buf = g_malloc(1024); - rcv = 0; - - fw = gtk_dialog_new(); - buf = g_malloc(2048); - snprintf(buf, 2048, "Receiving %s from %s (%d bytes)", ft->filename, - ft->user, ft->size); - label = gtk_label_new(buf); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->vbox), label, 0, 0, 5); - gtk_widget_show(label); - fbar = gtk_progress_bar_new(); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->action_area), fbar, 0, 0, 5); - gtk_widget_show(fbar); - gtk_window_set_title(GTK_WINDOW(fw), "File Transfer"); - gtk_widget_realize(fw); - aol_icon(fw->window); - gtk_widget_show(fw); - - size = get_32_int(header + 22); - sprintf(debug_buff, "Receiving %s from %s (%d bytes)\n", ft->filename, - ft->user, ft->size); - debug_print(debug_buff); - - while (rcv != ft->size) { - int i; - int remain = size - rcv > 1024 ? 1024 : size - rcv; - read_rv = read(ft->fd, buf, remain); - if(read_rv < 0) { - fclose(ft->f); - close(ft->fd); - g_free(buf); - g_free(header); - return; - } - rcv += read_rv; - for (i = 0; i < read_rv; i++) - fprintf(ft->f, "%c", buf[i]); - snprintf(buf, 2048, "Receiving %s from %s (%d / %d bytes)", - header + 186, ft->user, rcv, ft->size); - gtk_label_set_text(GTK_LABEL(label), buf); - gtk_progress_bar_update(GTK_PROGRESS_BAR(fbar), - (float)(rcv)/(float)(ft->size)); - while(gtk_events_pending()) - gtk_main_iteration(); - } - - fclose(ft->f); - memset(header + 18, 0, 4); - header[94] = 0; - header[1] = 0x04; - memcpy(header+58, header+34, 4); - memcpy(header+54, header+22, 4); - write(ft->fd, bmagic, 6); - write(ft->fd, header, hdrlen); - close(ft->fd); - - g_free(buf); - g_free(header); - gtk_widget_destroy(fw); -} - - -static void accept_callback(GtkWidget *widget, struct file_transfer *ft) -{ - char *buf = g_malloc(BUF_LEN); - char *fname = g_malloc(BUF_LEN); - char *c; - - c = ft->filename + strlen(ft->filename); - - while (c != ft->filename) { - if (*c == '/' || *c == '\\') { - strcpy(fname, c+1); - break; - } - c--; - } - - if (c == ft->filename) - strcpy(fname, ft->filename); - - - destroy_dialog(NULL, ft->window); - - ft->window = gtk_file_selection_new("Gaim - Save As..."); - - gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(ft->window)); - - g_snprintf(buf, BUF_LEN - 1, "%s/%s", getenv("HOME"), fname); - - gtk_file_selection_set_filename(GTK_FILE_SELECTION(ft->window), buf); - gtk_signal_connect(GTK_OBJECT(ft->window), "destroy", - GTK_SIGNAL_FUNC(cancel_callback), ft); - - gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(ft->window)->ok_button), - "clicked", GTK_SIGNAL_FUNC(do_accept), ft); - gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(ft->window)->cancel_button), - "clicked", GTK_SIGNAL_FUNC(cancel_callback), ft); - - dialogwindows = g_list_prepend(dialogwindows, ft->window); - - gtk_widget_show(ft->window); - - g_free(buf); - g_free(fname); - -} - - - - -void accept_file_dialog(struct file_transfer *ft) -{ - GtkWidget *accept, *info, *warn, *cancel; - GtkWidget *text = NULL, *sw; - GtkWidget *label; - GtkWidget *vbox, *bbox; - char buf[1024]; - - - ft->window = gtk_window_new(GTK_WINDOW_DIALOG); - dialogwindows = g_list_prepend(dialogwindows, ft->window); - - accept = gtk_button_new_with_label("Accept"); - info = gtk_button_new_with_label("Info"); - warn = gtk_button_new_with_label("Warn"); - cancel = gtk_button_new_with_label("Cancel"); - - bbox = gtk_hbox_new(TRUE, 10); - vbox = gtk_vbox_new(FALSE, 5); - - gtk_widget_show(accept); - gtk_widget_show(info); - gtk_widget_show(warn); - gtk_widget_show(cancel); - - gtk_box_pack_start(GTK_BOX(bbox), accept, TRUE, TRUE, 10); - gtk_box_pack_start(GTK_BOX(bbox), info, TRUE, TRUE, 10); - gtk_box_pack_start(GTK_BOX(bbox), warn, TRUE, TRUE, 10); - gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 10); - - g_snprintf(buf, sizeof(buf), "%s requests you to accept the file: %s (%d bytes)", - ft->user, ft->filename, ft->size); - label = gtk_label_new(buf); - gtk_widget_show(label); - gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 5); - - if (ft->message) { - /* we'll do this later - text = gaim_new_layout(); - sw = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), - GTK_POLICY_NEVER, - GTK_POLICY_AUTOMATIC); - gtk_widget_show(sw); - gtk_container_add(GTK_CONTAINER(sw), text); - gtk_widget_show(text); - - gtk_layout_set_size(GTK_LAYOUT(text), 250, 100); - GTK_LAYOUT (text)->vadjustment->step_increment = 10.0; - gtk_widget_set_usize(sw, 250, 100); - - gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 10); - */ - } - gtk_box_pack_start(GTK_BOX(vbox), bbox, TRUE, TRUE, 5); - - gtk_window_set_title(GTK_WINDOW(ft->window), "Gaim - Accept File?"); - gtk_window_set_focus(GTK_WINDOW(ft->window), accept); - gtk_container_add(GTK_CONTAINER(ft->window), vbox); - gtk_container_border_width(GTK_CONTAINER(ft->window), 10); - gtk_widget_show(vbox); - gtk_widget_show(bbox); - gtk_widget_realize(ft->window); - aol_icon(ft->window->window); - - gtk_widget_show(ft->window); - - - gtk_signal_connect(GTK_OBJECT(accept), "clicked", - GTK_SIGNAL_FUNC(accept_callback), ft); - gtk_signal_connect(GTK_OBJECT(cancel), "clicked", - GTK_SIGNAL_FUNC(cancel_callback), ft); - gtk_signal_connect(GTK_OBJECT(warn), "clicked", - GTK_SIGNAL_FUNC(warn_callback), ft); - gtk_signal_connect(GTK_OBJECT(info), "clicked", - GTK_SIGNAL_FUNC(info_callback), ft); - - - if (ft->message) { - /* we'll do this later - while(gtk_events_pending()) - gtk_main_iteration(); - html_print(text, ft->message); - */ - } - - - -}
