diff options
Diffstat (limited to 'MySpace/server_con.cpp')
-rw-r--r-- | MySpace/server_con.cpp | 94 |
1 files changed, 81 insertions, 13 deletions
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);
+ }
+ }
+ }
+ }
}
}
}
|