diff options
| author | Jelmer Vernooij <jelmer@samba.org> | 2006-05-25 01:04:18 +0200 | 
|---|---|---|
| committer | Jelmer Vernooij <jelmer@samba.org> | 2006-05-25 01:04:18 +0200 | 
| commit | 601e81362bbf4e4d1e686334b35d3bdcd87314d2 (patch) | |
| tree | 53ed2250bfc35b9e8da568b6f624a530d323ef32 /protocols/oscar | |
| parent | 46ad029950221205d1eb6201ec2f01c7231876c2 (diff) | |
| parent | fc630f9fb47690c30feaf4738727a213d633afc9 (diff) | |
[merge] Wilmer
Diffstat (limited to 'protocols/oscar')
| -rw-r--r-- | protocols/oscar/aim.h | 7 | ||||
| -rw-r--r-- | protocols/oscar/chat.c | 14 | ||||
| -rw-r--r-- | protocols/oscar/oscar.c | 33 | ||||
| -rw-r--r-- | protocols/oscar/oscar_util.c | 4 | ||||
| -rw-r--r-- | protocols/oscar/service.c | 5 | 
5 files changed, 40 insertions, 23 deletions
| diff --git a/protocols/oscar/aim.h b/protocols/oscar/aim.h index 24cd7730..93887103 100644 --- a/protocols/oscar/aim.h +++ b/protocols/oscar/aim.h @@ -727,8 +727,11 @@ struct aim_chat_exchangeinfo {  	char *lang2;  }; -#define AIM_CHATFLAGS_NOREFLECT 0x0001 -#define AIM_CHATFLAGS_AWAY      0x0002 +#define AIM_CHATFLAGS_NOREFLECT 	0x0001 +#define AIM_CHATFLAGS_AWAY      	0x0002 +#define AIM_CHATFLAGS_UNICODE		0x0004 +#define AIM_CHATFLAGS_ISO_8859_1	0x0008 +  int aim_chat_send_im(aim_session_t *sess, aim_conn_t *conn, guint16 flags, const char *msg, int msglen);  int aim_chat_join(aim_session_t *sess, aim_conn_t *conn, guint16 exchange, const char *roomname, guint16 instance);  int aim_chat_attachname(aim_conn_t *conn, guint16 exchange, const char *roomname, guint16 instance); diff --git a/protocols/oscar/chat.c b/protocols/oscar/chat.c index 033c2577..8843b499 100644 --- a/protocols/oscar/chat.c +++ b/protocols/oscar/chat.c @@ -158,7 +158,19 @@ int aim_chat_send_im(aim_session_t *sess, aim_conn_t *conn, guint16 flags, const  	 */  	if (flags & AIM_CHATFLAGS_AWAY)  		aim_addtlvtochain_noval(&otl, 0x0007); - +	 +	/* [WvG] This wasn't there originally, but we really should send +	         the right charset flags, as we also do with normal +	         messages. Hope this will work. :-) */ +	if (flags & AIM_CHATFLAGS_UNICODE) +		aimbs_put16(&fr->data, 0x0002); +	else if (flags & AIM_CHATFLAGS_ISO_8859_1) +		aimbs_put16(&fr->data, 0x0003); +	else +		aimbs_put16(&fr->data, 0x0000); +	 +	aimbs_put16(&fr->data, 0x0000); +	  	/*  	 * SubTLV: Type 1: Message  	 */ diff --git a/protocols/oscar/oscar.c b/protocols/oscar/oscar.c index 4e552bce..5174f95c 100644 --- a/protocols/oscar/oscar.c +++ b/protocols/oscar/oscar.c @@ -1,6 +1,8 @@  /*   * gaim   * + * Some code copyright (C) 2002-2006, Jelmer Vernooij <jelmer@samba.org> + *                                    and the BitlBee team.   * Some code copyright (C) 1998-1999, Mark Spencer <markster@marko.net>   * libfaim code copyright 1998, 1999 Adam Fritzler <afritz@auk.cx>   * @@ -355,7 +357,9 @@ static void oscar_login(struct aim_user *user) {  	if (isdigit(*user->username)) {  		odata->icq = TRUE; -		/* this is odd but it's necessary for a proper do_import and do_export */ +		/* This is odd but it's necessary for a proper do_import and do_export. +		   We don't do those anymore, but let's stick with it, just in case +		   it accidentally fixes something else too... */  		gc->password[8] = 0;  	} else {  		gc->flags |= OPT_CONN_HTML; @@ -380,7 +384,7 @@ static void oscar_login(struct aim_user *user) {  	if (g_strcasecmp(user->proto_opt[USEROPT_AUTH], "login.icq.com") != 0 &&  	    g_strcasecmp(user->proto_opt[USEROPT_AUTH], "login.oscar.aol.com") != 0) { -		serv_got_crap(gc, "Warning: Unknown OSCAR server: `%s'. Please review your configuration if the connection fails."); +		serv_got_crap(gc, "Warning: Unknown OSCAR server: `%s'. Please review your configuration if the connection fails.",user->proto_opt[USEROPT_AUTH]);  	}  	g_snprintf(buf, sizeof(buf), _("Signon: %s"), gc->username); @@ -1116,7 +1120,8 @@ static void gaim_icq_authgrant(gpointer w, struct icq_auth *data) {  	message = 0;  	aim_ssi_auth_reply(od->sess, od->conn, uin, 1, "");  	// aim_send_im_ch4(od->sess, uin, AIM_ICQMSG_AUTHGRANTED, &message); -	show_got_added(data->gc, NULL, uin, NULL, NULL); +	if(find_buddy(data->gc, uin) == NULL) +		show_got_added(data->gc, uin, NULL);  	g_free(uin);  	g_free(data); @@ -1147,7 +1152,7 @@ static void gaim_icq_authask(struct gaim_connection *gc, guint32 uin, char *msg)  	if (strlen(msg) > 6)  		reason = msg + 6; -	dialog_msg = g_strdup_printf("The user %u wants to add you to their buddy list for the following reason:\n\n%s", uin, reason ? reason : "No reason given."); +	dialog_msg = g_strdup_printf("The user %u wants to add you to their buddy list for the following reason: %s", uin, reason ? reason : "No reason given.");  	data->gc = gc;  	data->uin = uin;  	do_ask_dialog(gc, dialog_msg, data, gaim_icq_authgrant, gaim_icq_authdeny); @@ -1736,11 +1741,6 @@ static int gaim_bosrights(aim_session_t *sess, aim_frame_t *fr, ...) {  	odata->rights.maxpermits = (guint)maxpermits;  	odata->rights.maxdenies = (guint)maxdenies; -//	serv_finish_login(gc); - -	if (bud_list_cache_exists(gc)) -		do_import(gc, NULL); -  	aim_clientready(sess, fr->conn);  	aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_CHATNAV); @@ -2059,7 +2059,6 @@ static int gaim_ssi_parselist(aim_session_t *sess, aim_frame_t *fr, ...) {  						char *name;  						name = g_strdup(normalize(curitem->name));  						gc->permit = g_slist_append(gc->permit, name); -						build_allow_list();  						tmp++;  					}  				} @@ -2073,7 +2072,6 @@ static int gaim_ssi_parselist(aim_session_t *sess, aim_frame_t *fr, ...) {  						char *name;  						name = g_strdup(normalize(curitem->name));  						gc->deny = g_slist_append(gc->deny, name); -						build_block_list();  						tmp++;  					}  				} @@ -2095,8 +2093,6 @@ static int gaim_ssi_parselist(aim_session_t *sess, aim_frame_t *fr, ...) {  		} /* End of switch on curitem->type */  	} /* End of for loop */ -	if (tmp) -		do_export(gc);  	aim_ssi_enable(sess, fr->conn);  	/* Request offline messages, now that the buddy list is complete. */ @@ -2281,7 +2277,7 @@ static int gaim_icqinfo(aim_session_t *sess, aim_frame_t *fr, ...)                  struct tm tm;                  tm.tm_mday = (int)info->birthday;                  tm.tm_mon = (int)info->birthmonth-1; -                tm.tm_year = (int)info->birthyear-1900; +                tm.tm_year = (int)info->birthyear%100;                  strftime(date, sizeof(date), "%Y-%m-%d", &tm);                  info_string_append(str, "\n", _("Birthday"), date);          } @@ -2505,6 +2501,7 @@ int oscar_chat_send(struct gaim_connection * gc, int id, char *message)  	struct chat_connection * ccon;  	int ret;  	guint8 len = strlen(message); +	guint16 flags;  	char *s;  	if(!(ccon = find_oscar_chat(gc, id))) @@ -2513,15 +2510,19 @@ int oscar_chat_send(struct gaim_connection * gc, int id, char *message)  	for (s = message; *s; s++)  		if (*s & 128)  			break; -	  	 +	 +	flags = AIM_CHATFLAGS_NOREFLECT; +	  	/* Message contains high ASCII chars, time for some translation! */  	if (*s) {  		s = g_malloc(BUF_LONG);  		/* Try if we can put it in an ISO8859-1 string first.  		   If we can't, fall back to UTF16. */  		if ((ret = do_iconv("UTF-8", "ISO8859-1", message, s, len, BUF_LONG)) >= 0) { +			flags |= AIM_CHATFLAGS_ISO_8859_1;  			len = ret;  		} else if ((ret = do_iconv("UTF-8", "UNICODEBIG", message, s, len, BUF_LONG)) >= 0) { +			flags |= AIM_CHATFLAGS_UNICODE;  			len = ret;  		} else {  			/* OOF, translation failed... Oh well.. */ @@ -2532,7 +2533,7 @@ int oscar_chat_send(struct gaim_connection * gc, int id, char *message)  		s = message;  	} -	ret = aim_chat_send_im(od->sess, ccon->conn, AIM_CHATFLAGS_NOREFLECT, s, len); +	ret = aim_chat_send_im(od->sess, ccon->conn, flags, s, len);  	if (s != message) {	  		g_free(s); diff --git a/protocols/oscar/oscar_util.c b/protocols/oscar/oscar_util.c index 1bb27559..0ce06bd9 100644 --- a/protocols/oscar/oscar_util.c +++ b/protocols/oscar/oscar_util.c @@ -108,7 +108,7 @@ static int aim_snlen(const char *sn)  		return 0;  	curPtr = sn; -	while ( (*curPtr) != (char) NULL) { +	while ( (*curPtr) != (char) '\0') {  		if ((*curPtr) != ' ')  		i++;  		curPtr++; @@ -139,7 +139,7 @@ int aim_sncmp(const char *sn1, const char *sn2)  	curPtr1 = sn1;  	curPtr2 = sn2; -	while ( (*curPtr1 != (char) NULL) && (*curPtr2 != (char) NULL) ) { +	while ( (*curPtr1 != (char) '\0') && (*curPtr2 != (char) '\0') ) {  		if ( (*curPtr1 == ' ') || (*curPtr2 == ' ') ) {  			if (*curPtr1 == ' ')  				curPtr1++; diff --git a/protocols/oscar/service.c b/protocols/oscar/service.c index 573e1983..4596974f 100644 --- a/protocols/oscar/service.c +++ b/protocols/oscar/service.c @@ -732,7 +732,7 @@ int aim_setextstatus(aim_session_t *sess, aim_conn_t *conn, guint32 status)  	guint32 data;  	int tlvlen; -	data = AIM_ICQ_STATE_WEBAWARE | AIM_ICQ_STATE_HIDEIP | status; /* yay for error checking ;^) */ +	data = AIM_ICQ_STATE_HIDEIP | status; /* yay for error checking ;^) */  	tlvlen = aim_addtlvtochain32(&tl, 0x0006, data); @@ -880,13 +880,14 @@ int aim_sendmemblock(aim_session_t *sess, aim_conn_t *conn, guint32 offset, guin  			aimbs_put32(&fr->data, 0xa46d3b39);  #endif +/* len can't be 0 here anyway...  		} else if ((offset == 0x00001000) && (len == 0x00000000)) {  			aimbs_put32(&fr->data, 0xd41d8cd9);  			aimbs_put32(&fr->data, 0x8f00b204);  			aimbs_put32(&fr->data, 0xe9800998);  			aimbs_put32(&fr->data, 0xecf8427e); - +*/  		} else  			do_error_dialog(sess->aux_data, "WARNING: unknown hash request", "Gaim"); | 
