From 16827df7bc4a82d74f89dc81631bd2a7d05f3121 Mon Sep 17 00:00:00 2001 From: sje Date: Fri, 29 Jun 2007 06:41:47 +0000 Subject: can add and remove contacts git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@220 4f64403b-2f21-0410-a795-97e2b3489a10 --- MySpace/server_con.cpp | 94 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 81 insertions(+), 13 deletions(-) (limited to 'MySpace/server_con.cpp') diff --git a/MySpace/server_con.cpp b/MySpace/server_con.cpp index 79f20b8..0aa577c 100644 --- a/MySpace/server_con.cpp +++ b/MySpace/server_con.cpp @@ -4,8 +4,6 @@ #include "arc4.h" #include "options.h" -#include "NetMessage.h" - #define SERVER_READ_BUFFER_SIZE (1024 * 32) /* TODO: obtain IPs of network interfaces from user's machine, instead of @@ -26,7 +24,14 @@ int status = ID_STATUS_OFFLINE; bool server_running = false, server_stop = false; HANDLE server_connection = 0; -int sesskey; +int sesskey = 0, req_id = 1; + + +void SendMessage(ClientNetMessage &msg) { + char packet[4096]; + int packet_size = msg.make_packet(packet, 4096); + if(server_connection) Netlib_Send(server_connection, packet, packet_size, MSG_DUMPASTEXT); +} void CALLBACK sttMainThreadStatusCallback( ULONG dwParam ) { if(status != dwParam) { @@ -98,9 +103,7 @@ void try_login(NetMessage &msg, HANDLE connection) { delete[] ch_resp; - char packet[4096]; - int packet_size = reply.make_packet(packet, 4096); - Netlib_Send(server_connection, packet, packet_size, MSG_DUMPASTEXT); + SendMessage(reply); } else { PUShowMessage("Nonce format error", SM_NOTIFY); } @@ -170,16 +173,81 @@ void __cdecl ServerThreadFunc(void*) { try_login(msg, server_connection); } else if(msg.get_int("lc") == 2) { sesskey = msg.get_int("sesskey"); + DBWriteContactSettingDword(0, MODULE, "UID", msg.get_int("userid")); + char nick[256]; + if(msg.get_string("uniquenick", nick, 256)) + DBWriteContactSettingStringUtf(0, MODULE, "Nick", nick); QueueUserAPC(sttMainThreadStatusCallback, mainThread, ID_STATUS_ONLINE); } else if(msg.exists(NMString("persistr"))) { - /* - NMString cmd, dsn, lid; - msg.get(NMString("cmd"), cmd); - msg.get(NMString("dsn"), dsn); - msg.get(NMString("lid"), lid); - mir_snprintf(mt, 256, "Peristr message: type is %s,%s,%s", cmd.text, dsn.text, lid.text); + + int cmd, dsn, lid, req; + cmd = msg.get_int("cmd") & 255; + dsn = msg.get_int("dsn"); + lid = msg.get_int("lid"); + req = msg.get_int("rid"); + + mir_snprintf(mt, 256, "Peristr message: type is %d,%d,%d", cmd, dsn, lid); PUShowMessage(mt, SM_NOTIFY); - */ + if(cmd == 1 && dsn == 5 && lid == 7) { + Dictionary body = msg.get_dict("body"); + char email[256], nick[256]; + int uid = body.get_int("UserID"); + if(uid != 0) { + MYPROTOSEARCHRESULT mpsr = {sizeof(mpsr)}; + + if(body.get_string("UserName", nick, 256)) + mpsr.psr.nick = nick; + else if(body.get_string("DisplayName", nick, 256)) + mpsr.psr.nick = nick; + if(body.get_string("Email", email, 256)) + mpsr.psr.email = email; + mpsr.uid = uid; + + ProtoBroadcastAck(MODULE, 0, ACKTYPE_SEARCH, ACKRESULT_DATA, (HANDLE)req, (LPARAM)&mpsr); + } else + ProtoBroadcastAck(MODULE, 0, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE)req, 0); + } else + if(cmd == 1 && dsn == 4 && lid == 3) { + Dictionary body = msg.get_dict("body"); + char errmsg[256]; + if(body.get_string("ErrorMessage", errmsg, 256)) { + PUShowMessage(errmsg, SM_WARNING); + ProtoBroadcastAck(MODULE, 0, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE)req, 0); + } else { + char email[256], nick[256]; + int uid = body.get_int("UserID"); + if(uid != 0) { + MYPROTOSEARCHRESULT mpsr = {sizeof(mpsr)}; + + if(body.get_string("DisplayName", nick, 256)) + mpsr.psr.nick = nick; + else if(body.get_string("UserName", nick, 256)) + mpsr.psr.nick = nick; + + if(body.get_string("Email", email, 256)) + mpsr.psr.email = email; + mpsr.uid = uid; + + ProtoBroadcastAck(MODULE, 0, ACKTYPE_SEARCH, ACKRESULT_DATA, (HANDLE)req, (LPARAM)&mpsr); + } else + ProtoBroadcastAck(MODULE, 0, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE)req, 0); + } + } else + if(cmd == 2 && dsn == 0 && lid == 9) { + Dictionary body = msg.get_dict("body"); + char errmsg[256]; + if(body.get_string("ErrorMessage", errmsg, 256)) { + PUShowMessage(errmsg, SM_WARNING); + } else { + char nick[256]; + int uid = body.get_int("ContactID"); + if(uid != 0) { + if(body.get_string("NickName", nick, 256)) { + DBWriteContactSettingStringUtf(0, MODULE, "Nick", nick); + } + } + } + } } } } -- cgit v1.2.3