libpurple/protocols/silc/util.c

Thu, 23 Mar 2017 21:01:15 +0300

author
qarkai <qarkai@gmail.com>
date
Thu, 23 Mar 2017 21:01:15 +0300
branch
string-comparison-r2
changeset 38258
9a6551eba09c
parent 36030
9a2250c4e9d1
child 36031
9eb8f52893d0
permissions
-rw-r--r--

Replace !strcmp() with purple_strequal()
Didn't touch finch/libgnt files

8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1 /*
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
2
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
3 silcpurple_util.c
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
4
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
5 Author: Pekka Riikonen <priikone@silcnet.org>
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
6
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
7 Copyright (C) 2004 - 2007 Pekka Riikonen
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
8
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
9 This program is free software; you can redistribute it and/or modify
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
10 it under the terms of the GNU General Public License as published by
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
11 the Free Software Foundation; version 2 of the License.
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
12
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
13 This program is distributed in the hope that it will be useful,
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
16 GNU General Public License for more details.
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
17
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
18 */
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
19
28981
4e3922ab4844 Include 'internal.h' before all other headers to make some non-gcc compilers happy.
Paul Aurich <darkrain42@pidgin.im>
parents: 27635
diff changeset
20 #include "internal.h"
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
21 #include "silc.h"
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
22 #include "silcclient.h"
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
23 #include "silcpurple.h"
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
24 #include "imgstore.h"
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
25
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
26 /**************************** Utility Routines *******************************/
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
27
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
28 static char str[256], str2[256];
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
29
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
30 const char *silcpurple_silcdir(void)
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
31 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
32 const char *hd = purple_home_dir();
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
33 memset(str, 0, sizeof(str));
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
34 g_snprintf(str, sizeof(str) - 1, "%s" G_DIR_SEPARATOR_S ".silc", hd ? hd : "/tmp");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
35 return (const char *)str;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
36 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
37
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
38 const char *silcpurple_session_file(const char *account)
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
39 {
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
40 memset(str2, 0, sizeof(str2));
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
41 g_snprintf(str2, sizeof(str2) - 1, "%s" G_DIR_SEPARATOR_S "%s_session",
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
42 silcpurple_silcdir(), account);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
43 return (const char *)str2;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
44 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
45
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
46 gboolean silcpurple_ip_is_private(const char *ip)
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
47 {
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
48 if (silc_net_is_ip4(ip)) {
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
49 if (!strncmp(ip, "10.", 3)) {
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
50 return TRUE;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
51 } else if (!strncmp(ip, "172.", 4) && strlen(ip) > 6) {
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
52 char tmp[3];
8910
69e01c130dca [gaim-migrate @ 9680]
Ambrose Li <ambrose.li@gmail.com>
parents: 8849
diff changeset
53 int s;
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
54 memset(tmp, 0, sizeof(tmp));
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
55 strncpy(tmp, ip + 4, 2);
8910
69e01c130dca [gaim-migrate @ 9680]
Ambrose Li <ambrose.li@gmail.com>
parents: 8849
diff changeset
56 s = atoi(tmp);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
57 if (s >= 16 && s <= 31)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
58 return TRUE;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
59 } else if (!strncmp(ip, "192.168.", 8)) {
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
60 return TRUE;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
61 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
62 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
63
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
64 return FALSE;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
65 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
66
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
67 /* This checks stats for various SILC files and directories. First it
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
68 checks if ~/.silc directory exist and is owned by the correct user. If
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
69 it doesn't exist, it will create the directory. After that it checks if
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
70 user's Public and Private key files exists and creates them if needed. */
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
71
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
72 gboolean silcpurple_check_silc_dir(PurpleConnection *gc)
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
73 {
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
74 char filename[256], file_public_key[256], file_private_key[256];
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
75 char servfilename[256], clientfilename[256], friendsfilename[256];
10825
986d260851e8 [gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
76 char pkd[256], prd[256];
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
77 struct stat st;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
78 struct passwd *pw;
13660
3ade3ab0b2ae [gaim-migrate @ 16061]
Mark Doliner <markdoliner@pidgin.im>
parents: 13546
diff changeset
79 int fd;
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
80
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
81 pw = getpwuid(getuid());
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
82 if (!pw) {
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20289
diff changeset
83 purple_debug_error("silc", "silc: %s\n", g_strerror(errno));
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
84 return FALSE;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
85 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
86
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
87 g_snprintf(filename, sizeof(filename) - 1, "%s", silcpurple_silcdir());
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
88 g_snprintf(servfilename, sizeof(servfilename) - 1, "%s" G_DIR_SEPARATOR_S "serverkeys",
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
89 silcpurple_silcdir());
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
90 g_snprintf(clientfilename, sizeof(clientfilename) - 1, "%s" G_DIR_SEPARATOR_S "clientkeys",
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
91 silcpurple_silcdir());
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
92 g_snprintf(friendsfilename, sizeof(friendsfilename) - 1, "%s" G_DIR_SEPARATOR_S "friends",
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
93 silcpurple_silcdir());
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
94
36030
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
95 if (pw->pw_uid != geteuid()) {
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
96 purple_debug_error("silc", "Couldn't create directories due to wrong uid!\n");
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
97 return FALSE;
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
98 }
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
99
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
100 /*
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
101 * Check ~/.silc directory
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
102 */
36030
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
103 if (g_mkdir(filename, 0755) != 0 && errno != EEXIST) {
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
104 purple_debug_error("silc", "Couldn't create '%s' directory\n", filename);
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
105 return FALSE;
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
106 }
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
107
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
108 #ifndef _WIN32
10589
4e10236e06d4 [gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents: 9488
diff changeset
109 if ((g_stat(filename, &st)) == -1) {
36030
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
110 purple_debug_error("silc", "Couldn't stat '%s' directory, error: %s\n", filename, g_strerror(errno));
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
111 return FALSE;
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
112 } else {
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
113 /* Check the owner of the dir */
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
114 if (st.st_uid != 0 && st.st_uid != pw->pw_uid) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
115 purple_debug_error("silc", "You don't seem to own '%s' directory\n",
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
116 filename);
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
117 return FALSE;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
118 }
36030
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
119 }
9353
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
120 #endif
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
121
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
122 /*
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
123 * Check ~./silc/serverkeys directory
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
124 */
36030
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
125 if (g_mkdir(servfilename, 0755) != 0 && errno != EEXIST) {
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
126 purple_debug_error("silc", "Couldn't create '%s' directory\n", servfilename);
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
127 return FALSE;
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
128 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
129
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
130 /*
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
131 * Check ~./silc/clientkeys directory
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
132 */
36030
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
133 if (g_mkdir(clientfilename, 0755) != 0 && errno != EEXIST) {
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
134 purple_debug_error("silc", "Couldn't create '%s' directory\n", clientfilename);
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
135 return FALSE;
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
136 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
137
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
138 /*
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
139 * Check ~./silc/friends directory
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
140 */
36030
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
141 if (g_mkdir(friendsfilename, 0755) != 0 && errno != EEXIST) {
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
142 purple_debug_error("silc", "Couldn't create '%s' directory\n", friendsfilename);
9a2250c4e9d1 Fix Coverity TOCTOU warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36027
diff changeset
143 return FALSE;
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
144 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
145
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
146 /*
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
147 * Check Public and Private keys
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
148 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
149 g_snprintf(pkd, sizeof(pkd), "%s" G_DIR_SEPARATOR_S "public_key.pub", silcpurple_silcdir());
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
150 g_snprintf(prd, sizeof(prd), "%s" G_DIR_SEPARATOR_S "private_key.prv", silcpurple_silcdir());
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
151 g_snprintf(file_public_key, sizeof(file_public_key) - 1, "%s",
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
152 purple_account_get_string(gc->account, "public-key", pkd));
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
153 g_snprintf(file_private_key, sizeof(file_public_key) - 1, "%s",
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
154 purple_account_get_string(gc->account, "private-key", prd));
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
155
10589
4e10236e06d4 [gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents: 9488
diff changeset
156 if ((g_stat(file_public_key, &st)) == -1) {
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
157 /* If file doesn't exist */
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
158 if (errno == ENOENT) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
159 purple_connection_update_progress(gc, _("Creating SILC key pair..."), 1, 5);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
160 if (!silc_create_key_pair(SILCPURPLE_DEF_PKCS,
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
161 SILCPURPLE_DEF_PKCS_LEN,
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
162 file_public_key,
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
163 file_private_key, NULL,
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
164 (gc->password == NULL)
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
165 ? "" : gc->password,
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
166 NULL, NULL, FALSE)) {
21279
40685e1f50ca Rename:
Will Thompson <resiak@pidgin.im>
parents: 20458
diff changeset
167 purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_OTHER_ERROR,
27635
0cd19038c417 More uniformity among disconnect error messages
Mark Doliner <markdoliner@pidgin.im>
parents: 23325
diff changeset
168 _("Unable to create SILC key pair"));
14148
2f0c6fcb0db5 [gaim-migrate @ 16709]
Daniel Atallah <datallah@pidgin.im>
parents: 13660
diff changeset
169 return FALSE;
2f0c6fcb0db5 [gaim-migrate @ 16709]
Daniel Atallah <datallah@pidgin.im>
parents: 13660
diff changeset
170 }
2f0c6fcb0db5 [gaim-migrate @ 16709]
Daniel Atallah <datallah@pidgin.im>
parents: 13660
diff changeset
171
2f0c6fcb0db5 [gaim-migrate @ 16709]
Daniel Atallah <datallah@pidgin.im>
parents: 13660
diff changeset
172 if ((g_stat(file_public_key, &st)) == -1) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
173 purple_debug_error("silc", "Couldn't stat '%s' public key, error: %s\n",
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20289
diff changeset
174 file_public_key, g_strerror(errno));
14148
2f0c6fcb0db5 [gaim-migrate @ 16709]
Daniel Atallah <datallah@pidgin.im>
parents: 13660
diff changeset
175 return FALSE;
2f0c6fcb0db5 [gaim-migrate @ 16709]
Daniel Atallah <datallah@pidgin.im>
parents: 13660
diff changeset
176 }
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
177 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
178 purple_debug_error("silc", "Couldn't stat '%s' public key, error: %s\n",
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20289
diff changeset
179 file_public_key, g_strerror(errno));
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
180 return FALSE;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
181 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
182 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
183
9353
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
184 #ifndef _WIN32
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
185 /* Check the owner of the public key */
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
186 if (st.st_uid != 0 && st.st_uid != pw->pw_uid) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
187 purple_debug_error("silc", "You don't seem to own your public key!?\n");
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
188 return FALSE;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
189 }
9353
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
190 #endif
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
191
14227
e760c7dd2e7a [gaim-migrate @ 16815]
Daniel Atallah <datallah@pidgin.im>
parents: 14218
diff changeset
192 if ((fd = g_open(file_private_key, O_RDONLY, 0)) != -1) {
14218
c498aba6235f [gaim-migrate @ 16801]
Daniel Atallah <datallah@pidgin.im>
parents: 14148
diff changeset
193 if ((fstat(fd, &st)) == -1) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
194 purple_debug_error("silc", "Couldn't stat '%s' private key, error: %s\n",
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20289
diff changeset
195 file_private_key, g_strerror(errno));
14218
c498aba6235f [gaim-migrate @ 16801]
Daniel Atallah <datallah@pidgin.im>
parents: 14148
diff changeset
196 close(fd);
c498aba6235f [gaim-migrate @ 16801]
Daniel Atallah <datallah@pidgin.im>
parents: 14148
diff changeset
197 return FALSE;
c498aba6235f [gaim-migrate @ 16801]
Daniel Atallah <datallah@pidgin.im>
parents: 14148
diff changeset
198 }
35995
d0bbb2dad7f3 Fix some CWE-367 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 33798
diff changeset
199 } else {
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
200 /* If file doesn't exist */
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
201 if (errno == ENOENT) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
202 purple_connection_update_progress(gc, _("Creating SILC key pair..."), 1, 5);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
203 if (!silc_create_key_pair(SILCPURPLE_DEF_PKCS,
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
204 SILCPURPLE_DEF_PKCS_LEN,
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
205 file_public_key,
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
206 file_private_key, NULL,
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
207 (gc->password == NULL)
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
208 ? "" : gc->password,
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
209 NULL, NULL, FALSE)) {
21279
40685e1f50ca Rename:
Will Thompson <resiak@pidgin.im>
parents: 20458
diff changeset
210 purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_OTHER_ERROR,
27635
0cd19038c417 More uniformity among disconnect error messages
Mark Doliner <markdoliner@pidgin.im>
parents: 23325
diff changeset
211 _("Unable to create SILC key pair"));
14218
c498aba6235f [gaim-migrate @ 16801]
Daniel Atallah <datallah@pidgin.im>
parents: 14148
diff changeset
212 return FALSE;
c498aba6235f [gaim-migrate @ 16801]
Daniel Atallah <datallah@pidgin.im>
parents: 14148
diff changeset
213 }
c498aba6235f [gaim-migrate @ 16801]
Daniel Atallah <datallah@pidgin.im>
parents: 14148
diff changeset
214
14227
e760c7dd2e7a [gaim-migrate @ 16815]
Daniel Atallah <datallah@pidgin.im>
parents: 14218
diff changeset
215 if ((fd = g_open(file_private_key, O_RDONLY, 0)) != -1) {
14218
c498aba6235f [gaim-migrate @ 16801]
Daniel Atallah <datallah@pidgin.im>
parents: 14148
diff changeset
216 if ((fstat(fd, &st)) == -1) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
217 purple_debug_error("silc", "Couldn't stat '%s' private key, error: %s\n",
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20289
diff changeset
218 file_private_key, g_strerror(errno));
14218
c498aba6235f [gaim-migrate @ 16801]
Daniel Atallah <datallah@pidgin.im>
parents: 14148
diff changeset
219 close(fd);
c498aba6235f [gaim-migrate @ 16801]
Daniel Atallah <datallah@pidgin.im>
parents: 14148
diff changeset
220 return FALSE;
c498aba6235f [gaim-migrate @ 16801]
Daniel Atallah <datallah@pidgin.im>
parents: 14148
diff changeset
221 }
36027
175e769076e1 Fix newly generated coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35995
diff changeset
222 } else {
175e769076e1 Fix newly generated coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35995
diff changeset
223 purple_debug_error("silc", "Couldn't open '%s' "
175e769076e1 Fix newly generated coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35995
diff changeset
224 "private key, error: %s\n",
175e769076e1 Fix newly generated coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35995
diff changeset
225 file_private_key, g_strerror(errno));
14218
c498aba6235f [gaim-migrate @ 16801]
Daniel Atallah <datallah@pidgin.im>
parents: 14148
diff changeset
226 return FALSE;
c498aba6235f [gaim-migrate @ 16801]
Daniel Atallah <datallah@pidgin.im>
parents: 14148
diff changeset
227 }
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
228 } else {
35995
d0bbb2dad7f3 Fix some CWE-367 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 33798
diff changeset
229 purple_debug_error("silc", "Couldn't open '%s' private key, error: %s\n",
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20289
diff changeset
230 file_private_key, g_strerror(errno));
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
231 return FALSE;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
232 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
233 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
234
9353
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
235 #ifndef _WIN32
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
236 /* Check the owner of the private key */
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
237 if (st.st_uid != 0 && st.st_uid != pw->pw_uid) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
238 purple_debug_error("silc", "You don't seem to own your private key!?\n");
13660
3ade3ab0b2ae [gaim-migrate @ 16061]
Mark Doliner <markdoliner@pidgin.im>
parents: 13546
diff changeset
239 if (fd != -1)
3ade3ab0b2ae [gaim-migrate @ 16061]
Mark Doliner <markdoliner@pidgin.im>
parents: 13546
diff changeset
240 close(fd);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
241 return FALSE;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
242 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
243
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
244 /* Check the permissions for the private key */
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
245 if ((st.st_mode & 0777) != 0600) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
246 purple_debug_warning("silc", "Wrong permissions in your private key file `%s'!\n"
13660
3ade3ab0b2ae [gaim-migrate @ 16061]
Mark Doliner <markdoliner@pidgin.im>
parents: 13546
diff changeset
247 "Trying to change them ...\n", file_private_key);
14218
c498aba6235f [gaim-migrate @ 16801]
Daniel Atallah <datallah@pidgin.im>
parents: 14148
diff changeset
248 if ((fd == -1) || (fchmod(fd, S_IRUSR | S_IWUSR)) == -1) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
249 purple_debug_error("silc",
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
250 "Failed to change permissions for private key file!\n"
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
251 "Permissions for your private key file must be 0600.\n");
13660
3ade3ab0b2ae [gaim-migrate @ 16061]
Mark Doliner <markdoliner@pidgin.im>
parents: 13546
diff changeset
252 if (fd != -1)
3ade3ab0b2ae [gaim-migrate @ 16061]
Mark Doliner <markdoliner@pidgin.im>
parents: 13546
diff changeset
253 close(fd);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
254 return FALSE;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
255 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
256 purple_debug_warning("silc", "Done.\n\n");
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
257 }
9353
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
258 #endif
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
259
13660
3ade3ab0b2ae [gaim-migrate @ 16061]
Mark Doliner <markdoliner@pidgin.im>
parents: 13546
diff changeset
260 if (fd != -1)
3ade3ab0b2ae [gaim-migrate @ 16061]
Mark Doliner <markdoliner@pidgin.im>
parents: 13546
diff changeset
261 close(fd);
3ade3ab0b2ae [gaim-migrate @ 16061]
Mark Doliner <markdoliner@pidgin.im>
parents: 13546
diff changeset
262
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
263 return TRUE;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
264 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
265
9353
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
266 #ifdef _WIN32
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
267 struct passwd *getpwuid(uid_t uid) {
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
268 struct passwd *pwd = calloc(1, sizeof(struct passwd));
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
269 return pwd;
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
270 }
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
271
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
272 uid_t getuid() {
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
273 return 0;
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
274 }
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
275
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
276 uid_t geteuid() {
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
277 return 0;
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
278 }
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
279 #endif
ff6546387358 [gaim-migrate @ 10161]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9274
diff changeset
280
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
281 void silcpurple_show_public_key(SilcPurple sg,
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
282 const char *name, SilcPublicKey public_key,
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
283 GCallback callback, void *context)
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
284 {
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
285 SilcPublicKeyIdentifier ident;
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
286 SilcSILCPublicKey silc_pubkey;
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
287 char *fingerprint, *babbleprint;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
288 unsigned char *pk;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
289 SilcUInt32 pk_len, key_len = 0;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
290 GString *s;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
291
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
292 /* We support showing only SILC public keys for now */
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
293 if (silc_pkcs_get_type(public_key) != SILC_PKCS_SILC)
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
294 return;
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
295
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
296 silc_pubkey = silc_pkcs_get_context(SILC_PKCS_SILC, public_key);
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
297 ident = &silc_pubkey->identifier;
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
298 key_len = silc_pkcs_public_key_get_len(public_key);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
299
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
300 pk = silc_pkcs_public_key_encode(public_key, &pk_len);
20289
5c844288fbec applied changes from 32f31e981f0618a4167aa98bcc22c2dab13d1550
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18552
diff changeset
301 if (!pk)
5c844288fbec applied changes from 32f31e981f0618a4167aa98bcc22c2dab13d1550
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18552
diff changeset
302 return;
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
303 fingerprint = silc_hash_fingerprint(NULL, pk, pk_len);
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
304 babbleprint = silc_hash_babbleprint(NULL, pk, pk_len);
20289
5c844288fbec applied changes from 32f31e981f0618a4167aa98bcc22c2dab13d1550
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18552
diff changeset
305 if (!fingerprint || !babbleprint)
5c844288fbec applied changes from 32f31e981f0618a4167aa98bcc22c2dab13d1550
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18552
diff changeset
306 return;
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
307
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
308 s = g_string_new("");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
309 if (ident->realname)
10825
986d260851e8 [gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
310 /* Hint for translators: Please check the tabulator width here and in
986d260851e8 [gaim-migrate @ 12490]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
311 the next strings (short strings: 2 tabs, longer strings 1 tab,
9274
25119ad142d9 [gaim-migrate @ 10077]
Luke Schierer <lschiere@pidgin.im>
parents: 9272
diff changeset
312 sum: 3 tabs or 24 characters) */
25119ad142d9 [gaim-migrate @ 10077]
Luke Schierer <lschiere@pidgin.im>
parents: 9272
diff changeset
313 g_string_append_printf(s, _("Real Name: \t%s\n"), ident->realname);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
314 if (ident->username)
9274
25119ad142d9 [gaim-migrate @ 10077]
Luke Schierer <lschiere@pidgin.im>
parents: 9272
diff changeset
315 g_string_append_printf(s, _("User Name: \t%s\n"), ident->username);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
316 if (ident->email)
23325
a374a26fe217 Use "email" and "Email" consistently. This is potentially controversial,
Richard Laager <rlaager@pidgin.im>
parents: 22972
diff changeset
317 g_string_append_printf(s, _("Email: \t\t%s\n"), ident->email);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
318 if (ident->host)
9274
25119ad142d9 [gaim-migrate @ 10077]
Luke Schierer <lschiere@pidgin.im>
parents: 9272
diff changeset
319 g_string_append_printf(s, _("Host Name: \t%s\n"), ident->host);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
320 if (ident->org)
9274
25119ad142d9 [gaim-migrate @ 10077]
Luke Schierer <lschiere@pidgin.im>
parents: 9272
diff changeset
321 g_string_append_printf(s, _("Organization: \t%s\n"), ident->org);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
322 if (ident->country)
9274
25119ad142d9 [gaim-migrate @ 10077]
Luke Schierer <lschiere@pidgin.im>
parents: 9272
diff changeset
323 g_string_append_printf(s, _("Country: \t%s\n"), ident->country);
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
324 g_string_append_printf(s, _("Algorithm: \t%s\n"), silc_pubkey->pkcs->name);
9274
25119ad142d9 [gaim-migrate @ 10077]
Luke Schierer <lschiere@pidgin.im>
parents: 9272
diff changeset
325 g_string_append_printf(s, _("Key Length: \t%d bits\n"), (int)key_len);
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
326 if (ident->version)
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
327 g_string_append_printf(s, _("Version: \t%s\n"), ident->version);
9274
25119ad142d9 [gaim-migrate @ 10077]
Luke Schierer <lschiere@pidgin.im>
parents: 9272
diff changeset
328 g_string_append_printf(s, "\n");
25119ad142d9 [gaim-migrate @ 10077]
Luke Schierer <lschiere@pidgin.im>
parents: 9272
diff changeset
329 g_string_append_printf(s, _("Public Key Fingerprint:\n%s\n\n"), fingerprint);
25119ad142d9 [gaim-migrate @ 10077]
Luke Schierer <lschiere@pidgin.im>
parents: 9272
diff changeset
330 g_string_append_printf(s, _("Public Key Babbleprint:\n%s"), babbleprint);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
331
21175
c6d76b49c206 disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents: 21174
diff changeset
332 purple_request_action(sg->gc, _("Public Key Information"),
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
333 _("Public Key Information"),
22972
2942c1995c22 Cleanup allocations/frees to match and plug some leaks.
Daniel Atallah <datallah@pidgin.im>
parents: 22470
diff changeset
334 s->str, 0, purple_connection_get_account(sg->gc),
21175
c6d76b49c206 disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents: 21174
diff changeset
335 NULL, NULL, context, 1, _("Close"), callback);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
336
22972
2942c1995c22 Cleanup allocations/frees to match and plug some leaks.
Daniel Atallah <datallah@pidgin.im>
parents: 22470
diff changeset
337 g_string_free(s, TRUE);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
338 silc_free(fingerprint);
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
339 silc_free(babbleprint);
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
340 silc_free(pk);
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
341 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
342
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
343 SilcAttributePayload
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
344 silcpurple_get_attr(SilcDList attrs, SilcAttribute attribute)
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
345 {
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
346 SilcAttributePayload attr = NULL;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
347
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
348 if (!attrs)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
349 return NULL;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
350
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
351 silc_dlist_start(attrs);
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
352 while ((attr = silc_dlist_get(attrs)) != SILC_LIST_END)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
353 if (attribute == silc_attribute_get_attribute(attr))
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
354 break;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
355
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
356 return attr;
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
357 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
358
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
359 void silcpurple_get_umode_string(SilcUInt32 mode, char *buf,
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
360 SilcUInt32 buf_size)
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
361 {
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
362 memset(buf, 0, buf_size);
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
363 if ((mode & SILC_UMODE_SERVER_OPERATOR) ||
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
364 (mode & SILC_UMODE_ROUTER_OPERATOR)) {
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
365 strcat(buf, (mode & SILC_UMODE_SERVER_OPERATOR) ?
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
366 "[server operator] " :
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
367 (mode & SILC_UMODE_ROUTER_OPERATOR) ?
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
368 "[SILC operator] " : "[unknown mode] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
369 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
370 if (mode & SILC_UMODE_GONE)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
371 strcat(buf, "[away] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
372 if (mode & SILC_UMODE_INDISPOSED)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
373 strcat(buf, "[indisposed] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
374 if (mode & SILC_UMODE_BUSY)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
375 strcat(buf, "[busy] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
376 if (mode & SILC_UMODE_PAGE)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
377 strcat(buf, "[wake me up] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
378 if (mode & SILC_UMODE_HYPER)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
379 strcat(buf, "[hyperactive] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
380 if (mode & SILC_UMODE_ROBOT)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
381 strcat(buf, "[robot] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
382 if (mode & SILC_UMODE_ANONYMOUS)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
383 strcat(buf, "[anonymous] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
384 if (mode & SILC_UMODE_BLOCK_PRIVMSG)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
385 strcat(buf, "[blocks private messages] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
386 if (mode & SILC_UMODE_DETACHED)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
387 strcat(buf, "[detached] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
388 if (mode & SILC_UMODE_REJECT_WATCHING)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
389 strcat(buf, "[rejects watching] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
390 if (mode & SILC_UMODE_BLOCK_INVITE)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
391 strcat(buf, "[blocks invites] ");
22470
6fb4ab976585 chomp chomp chomp chomp chomp chomp chomp chomp chomp chomp
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21630
diff changeset
392 g_strchomp(buf);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
393 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
394
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
395 void silcpurple_get_chmode_string(SilcUInt32 mode, char *buf,
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
396 SilcUInt32 buf_size)
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
397 {
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
398 memset(buf, 0, buf_size);
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
399 if (mode & SILC_CHANNEL_MODE_FOUNDER_AUTH)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
400 strcat(buf, "[permanent] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
401 if (mode & SILC_CHANNEL_MODE_PRIVATE)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
402 strcat(buf, "[private] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
403 if (mode & SILC_CHANNEL_MODE_SECRET)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
404 strcat(buf, "[secret] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
405 if (mode & SILC_CHANNEL_MODE_PRIVKEY)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
406 strcat(buf, "[private key] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
407 if (mode & SILC_CHANNEL_MODE_INVITE)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
408 strcat(buf, "[invite only] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
409 if (mode & SILC_CHANNEL_MODE_TOPIC)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
410 strcat(buf, "[topic restricted] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
411 if (mode & SILC_CHANNEL_MODE_ULIMIT)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
412 strcat(buf, "[user count limit] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
413 if (mode & SILC_CHANNEL_MODE_PASSPHRASE)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
414 strcat(buf, "[passphrase auth] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
415 if (mode & SILC_CHANNEL_MODE_CHANNEL_AUTH)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
416 strcat(buf, "[public key auth] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
417 if (mode & SILC_CHANNEL_MODE_SILENCE_USERS)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
418 strcat(buf, "[users silenced] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
419 if (mode & SILC_CHANNEL_MODE_SILENCE_OPERS)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
420 strcat(buf, "[operators silenced] ");
22470
6fb4ab976585 chomp chomp chomp chomp chomp chomp chomp chomp chomp chomp
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21630
diff changeset
421 g_strchomp(buf);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
422 }
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
423
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
424 void silcpurple_get_chumode_string(SilcUInt32 mode, char *buf,
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
425 SilcUInt32 buf_size)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
426 {
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
427 memset(buf, 0, buf_size);
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
428 if (mode & SILC_CHANNEL_UMODE_CHANFO)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
429 strcat(buf, "[founder] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
430 if (mode & SILC_CHANNEL_UMODE_CHANOP)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
431 strcat(buf, "[operator] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
432 if (mode & SILC_CHANNEL_UMODE_BLOCK_MESSAGES)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
433 strcat(buf, "[blocks messages] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
434 if (mode & SILC_CHANNEL_UMODE_BLOCK_MESSAGES_USERS)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
435 strcat(buf, "[blocks user messages] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
436 if (mode & SILC_CHANNEL_UMODE_BLOCK_MESSAGES_ROBOTS)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
437 strcat(buf, "[blocks robot messages] ");
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
438 if (mode & SILC_CHANNEL_UMODE_QUIET)
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
439 strcat(buf, "[quieted] ");
22470
6fb4ab976585 chomp chomp chomp chomp chomp chomp chomp chomp chomp chomp
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21630
diff changeset
440 g_strchomp(buf);
8849
4385d99b059c [gaim-migrate @ 9616]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
441 }
9488
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
442
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
443 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
444 silcpurple_parse_attrs(SilcDList attrs, char **moodstr, char **statusstr,
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
445 char **contactstr, char **langstr, char **devicestr,
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
446 char **tzstr, char **geostr)
9488
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
447 {
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
448 SilcAttributePayload attr;
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
449 SilcAttributeMood mood = 0;
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
450 SilcAttributeContact contact;
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
451 SilcAttributeObjDevice device;
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
452 SilcAttributeObjGeo geo;
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
453
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
454 char tmp[1024];
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
455 GString *s;
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
456
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
457 *moodstr = NULL;
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
458 *statusstr = NULL;
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
459 *contactstr = NULL;
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
460 *langstr = NULL;
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
461 *devicestr = NULL;
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
462 *tzstr = NULL;
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
463 *geostr = NULL;
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
464
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
465 if (!attrs)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
466 return;
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
467
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
468 s = g_string_new("");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
469 attr = silcpurple_get_attr(attrs, SILC_ATTRIBUTE_STATUS_MOOD);
9488
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
470 if (attr && silc_attribute_get_object(attr, &mood, sizeof(mood))) {
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
471 if (mood & SILC_ATTRIBUTE_MOOD_HAPPY)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
472 g_string_append_printf(s, "[%s] ", _("Happy"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
473 if (mood & SILC_ATTRIBUTE_MOOD_SAD)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
474 g_string_append_printf(s, "[%s] ", _("Sad"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
475 if (mood & SILC_ATTRIBUTE_MOOD_ANGRY)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
476 g_string_append_printf(s, "[%s] ", _("Angry"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
477 if (mood & SILC_ATTRIBUTE_MOOD_JEALOUS)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
478 g_string_append_printf(s, "[%s] ", _("Jealous"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
479 if (mood & SILC_ATTRIBUTE_MOOD_ASHAMED)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
480 g_string_append_printf(s, "[%s] ", _("Ashamed"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
481 if (mood & SILC_ATTRIBUTE_MOOD_INVINCIBLE)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
482 g_string_append_printf(s, "[%s] ", _("Invincible"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
483 if (mood & SILC_ATTRIBUTE_MOOD_INLOVE)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
484 g_string_append_printf(s, "[%s] ", _("In Love"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
485 if (mood & SILC_ATTRIBUTE_MOOD_SLEEPY)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
486 g_string_append_printf(s, "[%s] ", _("Sleepy"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
487 if (mood & SILC_ATTRIBUTE_MOOD_BORED)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
488 g_string_append_printf(s, "[%s] ", _("Bored"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
489 if (mood & SILC_ATTRIBUTE_MOOD_EXCITED)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
490 g_string_append_printf(s, "[%s] ", _("Excited"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
491 if (mood & SILC_ATTRIBUTE_MOOD_ANXIOUS)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
492 g_string_append_printf(s, "[%s] ", _("Anxious"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
493 }
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
494 if (strlen(s->str)) {
22972
2942c1995c22 Cleanup allocations/frees to match and plug some leaks.
Daniel Atallah <datallah@pidgin.im>
parents: 22470
diff changeset
495 *moodstr = g_string_free(s, FALSE);
22470
6fb4ab976585 chomp chomp chomp chomp chomp chomp chomp chomp chomp chomp
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21630
diff changeset
496 g_strchomp(*moodstr);
9488
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
497 } else
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
498 g_string_free(s, TRUE);
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
499
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
500 attr = silcpurple_get_attr(attrs, SILC_ATTRIBUTE_STATUS_FREETEXT);
9488
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
501 memset(tmp, 0, sizeof(tmp));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
502 if (attr && silc_attribute_get_object(attr, tmp, sizeof(tmp)))
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
503 *statusstr = g_strdup(tmp);
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
504
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
505 s = g_string_new("");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
506 attr = silcpurple_get_attr(attrs, SILC_ATTRIBUTE_PREFERRED_CONTACT);
9488
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
507 if (attr && silc_attribute_get_object(attr, &contact, sizeof(contact))) {
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
508 if (contact & SILC_ATTRIBUTE_CONTACT_CHAT)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
509 g_string_append_printf(s, "[%s] ", _("Chat"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
510 if (contact & SILC_ATTRIBUTE_CONTACT_EMAIL)
23325
a374a26fe217 Use "email" and "Email" consistently. This is potentially controversial,
Richard Laager <rlaager@pidgin.im>
parents: 22972
diff changeset
511 g_string_append_printf(s, "[%s] ", _("Email"));
9488
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
512 if (contact & SILC_ATTRIBUTE_CONTACT_CALL)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
513 g_string_append_printf(s, "[%s] ", _("Phone"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
514 if (contact & SILC_ATTRIBUTE_CONTACT_PAGE)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
515 g_string_append_printf(s, "[%s] ", _("Paging"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
516 if (contact & SILC_ATTRIBUTE_CONTACT_SMS)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
517 g_string_append_printf(s, "[%s] ", _("SMS"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
518 if (contact & SILC_ATTRIBUTE_CONTACT_MMS)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
519 g_string_append_printf(s, "[%s] ", _("MMS"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
520 if (contact & SILC_ATTRIBUTE_CONTACT_VIDEO)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
521 g_string_append_printf(s, "[%s] ", _("Video Conferencing"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
522 }
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
523 if (strlen(s->str)) {
22972
2942c1995c22 Cleanup allocations/frees to match and plug some leaks.
Daniel Atallah <datallah@pidgin.im>
parents: 22470
diff changeset
524 *contactstr = g_string_free(s, FALSE);
22470
6fb4ab976585 chomp chomp chomp chomp chomp chomp chomp chomp chomp chomp
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21630
diff changeset
525 g_strchomp(*contactstr);
9488
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
526 } else
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
527 g_string_free(s, TRUE);
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
528
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
529 attr = silcpurple_get_attr(attrs, SILC_ATTRIBUTE_PREFERRED_LANGUAGE);
9488
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
530 memset(tmp, 0, sizeof(tmp));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
531 if (attr && silc_attribute_get_object(attr, tmp, sizeof(tmp)))
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
532 *langstr = g_strdup(tmp);
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
533
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
534 s = g_string_new("");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
535 attr = silcpurple_get_attr(attrs, SILC_ATTRIBUTE_DEVICE_INFO);
9488
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
536 memset(&device, 0, sizeof(device));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
537 if (attr && silc_attribute_get_object(attr, &device, sizeof(device))) {
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
538 if (device.type == SILC_ATTRIBUTE_DEVICE_COMPUTER)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
539 g_string_append_printf(s, "%s: ", _("Computer"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
540 if (device.type == SILC_ATTRIBUTE_DEVICE_MOBILE_PHONE)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
541 g_string_append_printf(s, "%s: ", _("Mobile Phone"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
542 if (device.type == SILC_ATTRIBUTE_DEVICE_PDA)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
543 g_string_append_printf(s, "%s: ", _("PDA"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
544 if (device.type == SILC_ATTRIBUTE_DEVICE_TERMINAL)
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
545 g_string_append_printf(s, "%s: ", _("Terminal"));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
546 g_string_append_printf(s, "%s %s %s %s",
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
547 device.manufacturer ? device.manufacturer : "",
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
548 device.version ? device.version : "",
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
549 device.model ? device.model : "",
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
550 device.language ? device.language : "");
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
551 }
22972
2942c1995c22 Cleanup allocations/frees to match and plug some leaks.
Daniel Atallah <datallah@pidgin.im>
parents: 22470
diff changeset
552 if (strlen(s->str))
2942c1995c22 Cleanup allocations/frees to match and plug some leaks.
Daniel Atallah <datallah@pidgin.im>
parents: 22470
diff changeset
553 *devicestr = g_string_free(s, FALSE);
2942c1995c22 Cleanup allocations/frees to match and plug some leaks.
Daniel Atallah <datallah@pidgin.im>
parents: 22470
diff changeset
554 else
9488
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
555 g_string_free(s, TRUE);
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
556
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
557 attr = silcpurple_get_attr(attrs, SILC_ATTRIBUTE_TIMEZONE);
9488
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
558 memset(tmp, 0, sizeof(tmp));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
559 if (attr && silc_attribute_get_object(attr, tmp, sizeof(tmp)))
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
560 *tzstr = g_strdup(tmp);
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
561
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
562 attr = silcpurple_get_attr(attrs, SILC_ATTRIBUTE_GEOLOCATION);
9488
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
563 memset(&geo, 0, sizeof(geo));
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
564 if (attr && silc_attribute_get_object(attr, &geo, sizeof(geo)))
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
565 *geostr = g_strdup_printf("%s %s %s (%s)",
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
566 geo.longitude ? geo.longitude : "",
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
567 geo.latitude ? geo.latitude : "",
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
568 geo.altitude ? geo.altitude : "",
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
569 geo.accuracy ? geo.accuracy : "");
9d6520fa53fd [gaim-migrate @ 10313]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9353
diff changeset
570 }
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
571
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
572 /* Returns MIME type of filetype */
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
573
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
574 char *silcpurple_file2mime(const char *filename)
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
575 {
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
576 const char *ct;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
577
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
578 ct = strrchr(filename, '.');
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
579 if (!ct)
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
580 return NULL;
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 17680
diff changeset
581 else if (!g_ascii_strcasecmp(".png", ct))
22972
2942c1995c22 Cleanup allocations/frees to match and plug some leaks.
Daniel Atallah <datallah@pidgin.im>
parents: 22470
diff changeset
582 return g_strdup("image/png");
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 17680
diff changeset
583 else if (!g_ascii_strcasecmp(".jpg", ct))
22972
2942c1995c22 Cleanup allocations/frees to match and plug some leaks.
Daniel Atallah <datallah@pidgin.im>
parents: 22470
diff changeset
584 return g_strdup("image/jpeg");
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 17680
diff changeset
585 else if (!g_ascii_strcasecmp(".jpeg", ct))
22972
2942c1995c22 Cleanup allocations/frees to match and plug some leaks.
Daniel Atallah <datallah@pidgin.im>
parents: 22470
diff changeset
586 return g_strdup("image/jpeg");
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 17680
diff changeset
587 else if (!g_ascii_strcasecmp(".gif", ct))
22972
2942c1995c22 Cleanup allocations/frees to match and plug some leaks.
Daniel Atallah <datallah@pidgin.im>
parents: 22470
diff changeset
588 return g_strdup("image/gif");
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 17680
diff changeset
589 else if (!g_ascii_strcasecmp(".tiff", ct))
22972
2942c1995c22 Cleanup allocations/frees to match and plug some leaks.
Daniel Atallah <datallah@pidgin.im>
parents: 22470
diff changeset
590 return g_strdup("image/tiff");
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
591
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
592 return NULL;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
593 }
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
594
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
595 /* Checks if message has images, and assembles MIME message if it has.
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
596 If only one image is present, creates simple MIME image message. If
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
597 there are multiple images and/or text with images multipart MIME
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
598 message is created. */
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
599
33798
ab26d8e3da97 silc: Use appropriate datatype for SilcMessageFlags
Daniel Atallah <datallah@pidgin.im>
parents: 28981
diff changeset
600 SilcDList silcpurple_image_message(const char *msg, SilcMessageFlags *mflags)
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
601 {
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
602 SilcMime mime = NULL, p;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
603 SilcDList list, parts = NULL;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
604 const char *start, *end, *last;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
605 GData *attribs;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
606 char *type;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
607 gboolean images = FALSE;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
608
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
609 last = msg;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
610 while (last && *last && purple_markup_find_tag("img", last, &start,
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
611 &end, &attribs)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
612 PurpleStoredImage *image = NULL;
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
613 const char *id;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
614
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
615 /* Check if there is text before image */
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
616 if (start - last) {
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
617 char *text, *tmp;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
618 p = silc_mime_alloc();
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
619
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
620 /* Add content type */
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
621 silc_mime_add_field(p, "Content-Type",
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
622 "text/plain; charset=utf-8");
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
623
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
624 tmp = g_strndup(last, start - last);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
625 text = purple_unescape_html(tmp);
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
626 g_free(tmp);
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
627
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
628 /* Add text */
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
629 silc_mime_add_data(p, (const unsigned char *)text, strlen(text));
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
630 g_free(text);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
631
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
632 if (!parts)
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
633 parts = silc_dlist_init();
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
634 silc_dlist_add(parts, p);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
635 }
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
636
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
637 id = g_datalist_get_data(&attribs, "id");
16560
6d1c2bb6ee4c Finally fix SILC fully, now that i have HAVE_SILCMIME_H defined.
Daniel Atallah <datallah@pidgin.im>
parents: 16492
diff changeset
638 if (id && (image = purple_imgstore_find_by_id(atoi(id)))) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
639 unsigned long imglen = purple_imgstore_get_size(image);
16560
6d1c2bb6ee4c Finally fix SILC fully, now that i have HAVE_SILCMIME_H defined.
Daniel Atallah <datallah@pidgin.im>
parents: 16492
diff changeset
640 gconstpointer img = purple_imgstore_get_data(image);
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
641
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
642 p = silc_mime_alloc();
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
643
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
644 /* Add content type */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
645 type = silcpurple_file2mime(purple_imgstore_get_filename(image));
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
646 if (!type) {
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
647 g_datalist_clear(&attribs);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
648 last = end + 1;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
649 continue;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
650 }
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
651 silc_mime_add_field(p, "Content-Type", type);
22972
2942c1995c22 Cleanup allocations/frees to match and plug some leaks.
Daniel Atallah <datallah@pidgin.im>
parents: 22470
diff changeset
652 g_free(type);
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
653
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
654 /* Add content transfer encoding */
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
655 silc_mime_add_field(p, "Content-Transfer-Encoding", "binary");
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
656
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
657 /* Add image data */
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
658 silc_mime_add_data(p, img, imglen);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
659
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
660 if (!parts)
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
661 parts = silc_dlist_init();
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
662 silc_dlist_add(parts, p);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
663 images = TRUE;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
664 }
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
665
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
666 g_datalist_clear(&attribs);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
667
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
668 /* Continue after tag */
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
669 last = end + 1;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
670 }
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
671
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
672 /* Check for text after the image(s) */
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
673 if (images && last && *last) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
674 char *tmp = purple_unescape_html(last);
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
675 p = silc_mime_alloc();
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
676
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
677 /* Add content type */
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
678 silc_mime_add_field(p, "Content-Type",
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
679 "text/plain; charset=utf-8");
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
680
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
681 /* Add text */
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
682 silc_mime_add_data(p, (const unsigned char *)tmp, strlen(tmp));
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
683 g_free(tmp);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
684
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
685 if (!parts)
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
686 parts = silc_dlist_init();
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
687 silc_dlist_add(parts, p);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
688 }
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
689
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
690 /* If there weren't any images, don't return anything. */
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
691 if (!images) {
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
692 if (parts)
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
693 silc_dlist_uninit(parts);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
694 return NULL;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
695 }
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
696
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
697 if (silc_dlist_count(parts) > 1) {
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
698 /* Multipart MIME message */
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
699 char b[32];
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
700 mime = silc_mime_alloc();
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
701 silc_mime_add_field(mime, "MIME-Version", "1.0");
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
702 g_snprintf(b, sizeof(b), "b%4X%4X",
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
703 (unsigned int)time(NULL),
17675
e7069bf1de1a Patch from Pekka Riikonen to update the SILC protocol plugin to work with
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17156
diff changeset
704 silc_dlist_count(parts));
12217
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
705 silc_mime_set_multipart(mime, "mixed", b);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
706 silc_dlist_start(parts);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
707 while ((p = silc_dlist_get(parts)) != SILC_LIST_END)
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
708 silc_mime_add_multipart(mime, p);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
709 } else {
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
710 /* Simple MIME message */
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
711 silc_dlist_start(parts);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
712 mime = silc_dlist_get(parts);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
713 silc_mime_add_field(mime, "MIME-Version", "1.0");
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
714 }
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
715
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
716 *mflags &= ~SILC_MESSAGE_FLAG_UTF8;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
717 *mflags |= SILC_MESSAGE_FLAG_DATA;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
718
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
719 /* Encode message. Fragment if it is too large */
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
720 list = silc_mime_encode_partial(mime, 0xfc00);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
721
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
722 silc_dlist_uninit(parts);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
723
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
724 /* Added multiparts gets freed here */
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
725 silc_mime_free(mime);
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
726
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
727 return list;
ea610d8ab584 [gaim-migrate @ 14519]
Pekka Riikonen <priikone@silcnet.org>
parents: 11488
diff changeset
728 }

mercurial