comparison src/util.c @ 5872:059d95c67cda

[gaim-migrate @ 6304] The legendary Header File Cleanup! Files now only include what they need. This should reduce the number of files that must recompile when a header file changes. It's a lot nicer. Trust me on it. I also added a couple new header files. I hope I didn't break TOO much! committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sat, 14 Jun 2003 23:21:02 +0000
parents bd0d0e89cac3
children 964e4f94fc56
comparison
equal deleted inserted replaced
5871:508adf90fbb9 5872:059d95c67cda
17 * along with this program; if not, write to the Free Software 17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 * 19 *
20 */ 20 */
21 21
22 #ifdef HAVE_CONFIG_H 22 #include "internal.h"
23 #include <config.h> 23
24 #endif 24 #include "conversation.h"
25 25 #include "debug.h"
26 #ifndef _WIN32
27 #include <unistd.h>
28 #include <sys/time.h>
29 #include <sys/wait.h>
30 #else
31 #include <direct.h>
32 #include <io.h>
33 #endif
34
35 #include <errno.h>
36 #include <stdio.h>
37 #include <stdlib.h>
38 #include <sys/types.h>
39 #include <sys/stat.h>
40 #include <string.h>
41 #include <ctype.h>
42 #ifdef HAVE_ICONV
43 #include <iconv.h>
44 #endif
45 #include <math.h>
46 #include "gaim.h"
47 #include "prpl.h" 26 #include "prpl.h"
48 #include "prefs.h" 27 #include "prefs.h"
49
50 #ifndef _WIN32
51 #include <sys/socket.h>
52 #include <arpa/inet.h>
53 #else
54 #include "win32dep.h"
55 #endif
56
57 #ifndef MAXPATHLEN
58 #define MAXPATHLEN 1024
59 #endif
60 28
61 static char home_dir[MAXPATHLEN]; 29 static char home_dir[MAXPATHLEN];
62 30
63 char *full_date() 31 char *full_date()
64 { 32 {
1005 } 973 }
1006 974
1007 return fp; 975 return fp;
1008 } 976 }
1009 977
1010 /* AIM URI's ARE FUN :-D */
1011 const char *
1012 handle_uri(char *uri)
1013 {
1014 const char *username;
1015 GString *str;
1016 GList *conn;
1017 GaimConnection *gc = NULL;
1018 GaimAccount *account;
1019
1020 gaim_debug(GAIM_DEBUG_INFO, "handle_uri", "Handling URI: %s\n", uri);
1021
1022 /* Well, we'd better check to make sure we have at least one
1023 AIM account connected. */
1024 for (conn = gaim_connections_get_all(); conn != NULL; conn = conn->next) {
1025 gc = conn->data;
1026 account = gaim_connection_get_account(gc);
1027 username = gaim_account_get_username(account);
1028
1029 if (gaim_account_get_protocol(account) == GAIM_PROTO_OSCAR &&
1030 username != NULL && isalpha(*username)) {
1031
1032 break;
1033 }
1034 }
1035
1036 if (gc == NULL)
1037 return _("Not connected to AIM");
1038
1039 /* aim:goim?screenname=screenname&message=message */
1040 if (!g_ascii_strncasecmp(uri, "aim:goim?", strlen("aim:goim?"))) {
1041 char *who, *what;
1042 GaimConversation *c;
1043 uri = uri + strlen("aim:goim?");
1044
1045 if (!(who = strstr(uri, "screenname="))) {
1046 return _("No screenname given.");
1047 }
1048 /* spaces are encoded as +'s */
1049 who = who + strlen("screenname=");
1050 str = g_string_new(NULL);
1051 while (*who && (*who != '&')) {
1052 g_string_append_c(str, *who == '+' ? ' ' : *who);
1053 who++;
1054 }
1055 who = g_strdup(str->str);
1056 g_string_free(str, TRUE);
1057
1058 what = strstr(uri, "message=");
1059 if (what) {
1060 what = what + strlen("message=");
1061 str = g_string_new(NULL);
1062 while (*what && (*what != '&' || !g_ascii_strncasecmp(what, "&amp;", 5))) {
1063 g_string_append_c(str, *what == '+' ? ' ' : *what);
1064 what++;
1065 }
1066 what = g_strdup(str->str);
1067 g_string_free(str, TRUE);
1068 }
1069
1070 c = gaim_conversation_new(GAIM_CONV_IM, gc->account, who);
1071 g_free(who);
1072
1073 if (what) {
1074 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(c);
1075
1076 gtk_text_buffer_insert_at_cursor(gtkconv->entry_buffer, what, -1);
1077 g_free(what);
1078 }
1079 } else if (!g_ascii_strncasecmp(uri, "aim:addbuddy?", strlen("aim:addbuddy?"))) {
1080 char *who, *group;
1081 uri = uri + strlen("aim:addbuddy?");
1082 /* spaces are encoded as +'s */
1083
1084 if (!(who = strstr(uri, "screenname="))) {
1085 return _("No screenname given.");
1086 }
1087 who = who + strlen("screenname=");
1088 str = g_string_new(NULL);
1089 while (*who && (*who != '&')) {
1090 g_string_append_c(str, *who == '+' ? ' ' : *who);
1091 who++;
1092 }
1093 who = g_strdup(str->str);
1094 g_string_free(str, TRUE);
1095
1096 group = strstr(uri, "group=");
1097 if (group) {
1098 group = group + strlen("group=");
1099 str = g_string_new(NULL);
1100 while (*group && (*group != '&' || !g_ascii_strncasecmp(group, "&amp;", 5))) {
1101 g_string_append_c(str, *group == '+' ? ' ' : *group);
1102 group++;
1103 }
1104 group = g_strdup(str->str);
1105 g_string_free(str, TRUE);
1106 }
1107
1108 gaim_debug(GAIM_DEBUG_MISC, "handle_uri", "who: %s\n", who);
1109 show_add_buddy(gc, who, group, NULL);
1110 g_free(who);
1111 if (group)
1112 g_free(group);
1113 } else if (!g_ascii_strncasecmp(uri, "aim:gochat?", strlen("aim:gochat?"))) {
1114 char *room;
1115 GHashTable *components;
1116 int exch = 5;
1117
1118 uri = uri + strlen("aim:gochat?");
1119 /* spaces are encoded as +'s */
1120
1121 if (!(room = strstr(uri, "roomname="))) {
1122 return _("No roomname given.");
1123 }
1124 room = room + strlen("roomname=");
1125 str = g_string_new(NULL);
1126 while (*room && (*room != '&')) {
1127 g_string_append_c(str, *room == '+' ? ' ' : *room);
1128 room++;
1129 }
1130 room = g_strdup(str->str);
1131 g_string_free(str, TRUE);
1132 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
1133 g_free);
1134 g_hash_table_replace(components, g_strdup("room"), room);
1135 g_hash_table_replace(components, g_strdup("exchange"),
1136 g_strdup_printf("%d", exch));
1137
1138 serv_join_chat(gc, components);
1139 g_hash_table_destroy(components);
1140 } else {
1141 return _("Invalid AIM URI");
1142 }
1143
1144
1145 return NULL;
1146 }
1147
1148 char *gaim_try_conv_to_utf8(const char *str) 978 char *gaim_try_conv_to_utf8(const char *str)
1149 { 979 {
1150 int converted; 980 int converted;
1151 char *utf8; 981 char *utf8;
1152 982