| 1685 aim_conn_kill(od->sess, &oft->conn); |
1685 aim_conn_kill(od->sess, &oft->conn); |
| 1686 g_free(oft->sn); |
1686 g_free(oft->sn); |
| 1687 g_free(oft); |
1687 g_free(oft); |
| 1688 } |
1688 } |
| 1689 |
1689 |
| 1690 static int accept_direct_im(gpointer w, struct ask_direct *d) { |
1690 static int accept_direct_im(struct ask_direct *d) { |
| 1691 struct gaim_connection *gc = d->gc; |
1691 struct gaim_connection *gc = d->gc; |
| 1692 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
1692 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
| 1693 struct direct_im *dim; |
1693 struct direct_im *dim; |
| 1694 char *host; int port = 4443; |
1694 char *host; int port = 4443; |
| 1695 int i; |
1695 int i; |
| 1696 |
1696 |
| 1697 debug_printf("Accepted DirectIM.\n"); |
1697 debug_printf("Accepted DirectIM.\n"); |
| 1698 |
1698 |
| 1699 dim = find_direct_im(od, d->sn); |
1699 dim = find_direct_im(od, d->sn); |
| 1700 if (dim) { |
1700 if (dim) { |
| 1701 cancel_direct_im(w, d); /* 40 */ |
1701 cancel_direct_im(d); /* 40 */ |
| 1702 return TRUE; |
1702 return TRUE; |
| 1703 } |
1703 } |
| 1704 dim = g_new0(struct direct_im, 1); |
1704 dim = g_new0(struct direct_im, 1); |
| 1705 dim->gc = d->gc; |
1705 dim->gc = d->gc; |
| 1706 g_snprintf(dim->name, sizeof dim->name, "%s", d->sn); |
1706 g_snprintf(dim->name, sizeof dim->name, "%s", d->sn); |
| 1707 |
1707 |
| 1708 dim->conn = aim_directim_connect(od->sess, d->sn, NULL, d->cookie); |
1708 dim->conn = aim_directim_connect(od->sess, d->sn, NULL, d->cookie); |
| 1709 if (!dim->conn) { |
1709 if (!dim->conn) { |
| 1710 g_free(dim); |
1710 g_free(dim); |
| 1711 cancel_direct_im(w, d); |
1711 cancel_direct_im(d); |
| 1712 return TRUE; |
1712 return TRUE; |
| 1713 } |
1713 } |
| 1714 |
1714 |
| 1715 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, |
1715 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, |
| 1716 gaim_directim_incoming, 0); |
1716 gaim_directim_incoming, 0); |
| 1927 d->sn = g_strdup(userinfo->sn); |
1927 d->sn = g_strdup(userinfo->sn); |
| 1928 strncpy(d->ip, args->verifiedip, sizeof(d->ip)); |
1928 strncpy(d->ip, args->verifiedip, sizeof(d->ip)); |
| 1929 memcpy(d->cookie, args->cookie, 8); |
1929 memcpy(d->cookie, args->cookie, 8); |
| 1930 g_snprintf(buf, sizeof buf, "%s has just asked to directly connect to %s.", |
1930 g_snprintf(buf, sizeof buf, "%s has just asked to directly connect to %s.", |
| 1931 userinfo->sn, gc->username); |
1931 userinfo->sn, gc->username); |
| 1932 do_ask_dialog(buf, d, accept_direct_im, cancel_direct_im); |
1932 do_ask_dialog(buf, _("This requires a direct connection between the two computers and is necessary for IM Images. Because your IP address will be revealed, this may be considered a privacy risk."), d, _("Connect"), accept_direct_im, _("Cancel"), cancel_direct_im); |
| 1933 } else { |
1933 } else { |
| 1934 debug_printf("Unknown reqclass %d\n", args->reqclass); |
1934 debug_printf("Unknown reqclass %d\n", args->reqclass); |
| 1935 } |
1935 } |
| 1936 |
1936 |
| 1937 return 1; |
1937 return 1; |
| 1938 } |
1938 } |
| 1939 |
1939 |
| 1940 /* |
1940 /* |
| 1941 * Next 2 functions are for when other people ask you for authorization |
1941 * Next 2 functions are for when other people ask you for authorization |
| 1942 */ |
1942 */ |
| 1943 static void gaim_icq_authgrant(gpointer w, struct channel4_data *data) { |
1943 static void gaim_icq_authgrant(struct channel4_data *data) { |
| 1944 char message; |
1944 char message; |
| 1945 struct oscar_data *od = (struct oscar_data *)data->gc->proto_data; |
1945 struct oscar_data *od = (struct oscar_data *)data->gc->proto_data; |
| 1946 message = 0; |
1946 message = 0; |
| 1947 aim_send_im_ch4(od->sess, data->uin, AIM_ICQMSG_AUTHGRANTED, &message); |
1947 aim_send_im_ch4(od->sess, data->uin, AIM_ICQMSG_AUTHGRANTED, &message); |
| 1948 show_got_added(data->gc, NULL, data->uin, NULL, NULL); |
1948 show_got_added(data->gc, NULL, data->uin, NULL, NULL); |
| 1949 g_free(data->uin); |
1949 g_free(data->uin); |
| 1950 data->uin = NULL; |
1950 g_free(data); |
| 1951 } |
1951 } |
| 1952 |
1952 |
| 1953 static void gaim_icq_authdeny(gpointer w, struct channel4_data *data) { |
1953 static void gaim_icq_authdeny(struct channel4_data *data) { |
| 1954 if (data->uin) { |
1954 gchar *message; |
| 1955 gchar *message; |
1955 struct oscar_data *od = (struct oscar_data *)data->gc->proto_data; |
| 1956 struct oscar_data *od = (struct oscar_data *)data->gc->proto_data; |
1956 message = g_strdup_printf("No reason given."); |
| 1957 message = g_strdup_printf("No reason given."); |
1957 aim_send_im_ch4(od->sess, data->uin, AIM_ICQMSG_AUTHDENIED, message); |
| 1958 aim_send_im_ch4(od->sess, data->uin, AIM_ICQMSG_AUTHDENIED, message); |
1958 g_free(data->uin); |
| 1959 g_free(data->uin); |
1959 g_free(message); |
| 1960 g_free(message); |
|
| 1961 } |
|
| 1962 g_free(data); |
1960 g_free(data); |
| 1963 } |
1961 } |
| 1964 |
1962 |
| 1965 /* |
1963 /* |
| 1966 * For when other people ask you for authorization |
1964 * For when other people ask you for authorization |
| 1967 */ |
1965 */ |
| 1968 static void gaim_icq_authask(struct gaim_connection *gc, fu32_t uin, char *msg) { |
1966 static void gaim_icq_authask(struct gaim_connection *gc, fu32_t uin, char *msg) { |
| 1969 struct channel4_data *data = g_new(struct channel4_data, 1); |
1967 struct channel4_data *data = g_new(struct channel4_data, 1); |
| 1970 /* The first 6 chars of the message are some type of alien gibberish, so skip them */ |
1968 /* The first 6 chars of the message are some type of alien gibberish, so skip them */ |
| 1971 char *dialog_msg = g_strdup_printf("The user %lu wants to add you to their buddy list for the following reason:\n\n%s", uin, (msg && strlen(msg)>6) ? msg+6 : "No reason given."); |
1969 char *dialog_msg = g_strdup_printf("The user %lu wants to add you to their buddy list for the following reason:", uin, (msg && strlen(msg)>6) ? msg+6 : "No reason given."); |
| 1972 debug_printf("Received an authorization request from UIN %lu\n", uin); |
1970 debug_printf("Received an authorization request from UIN %lu\n", uin); |
| 1973 data->gc = gc; |
1971 data->gc = gc; |
| 1974 data->uin = g_strdup_printf("%lu", uin); |
1972 data->uin = g_strdup_printf("%lu", uin); |
| 1975 do_ask_dialog(dialog_msg, data, gaim_icq_authgrant, gaim_icq_authdeny); |
1973 do_ask_dialog(dialog_msg, (msg && strlen(msg) > 6) ? msg+6 : _("No reason given."), data, _("Authorize"), gaim_icq_authgrant, _("Deny"), gaim_icq_authdeny); |
| 1976 g_free(dialog_msg); |
1974 g_free(dialog_msg); |
| 1977 } |
1975 } |
| 1978 |
1976 |
| 1979 /* |
1977 /* |
| 1980 * Next 2 functions are for when someone sends you contacts |
1978 * Next 2 functions are for when someone sends you contacts |
| 1981 */ |
1979 */ |
| 1982 static void gaim_icq_contactadd(gpointer w, struct channel4_data *data) { |
1980 static void gaim_icq_contactadd(struct channel4_data *data) { |
| 1983 show_add_buddy(data->gc, data->uin, NULL, data->nick); |
1981 show_add_buddy(data->gc, data->uin, NULL, data->nick); |
| 1984 } |
1982 free(data->uin); |
| 1985 |
1983 free(data->nick); |
| 1986 static void gaim_icq_contactdontadd(gpointer w, struct channel4_data *data) { |
1984 g_free(data); |
| |
1985 } |
| |
1986 |
| |
1987 static void gaim_icq_contactdontadd(struct channel4_data *data) { |
| 1987 free(data->uin); |
1988 free(data->uin); |
| 1988 free(data->nick); |
1989 free(data->nick); |
| 1989 g_free(data); |
1990 g_free(data); |
| 1990 } |
1991 } |
| 1991 |
1992 |
| 2048 num = 0; |
2049 num = 0; |
| 2049 for (i=0; i<strlen(text[0]); i++) |
2050 for (i=0; i<strlen(text[0]); i++) |
| 2050 num = num*10 + text[0][i]-48; |
2051 num = num*10 + text[0][i]-48; |
| 2051 for (i=0; i<num; i++) { |
2052 for (i=0; i<num; i++) { |
| 2052 struct channel4_data *data = g_new(struct channel4_data, 1); |
2053 struct channel4_data *data = g_new(struct channel4_data, 1); |
| 2053 gchar *message = g_strdup_printf("ICQ user %lu has sent you a contact: %s (%s)\nDo you want to add this contact to your contact list?", args->uin, text[i*2+2], text[i*2+1]); |
2054 gchar *message = g_strdup_printf(_("ICQ user %lu has sent you a contact: %s (%s)"), args->uin, text[i*2+2], text[i*2+1]); |
| 2054 data->gc = gc; |
2055 data->gc = gc; |
| 2055 data->uin = g_strdup(text[i*2+2]); |
2056 data->uin = g_strdup(text[i*2+2]); |
| 2056 data->nick = g_strdup(text[i*2+1]); |
2057 data->nick = g_strdup(text[i*2+1]); |
| 2057 do_ask_dialog(message, data, gaim_icq_contactadd, gaim_icq_contactdontadd); |
2058 do_ask_dialog(message, "Do you want to add this contact to your Buddy List?", data, _("Add"), gaim_icq_contactadd, _("Deny"), gaim_icq_contactdontadd); |
| 2058 g_free(message); |
2059 g_free(message); |
| 2059 } |
2060 } |
| 2060 g_strfreev(text); |
2061 g_strfreev(text); |
| 2061 } |
2062 } |
| 2062 } break; |
2063 } break; |
| 4364 static void oscar_ask_direct_im(struct gaim_connection *gc, gchar *who) { |
4365 static void oscar_ask_direct_im(struct gaim_connection *gc, gchar *who) { |
| 4365 char buf[BUF_LONG]; |
4366 char buf[BUF_LONG]; |
| 4366 struct ask_do_dir_im *data = g_new0(struct ask_do_dir_im, 1); |
4367 struct ask_do_dir_im *data = g_new0(struct ask_do_dir_im, 1); |
| 4367 data->who = who; |
4368 data->who = who; |
| 4368 data->gc = gc; |
4369 data->gc = gc; |
| 4369 g_snprintf(buf, sizeof(buf), _("You have selected to open a Direct IM connection with %s." |
4370 g_snprintf(buf, sizeof(buf), _("You have selected to open a Direct IM connection with %s."), who); |
| 4370 " Doing this will let them see your IP address, and may be" |
4371 do_ask_dialog(buf, _("Because this reveals your IP address, it may be considered a privacy risk. Do you wish to continue?"), data, _("Connect"), oscar_direct_im, _("Cancel"), oscar_cancel_direct_im); |
| 4371 " a security risk. Do you wish to continue?"), who); |
|
| 4372 do_ask_dialog(buf, data, oscar_direct_im, oscar_cancel_direct_im); |
|
| 4373 } |
4372 } |
| 4374 |
4373 |
| 4375 static void oscar_get_away_msg(struct gaim_connection *gc, char *who) { |
4374 static void oscar_get_away_msg(struct gaim_connection *gc, char *who) { |
| 4376 struct oscar_data *od = gc->proto_data; |
4375 struct oscar_data *od = gc->proto_data; |
| 4377 od->evilhack = g_slist_append(od->evilhack, g_strdup(normalize(who))); |
4376 od->evilhack = g_slist_append(od->evilhack, g_strdup(normalize(who))); |