diff options
author | sje <sje@4f64403b-2f21-0410-a795-97e2b3489a10> | 2007-07-09 16:27:12 +0000 |
---|---|---|
committer | sje <sje@4f64403b-2f21-0410-a795-97e2b3489a10> | 2007-07-09 16:27:12 +0000 |
commit | 92916d3d9d67abf583b875486d54b1c20ad5883f (patch) | |
tree | 02bb5eb09274a73717dffac3120864eb9e3ea3ac | |
parent | 68368a3478231511990298a666289c920319206e (diff) |
fix for 'add permanently to list' functions
limit max message length 'correctly' (thx Jeff)
git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@262 4f64403b-2f21-0410-a795-97e2b3489a10
-rw-r--r-- | MySpace/MySpace.cpp | 3 | ||||
-rw-r--r-- | MySpace/common.h | 2 | ||||
-rw-r--r-- | MySpace/proto.cpp | 99 | ||||
-rw-r--r-- | MySpace/server_con.cpp | 4 | ||||
-rw-r--r-- | MySpace/version.h | 2 |
5 files changed, 70 insertions, 40 deletions
diff --git a/MySpace/MySpace.cpp b/MySpace/MySpace.cpp index f9abd6a..0478360 100644 --- a/MySpace/MySpace.cpp +++ b/MySpace/MySpace.cpp @@ -130,13 +130,14 @@ extern "C" __declspec (dllexport) int Load(PLUGINLINK *link) { CharUpperA(MODULE);
}
-
if(ServiceExists(MS_DB_SETSETTINGRESIDENT)) { // 0.6+
char buff[256];
mir_snprintf(buff, 256, "%s/%s", MODULE, "Status");
CallService(MS_DB_SETSETTINGRESIDENT, TRUE, (LPARAM)buff);
mir_snprintf(buff, 256, "%s/%s", MODULE, "StatusMsg");
CallService(MS_DB_SETSETTINGRESIDENT, TRUE, (LPARAM)buff);
+ mir_snprintf(buff, 256, "%s/%s", MODULE, "IdleTS");
+ CallService(MS_DB_SETSETTINGRESIDENT, TRUE, (LPARAM)buff);
}
InitARC4Module();
diff --git a/MySpace/common.h b/MySpace/common.h index 65f05d4..9eb90b2 100644 --- a/MySpace/common.h +++ b/MySpace/common.h @@ -70,7 +70,7 @@ extern char MODULE[256]; #define CLIENT_VER 673
-#define MAX_MESSAGE_SIZE 1024
+#define MAX_MESSAGE_SIZE 975
extern HINSTANCE hInst;
diff --git a/MySpace/proto.cpp b/MySpace/proto.cpp index 31517e2..9dc0815 100644 --- a/MySpace/proto.cpp +++ b/MySpace/proto.cpp @@ -24,7 +24,7 @@ int GetCaps(WPARAM wParam,LPARAM lParam) { ret = PF2_ONLINE | PF2_SHORTAWAY | PF2_INVISIBLE;
break;
case PFLAGNUM_4:
- ret = PF4_SUPPORTTYPING | PF4_AVATARS;
+ ret = PF4_SUPPORTTYPING | PF4_AVATARS | PF4_SUPPORTIDLE | PF4_IMSENDUTF;
break;
case PFLAGNUM_5:
//ret = PF2_INVISIBLE;
@@ -109,7 +109,7 @@ void __cdecl sttFakeAckMessageFailed(void *param) { int ProtoSendMessage(WPARAM wParam, LPARAM lParam) {
CCSDATA *ccs = (CCSDATA *) lParam;
char *message = (char *)ccs->lParam;
- char msg_utf[MAX_MESSAGE_SIZE], msg_fmt[MAX_MESSAGE_SIZE];
+ char msg_utf[MAX_MESSAGE_SIZE + 1], msg_fmt[MAX_MESSAGE_SIZE + 128];
int uid;
if((uid = DBGetContactSettingDword(ccs->hContact, MODULE, "UID", 0)) == 0 || status == ID_STATUS_OFFLINE) {
@@ -118,18 +118,19 @@ int ProtoSendMessage(WPARAM wParam, LPARAM lParam) { }
// TODO: process 'message' and/or 'messagew' below
- if(ccs->wParam & PREF_UNICODE) {
+ if(ccs->wParam & PREF_UTF) {
+ strncpy(msg_utf, message, MAX_MESSAGE_SIZE);
+ } else if(ccs->wParam & PREF_UNICODE) {
wchar_t *messagew = (wchar_t *)&message[strlen(message)+1];
WideCharToMultiByte(CP_UTF8, 0, messagew, -1, msg_utf, MAX_MESSAGE_SIZE, 0, 0);
} else {
- //} else if(ccs->wParam & PREF_UTF) {
strncpy(msg_utf, message, MAX_MESSAGE_SIZE);
}
- msg_utf[MAX_MESSAGE_SIZE-1] = 0;
+ msg_utf[MAX_MESSAGE_SIZE] = 0;
- entitize_xml(msg_utf, MAX_MESSAGE_SIZE);
- encode_smileys(msg_utf, MAX_MESSAGE_SIZE);
- mir_snprintf(msg_fmt, MAX_MESSAGE_SIZE, "<p><f f='Times' h='16'><c v='black'><b v='white'>%s</b></c></f></p>", msg_utf);
+ entitize_xml(msg_utf, MAX_MESSAGE_SIZE + 1);
+ encode_smileys(msg_utf, MAX_MESSAGE_SIZE + 1);
+ mir_snprintf(msg_fmt, MAX_MESSAGE_SIZE + 1, "<p><f f='Times' h='16'><c v='black'><b v='white'>%s</b></c></f></p>", msg_utf);
ClientNetMessage msg;
msg.add_int("bm", 1);
@@ -387,32 +388,34 @@ int ContactDeleted(WPARAM wParam, LPARAM lParam) { HANDLE hContact = (HANDLE)wParam;
int uid = DBGetContactSettingDword(hContact, MODULE, "UID", 0);
if(uid) {
- ClientNetMessage msg_del;
- msg_del.add_string("delbuddy", "");
- msg_del.add_int("sesskey", sesskey);
- msg_del.add_int("delprofileid", uid);
- SendMessage(msg_del);
-
- ClientNetMessage msg_persist;
- msg_persist.add_int("persist", 1);
- msg_persist.add_int("sesskey", sesskey);
- msg_persist.add_int("cmd", 515);
- msg_persist.add_int("dsn", 0);
- msg_persist.add_int("uid", DBGetContactSettingDword(0, MODULE, "UID", 0));
- msg_persist.add_int("lid", 8);
- msg_persist.add_int("rid", req_id++);
- char body[1024];
- mir_snprintf(body, 1024, "ContactID=%d", uid);
- msg_persist.add_string("body", body);
- SendMessage(msg_persist);
-
- ClientNetMessage msg_block;
- msg_block.add_string("blocklist", "");
- msg_block.add_int("sesskey", sesskey);
- char idlist[1024];
- mir_snprintf(idlist, 1024, "a-|%d|b-|%d", uid, uid);
- msg_block.add_string("idlist", idlist);
- SendMessage(msg_block);
+ if(DBGetContactSettingByte(hContact, "CList", "NotOnList", 0) == 0) {
+ ClientNetMessage msg_del;
+ msg_del.add_string("delbuddy", "");
+ msg_del.add_int("sesskey", sesskey);
+ msg_del.add_int("delprofileid", uid);
+ SendMessage(msg_del);
+
+ ClientNetMessage msg_persist;
+ msg_persist.add_int("persist", 1);
+ msg_persist.add_int("sesskey", sesskey);
+ msg_persist.add_int("cmd", 515);
+ msg_persist.add_int("dsn", 0);
+ msg_persist.add_int("uid", DBGetContactSettingDword(0, MODULE, "UID", 0));
+ msg_persist.add_int("lid", 8);
+ msg_persist.add_int("rid", req_id++);
+ char body[1024];
+ mir_snprintf(body, 1024, "ContactID=%d", uid);
+ msg_persist.add_string("body", body);
+ SendMessage(msg_persist);
+
+ ClientNetMessage msg_block;
+ msg_block.add_string("blocklist", "");
+ msg_block.add_int("sesskey", sesskey);
+ char idlist[1024];
+ mir_snprintf(idlist, 1024, "a-|%d|b-|%d", uid, uid);
+ msg_block.add_string("idlist", idlist);
+ SendMessage(msg_block);
+ }
}
return 0;
}
@@ -434,10 +437,35 @@ int IdleChanged(WPARAM wParam, LPARAM lParam) { return 0;
}
+int SettingChanged(WPARAM wParam, LPARAM lParam) {
+ if(!wParam) return 0;
+
+ DBCONTACTWRITESETTING *dbcws = (DBCONTACTWRITESETTING*)lParam;
+ if(strcmp(dbcws->szModule, "CList") != 0) return 0;
+ if(strcmp(dbcws->szSetting, "NotOnList") != 0) return 0;
+
+ if(dbcws->value.type != DBVT_DELETED && dbcws->value.bVal != 0) return 0;
+
+ HANDLE hContact = (HANDLE)wParam;
+ char *proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ if(proto == 0 || strcmp(proto, MODULE) != 0) return 0;
+
+ int uid = DBGetContactSettingDword(hContact, MODULE, "UID", 0);
+
+ ClientNetMessage msg_add;
+ msg_add.add_string("addbuddy", "");
+ msg_add.add_int("sesskey", sesskey);
+ msg_add.add_int("newprofileid", DBGetContactSettingDword(hContact, MODULE, "UID", 0));
+ msg_add.add_string("reason", "");
+
+ SendMessage(msg_add);
+ return 0;
+}
+
#define NUM_FILTER_SERVICES 17
HANDLE hServices[NUM_FILTER_SERVICES];
-HANDLE hEventContactDeleted, hEventIdle;
+HANDLE hEventContactDeleted, hEventIdle, hEventSettingChanged;
void CreateProtoServices() {
// create our services
int i = 0;
@@ -467,6 +495,7 @@ void CreateProtoServices() { hEventContactDeleted = HookEvent(ME_DB_CONTACT_DELETED, ContactDeleted);
hEventIdle = HookEvent(ME_IDLE_CHANGED, IdleChanged);
+ hEventSettingChanged = HookEvent(ME_DB_CONTACT_SETTINGCHANGED, SettingChanged);
}
void DeinitProto() {
diff --git a/MySpace/server_con.cpp b/MySpace/server_con.cpp index 10e3197..0ef40e6 100644 --- a/MySpace/server_con.cpp +++ b/MySpace/server_con.cpp @@ -494,8 +494,8 @@ void __cdecl ServerThreadFunc(void*) { DBWriteContactSettingByte(hContact, "CList", "Hidden", 1);
LookupUID(uid);
}
- char text[MAX_MESSAGE_SIZE];
- if(msg.get_string("msg", text, MAX_MESSAGE_SIZE)) {
+ char text[MAX_MESSAGE_SIZE + 1];
+ if(msg.get_string("msg", text, MAX_MESSAGE_SIZE + 1)) {
CallService(MS_PROTO_CONTACTISTYPING, (WPARAM)hContact, (LPARAM)0); // auto end typing
strip_tags(text);
diff --git a/MySpace/version.h b/MySpace/version.h index 100d794..3a97a3e 100644 --- a/MySpace/version.h +++ b/MySpace/version.h @@ -5,7 +5,7 @@ #define __MAJOR_VERSION 0
#define __MINOR_VERSION 0
#define __RELEASE_NUM 3
-#define __BUILD_NUM 4
+#define __BUILD_NUM 5
#define __FILEVERSION_STRING __MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM
#define __FILEVERSION_STRING_DOTS __MAJOR_VERSION.__MINOR_VERSION.__RELEASE_NUM.__BUILD_NUM
|