diff options
author | Robert Pösel <robyer@seznam.cz> | 2014-12-08 23:53:51 +0000 |
---|---|---|
committer | Robert Pösel <robyer@seznam.cz> | 2014-12-08 23:53:51 +0000 |
commit | a882547f12158c9b9e01f493d19c1d8fd5eda52b (patch) | |
tree | 3e2e9e7c2e42cf9502ce82ae2ce1c38e6718d449 | |
parent | 97d772455be44b3693678bb5192e5c6bc777bc98 (diff) |
Steam: Revert previous commit as it was useless work >:o
git-svn-id: http://svn.miranda-ng.org/main/trunk@11292 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
-rw-r--r-- | protocols/Steam/Steam_10.vcxproj | 1 | ||||
-rw-r--r-- | protocols/Steam/Steam_10.vcxproj.filters | 3 | ||||
-rw-r--r-- | protocols/Steam/Steam_12.vcxproj | 1 | ||||
-rw-r--r-- | protocols/Steam/Steam_12.vcxproj.filters | 3 | ||||
-rw-r--r-- | protocols/Steam/src/Steam/status.h | 24 | ||||
-rw-r--r-- | protocols/Steam/src/Steam/steam.h | 1 | ||||
-rw-r--r-- | protocols/Steam/src/steam_account.cpp | 562 | ||||
-rw-r--r-- | protocols/Steam/src/steam_contacts.cpp | 20 | ||||
-rw-r--r-- | protocols/Steam/src/steam_proto.cpp | 21 | ||||
-rw-r--r-- | protocols/Steam/src/steam_proto.h | 1 |
10 files changed, 270 insertions, 367 deletions
diff --git a/protocols/Steam/Steam_10.vcxproj b/protocols/Steam/Steam_10.vcxproj index 3edf0526e2..7adb920113 100644 --- a/protocols/Steam/Steam_10.vcxproj +++ b/protocols/Steam/Steam_10.vcxproj @@ -201,7 +201,6 @@ <ClInclude Include="src\Steam\poll.h" />
<ClInclude Include="src\Steam\search.h" />
<ClInclude Include="src\Steam\session.h" />
- <ClInclude Include="src\Steam\status.h" />
<ClInclude Include="src\Steam\steam.h" />
<ClInclude Include="src\steam_proto.h" />
<ClInclude Include="src\version.h" />
diff --git a/protocols/Steam/Steam_10.vcxproj.filters b/protocols/Steam/Steam_10.vcxproj.filters index 985a3abcb4..f652465c1e 100644 --- a/protocols/Steam/Steam_10.vcxproj.filters +++ b/protocols/Steam/Steam_10.vcxproj.filters @@ -110,9 +110,6 @@ <ClInclude Include="src\Steam\session.h">
<Filter>Header Files\Steam</Filter>
</ClInclude>
- <ClInclude Include="src\Steam\status.h">
- <Filter>Header Files\Steam</Filter>
- </ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\resource.rc">
diff --git a/protocols/Steam/Steam_12.vcxproj b/protocols/Steam/Steam_12.vcxproj index 55c5854fa4..192936124f 100644 --- a/protocols/Steam/Steam_12.vcxproj +++ b/protocols/Steam/Steam_12.vcxproj @@ -204,7 +204,6 @@ <ClInclude Include="src\Steam\poll.h" />
<ClInclude Include="src\Steam\rsa_key.h" />
<ClInclude Include="src\Steam\session.h" />
- <ClInclude Include="src\Steam\status.h" />
<ClInclude Include="src\Steam\steam.h" />
<ClInclude Include="src\steam_proto.h" />
<ClInclude Include="src\version.h" />
diff --git a/protocols/Steam/Steam_12.vcxproj.filters b/protocols/Steam/Steam_12.vcxproj.filters index c4727501f1..0a9df2ae03 100644 --- a/protocols/Steam/Steam_12.vcxproj.filters +++ b/protocols/Steam/Steam_12.vcxproj.filters @@ -101,9 +101,6 @@ <ClInclude Include="src\Steam\session.h">
<Filter>Header Files\Steam</Filter>
</ClInclude>
- <ClInclude Include="src\Steam\status.h">
- <Filter>Header Files\Steam</Filter>
- </ClInclude>
<ClInclude Include="src\Steam\rsa_key.h">
<Filter>Header Files\Steam</Filter>
</ClInclude>
diff --git a/protocols/Steam/src/Steam/status.h b/protocols/Steam/src/Steam/status.h deleted file mode 100644 index 686ff062d3..0000000000 --- a/protocols/Steam/src/Steam/status.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _STEAM_STATUS_H_ -#define _STEAM_STATUS_H_ - -namespace SteamWebApi -{ - class SetStatusRequest : public HttpsPostRequest - { - public: - SetStatusRequest(const char *token, const char *umqId, int state) : - HttpsPostRequest(STEAM_API_URL "/ISteamWebUserPresenceOAuth/Message/v0001") - { - CMStringA data; - data.AppendFormat("access_token=%s&umqid=%s&type=personastate&persona_state=%d", - token, - umqId, - state); - - SetData(data, data.GetLength()); - } - }; -} - - -#endif //_STEAM_STATUS_H_
\ No newline at end of file diff --git a/protocols/Steam/src/Steam/steam.h b/protocols/Steam/src/Steam/steam.h index 7809553c1b..c32da7e92a 100644 --- a/protocols/Steam/src/Steam/steam.h +++ b/protocols/Steam/src/Steam/steam.h @@ -121,6 +121,5 @@ namespace SteamWebApi #include "Steam\search.h"
#include "Steam\avatar.h"
#include "Steam\captcha.h"
-#include "Steam\status.h"
#endif //_STEAM_H_
\ No newline at end of file diff --git a/protocols/Steam/src/steam_account.cpp b/protocols/Steam/src/steam_account.cpp index 62e442a032..e1316a2521 100644 --- a/protocols/Steam/src/steam_account.cpp +++ b/protocols/Steam/src/steam_account.cpp @@ -1,298 +1,266 @@ -#include "common.h"
-
-bool CSteamProto::IsOnline()
-{
- return m_iStatus > ID_STATUS_OFFLINE && m_hPollingThread;
-}
-
-bool CSteamProto::IsMe(const char *steamId)
-{
- ptrA mySteamId(getStringA("SteamID"));
- if (!lstrcmpA(steamId, mySteamId))
- return true;
-
- return false;
-}
-
-void CSteamProto::OnGotRsaKey(const NETLIBHTTPREQUEST *response, void *arg)
-{
- if (response == NULL)
- return;
-
- // load rsa key parts
- JSONROOT root(response->pData);
- if (!root)
- return;
-
- JSONNODE *node = json_get(root, "success");
- if (!json_as_bool(node)) {
- return;
- }
-
- node = json_get(root, "publickey_mod");
- ptrA modulus(mir_u2a(json_as_string(node)));
-
- // exponent "010001" is used as constant in CSteamProto::RsaEncrypt
- /*node = json_get(root, "publickey_exp");
- ptrA exponent(mir_u2a(json_as_string(node)));*/
-
- node = json_get(root, "timestamp");
- ptrA timestamp(mir_u2a(json_as_string(node)));
- setString("Timestamp", timestamp);
-
- // encrcrypt password
- ptrA base64RsaEncryptedPassword;
- ptrA password(getStringA("Password"));
-
- DWORD error = 0;
- DWORD encryptedSize = 0;
- DWORD passwordSize = (DWORD)strlen(password);
- if ((error = RsaEncrypt(modulus, password, NULL, encryptedSize)) != 0)
- {
- debugLogA("CSteamProto::OnGotRsaKey: encryption error (%lu)", error);
- return;
- }
-
- BYTE *encryptedPassword = (BYTE*)mir_calloc(encryptedSize);
- if ((error = RsaEncrypt(modulus, password, encryptedPassword, encryptedSize)) != 0)
- {
- debugLogA("CSteamProto::OnGotRsaKey: encryption error (%lu)", error);
- return;
- }
-
- base64RsaEncryptedPassword = mir_base64_encode(encryptedPassword, encryptedSize);
- mir_free(encryptedPassword);
-
- setString("EncryptedPassword", base64RsaEncryptedPassword);
-
- // run authorization request
- ptrA username(mir_urlEncode(ptrA(mir_utf8encodeW(getWStringA("Username")))));
-
- PushRequest(
- new SteamWebApi::AuthorizationRequest(username, base64RsaEncryptedPassword, timestamp),
- &CSteamProto::OnAuthorization);
-}
-
-void CSteamProto::OnAuthorization(const NETLIBHTTPREQUEST *response, void *arg)
-{
- if (response == NULL) {
- SetStatus(ID_STATUS_OFFLINE);
- return;
- }
-
- JSONROOT root(response->pData);
-
- JSONNODE *node = json_get(root, "success");
- if (json_as_bool(node) == 0)
- {
- node = json_get(root, "message");
- const wchar_t *message = json_as_string(node);
- if (!lstrcmpi(json_as_string(node), L"Incorrect login"))
- {
- ShowNotification(TranslateTS(message));
- SetStatus(ID_STATUS_OFFLINE);
- return;
- }
-
- node = json_get(root, "emailauth_needed");
- if (json_as_bool(node) > 0)
- {
- node = json_get(root, "emailsteamid");
- ptrA guardId(mir_u2a(json_as_string(node)));
-
- node = json_get(root, "emaildomain");
- ptrA emailDomain(mir_utf8encodeW(json_as_string(node)));
-
- GuardParam guard;
- lstrcpyA(guard.domain, emailDomain);
-
- if (DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_GUARD), NULL, CSteamProto::GuardProc, (LPARAM)&guard) != 1) {
- return;
- }
-
- ptrA username(mir_urlEncode(ptrA(mir_utf8encodeW(getWStringA("Username")))));
- ptrA base64RsaEncryptedPassword(getStringA("EncryptedPassword"));
- ptrA timestamp(getStringA("Timestamp"));
-
- PushRequest(
- new SteamWebApi::AuthorizationRequest(username, base64RsaEncryptedPassword, timestamp, guardId, guard.code),
- &CSteamProto::OnAuthorization);
- }
-
- node = json_get(root, "captcha_needed");
- if (json_as_bool(node) > 0)
- {
- node = json_get(root, "captcha_gid");
- ptrA captchaId(mir_u2a(json_as_string(node)));
-
- char url[MAX_PATH];
- mir_snprintf(url, SIZEOF(url), STEAM_COM_URL "/public/captcha.php?gid=%s", captchaId);
-
- SteamWebApi::GetCaptchaRequest *request = new SteamWebApi::GetCaptchaRequest(url);
- request->szUrl = (char*)request->url.c_str();
- NETLIBHTTPREQUEST *response = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)m_hNetlibUser, (LPARAM)request);
- delete request;
-
- CaptchaParam captcha = { 0 };
- captcha.size = response->dataLength;
- captcha.data = (BYTE*)mir_alloc(captcha.size);
- memcpy(captcha.data, response->pData, captcha.size);
-
- CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)response);
-
- int res = DialogBoxParam(
- g_hInstance,
- MAKEINTRESOURCE(IDD_CAPTCHA),
- NULL,
- CSteamProto::CaptchaProc,
- (LPARAM)&captcha);
-
- mir_free(captcha.data);
-
- if (res != 1)
- {
- SetStatus(ID_STATUS_OFFLINE);
- return;
- }
-
- ptrA username(mir_urlEncode(ptrA(mir_utf8encodeW(getWStringA("Username")))));
- ptrA base64RsaEncryptedPassword(getStringA("EncryptedPassword"));
- ptrA timestamp(getStringA("Timestamp"));
-
- PushRequest(
- new SteamWebApi::AuthorizationRequest(username, base64RsaEncryptedPassword, timestamp, "-1", "", captchaId, captcha.text),
- &CSteamProto::OnAuthorization);
- }
-
- return;
- }
-
- node = json_get(root, "login_complete");
- if (!json_as_bool(node))
- {
- SetStatus(ID_STATUS_OFFLINE);
- return;
- }
-
- node = json_get(root, "oauth");
- JSONROOT nroot(ptrA(mir_u2a(json_as_string(node))));
-
- node = json_get(nroot, "steamid");
- ptrA steamId(mir_u2a(json_as_string(node)));
- setString("SteamID", steamId);
-
- node = json_get(nroot, "oauth_token");
- ptrA token(mir_u2a(json_as_string(node)));
- setString("TokenSecret", token);
-
- node = json_get(nroot, "webcookie");
- ptrA cookie(mir_u2a(json_as_string(node)));
-
- delSetting("Timestamp");
- delSetting("EncryptedPassword");
-
- PushRequest(
- new SteamWebApi::GetSessionRequest(token, steamId, cookie),
- &CSteamProto::OnGotSession);
-
- PushRequest(
- new SteamWebApi::LogonRequest(token),
- &CSteamProto::OnLoggedOn);
-}
-
-void CSteamProto::OnGotSession(const NETLIBHTTPREQUEST *response, void *arg)
-{
- if (response == NULL)
- return;
-
- for (int i = 0; i < response->headersCount; i++)
- {
- if (lstrcmpiA(response->headers[i].szName, "Set-Cookie"))
- continue;
-
- std::string cookies = response->headers[i].szValue;
- size_t start = cookies.find("sessionid=") + 10;
- size_t end = cookies.substr(start).find(';');
- std::string sessionId = cookies.substr(start, end - start + 10);
- setString("SessionID", sessionId.c_str());
- break;
- }
-}
-
-void CSteamProto::OnLoggedOn(const NETLIBHTTPREQUEST *response, void *arg)
-{
- if (response == NULL)
- {
- // set status to offline
- m_iStatus = m_iDesiredStatus = ID_STATUS_OFFLINE;
- ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)ID_STATUS_CONNECTING, ID_STATUS_OFFLINE);
- return;
- }
-
- JSONROOT root(response->pData);
-
- JSONNODE *node = json_get(root, "error");
- ptrW error(json_as_string(node));
- if (lstrcmpi(error, L"OK")/* || response->resultCode == HTTP_STATUS_UNAUTHORIZED*/)
- {
- //delSetting("TokenSecret");
- //delSetting("Cookie");
-
- // set status to offline
- m_iStatus = m_iDesiredStatus = ID_STATUS_OFFLINE;
- ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)ID_STATUS_CONNECTING, ID_STATUS_OFFLINE);
- return;
- }
-
- node = json_get(root, "umqid");
- setString("UMQID", ptrA(mir_u2a(json_as_string(node))));
-
- node = json_get(root, "message");
- setDword("MessageID", json_as_int(node));
-
- // load contact list
- ptrA token(getStringA("TokenSecret"));
- ptrA steamId(getStringA("SteamID"));
-
- PushRequest(
- new SteamWebApi::GetFriendListRequest(token, steamId),
- &CSteamProto::OnGotFriendList);
-
- // start polling thread
- m_hPollingThread = ForkThreadEx(&CSteamProto::PollingThread, 0, NULL);
-
- // go to online now
- ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)ID_STATUS_CONNECTING, m_iStatus = m_iDesiredStatus);
-}
-
-void CSteamProto::OnStatusChanged(const NETLIBHTTPREQUEST *response, void *arg)
-{
- if (response == NULL)
- {
- m_iDesiredStatus = m_iStatus;
- ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_FAILED, (HANDLE)m_iStatus, m_iStatus);
- return;
- }
-
- JSONROOT root(response->pData);
-
- /*JSONNODE *node = json_get(root, "success");
- if (!json_as_bool(node)) {
- return;
- }
-
- JSONNODE *node = json_get(root, "error");
- ptrW error(json_as_string(node));
- if (lstrcmpi(error, L"OK")/* || response->resultCode == HTTP_STATUS_UNAUTHORIZED*//*)
- {
- // set status to offline
- m_iStatus = m_iDesiredStatus = ID_STATUS_OFFLINE;
- ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)ID_STATUS_CONNECTING, ID_STATUS_OFFLINE);
- return;
- }*/
-
- int new_status = (int)arg;
- int old_status = m_iStatus;
- m_iStatus = m_iDesiredStatus = new_status;
- ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)old_status, m_iStatus);
+#include "common.h" + +bool CSteamProto::IsOnline() +{ + return m_iStatus > ID_STATUS_OFFLINE && m_hPollingThread; +} + +bool CSteamProto::IsMe(const char *steamId) +{ + ptrA mySteamId(getStringA("SteamID")); + if (!lstrcmpA(steamId, mySteamId)) + return true; + + return false; +} + +void CSteamProto::OnGotRsaKey(const NETLIBHTTPREQUEST *response, void *arg) +{ + if (response == NULL) + return; + + // load rsa key parts + JSONROOT root(response->pData); + if (!root) + return; + + JSONNODE *node = json_get(root, "success"); + if (!json_as_bool(node)) { + return; + } + + node = json_get(root, "publickey_mod"); + ptrA modulus(mir_u2a(json_as_string(node))); + + // exponent "010001" is used as constant in CSteamProto::RsaEncrypt + /*node = json_get(root, "publickey_exp"); + ptrA exponent(mir_u2a(json_as_string(node)));*/ + + node = json_get(root, "timestamp"); + ptrA timestamp(mir_u2a(json_as_string(node))); + setString("Timestamp", timestamp); + + // encrcrypt password + ptrA base64RsaEncryptedPassword; + ptrA password(getStringA("Password")); + + DWORD error = 0; + DWORD encryptedSize = 0; + DWORD passwordSize = (DWORD)strlen(password); + if ((error = RsaEncrypt(modulus, password, NULL, encryptedSize)) != 0) + { + debugLogA("CSteamProto::OnGotRsaKey: encryption error (%lu)", error); + return; + } + + BYTE *encryptedPassword = (BYTE*)mir_calloc(encryptedSize); + if ((error = RsaEncrypt(modulus, password, encryptedPassword, encryptedSize)) != 0) + { + debugLogA("CSteamProto::OnGotRsaKey: encryption error (%lu)", error); + return; + } + + base64RsaEncryptedPassword = mir_base64_encode(encryptedPassword, encryptedSize); + mir_free(encryptedPassword); + + setString("EncryptedPassword", base64RsaEncryptedPassword); + + // run authorization request + ptrA username(mir_urlEncode(ptrA(mir_utf8encodeW(getWStringA("Username"))))); + + PushRequest( + new SteamWebApi::AuthorizationRequest(username, base64RsaEncryptedPassword, timestamp), + &CSteamProto::OnAuthorization); +} + +void CSteamProto::OnAuthorization(const NETLIBHTTPREQUEST *response, void *arg) +{ + if (response == NULL) { + SetStatus(ID_STATUS_OFFLINE); + return; + } + + JSONROOT root(response->pData); + + JSONNODE *node = json_get(root, "success"); + if (json_as_bool(node) == 0) + { + node = json_get(root, "message"); + const wchar_t *message = json_as_string(node); + if (!lstrcmpi(json_as_string(node), L"Incorrect login")) + { + ShowNotification(TranslateTS(message)); + SetStatus(ID_STATUS_OFFLINE); + return; + } + + node = json_get(root, "emailauth_needed"); + if (json_as_bool(node) > 0) + { + node = json_get(root, "emailsteamid"); + ptrA guardId(mir_u2a(json_as_string(node))); + + node = json_get(root, "emaildomain"); + ptrA emailDomain(mir_utf8encodeW(json_as_string(node))); + + GuardParam guard; + lstrcpyA(guard.domain, emailDomain); + + if (DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_GUARD), NULL, CSteamProto::GuardProc, (LPARAM)&guard) != 1) { + return; + } + + ptrA username(mir_urlEncode(ptrA(mir_utf8encodeW(getWStringA("Username"))))); + ptrA base64RsaEncryptedPassword(getStringA("EncryptedPassword")); + ptrA timestamp(getStringA("Timestamp")); + + PushRequest( + new SteamWebApi::AuthorizationRequest(username, base64RsaEncryptedPassword, timestamp, guardId, guard.code), + &CSteamProto::OnAuthorization); + } + + node = json_get(root, "captcha_needed"); + if (json_as_bool(node) > 0) + { + node = json_get(root, "captcha_gid"); + ptrA captchaId(mir_u2a(json_as_string(node))); + + char url[MAX_PATH]; + mir_snprintf(url, SIZEOF(url), STEAM_COM_URL "/public/captcha.php?gid=%s", captchaId); + + SteamWebApi::GetCaptchaRequest *request = new SteamWebApi::GetCaptchaRequest(url); + request->szUrl = (char*)request->url.c_str(); + NETLIBHTTPREQUEST *response = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)m_hNetlibUser, (LPARAM)request); + delete request; + + CaptchaParam captcha = { 0 }; + captcha.size = response->dataLength; + captcha.data = (BYTE*)mir_alloc(captcha.size); + memcpy(captcha.data, response->pData, captcha.size); + + CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)response); + + int res = DialogBoxParam( + g_hInstance, + MAKEINTRESOURCE(IDD_CAPTCHA), + NULL, + CSteamProto::CaptchaProc, + (LPARAM)&captcha); + + mir_free(captcha.data); + + if (res != 1) + { + SetStatus(ID_STATUS_OFFLINE); + return; + } + + ptrA username(mir_urlEncode(ptrA(mir_utf8encodeW(getWStringA("Username"))))); + ptrA base64RsaEncryptedPassword(getStringA("EncryptedPassword")); + ptrA timestamp(getStringA("Timestamp")); + + PushRequest( + new SteamWebApi::AuthorizationRequest(username, base64RsaEncryptedPassword, timestamp, "-1", "", captchaId, captcha.text), + &CSteamProto::OnAuthorization); + } + + return; + } + + node = json_get(root, "login_complete"); + if (!json_as_bool(node)) + { + SetStatus(ID_STATUS_OFFLINE); + return; + } + + node = json_get(root, "oauth"); + JSONROOT nroot(ptrA(mir_u2a(json_as_string(node)))); + + node = json_get(nroot, "steamid"); + ptrA steamId(mir_u2a(json_as_string(node))); + setString("SteamID", steamId); + + node = json_get(nroot, "oauth_token"); + ptrA token(mir_u2a(json_as_string(node))); + setString("TokenSecret", token); + + node = json_get(nroot, "webcookie"); + ptrA cookie(mir_u2a(json_as_string(node))); + + delSetting("Timestamp"); + delSetting("EncryptedPassword"); + + PushRequest( + new SteamWebApi::GetSessionRequest(token, steamId, cookie), + &CSteamProto::OnGotSession); + + PushRequest( + new SteamWebApi::LogonRequest(token), + &CSteamProto::OnLoggedOn); +} + +void CSteamProto::OnGotSession(const NETLIBHTTPREQUEST *response, void *arg) +{ + if (response == NULL) + return; + + for (int i = 0; i < response->headersCount; i++) + { + if (lstrcmpiA(response->headers[i].szName, "Set-Cookie")) + continue; + + std::string cookies = response->headers[i].szValue; + size_t start = cookies.find("sessionid=") + 10; + size_t end = cookies.substr(start).find(';'); + std::string sessionId = cookies.substr(start, end - start + 10); + setString("SessionID", sessionId.c_str()); + break; + } +} + +void CSteamProto::OnLoggedOn(const NETLIBHTTPREQUEST *response, void *arg) +{ + if (response == NULL) + { + // set status to offline + m_iStatus = m_iDesiredStatus = ID_STATUS_OFFLINE; + ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)ID_STATUS_CONNECTING, ID_STATUS_OFFLINE); + return; + } + + JSONROOT root(response->pData); + + JSONNODE *node = json_get(root, "error"); + ptrW error(json_as_string(node)); + if (lstrcmpi(error, L"OK")/* || response->resultCode == HTTP_STATUS_UNAUTHORIZED*/) + { + //delSetting("TokenSecret"); + //delSetting("Cookie"); + + // set status to offline + m_iStatus = m_iDesiredStatus = ID_STATUS_OFFLINE; + ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)ID_STATUS_CONNECTING, ID_STATUS_OFFLINE); + return; + } + + node = json_get(root, "umqid"); + setString("UMQID", ptrA(mir_u2a(json_as_string(node)))); + + node = json_get(root, "message"); + setDword("MessageID", json_as_int(node)); + + // load contact list + ptrA token(getStringA("TokenSecret")); + ptrA steamId(getStringA("SteamID")); + + PushRequest( + new SteamWebApi::GetFriendListRequest(token, steamId), + &CSteamProto::OnGotFriendList); + + // start polling thread + m_hPollingThread = ForkThreadEx(&CSteamProto::PollingThread, 0, NULL); + + // go to online now + ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)ID_STATUS_CONNECTING, m_iStatus = m_iDesiredStatus); }
\ No newline at end of file diff --git a/protocols/Steam/src/steam_contacts.cpp b/protocols/Steam/src/steam_contacts.cpp index 3bba9d6ac3..6ae9a913bf 100644 --- a/protocols/Steam/src/steam_contacts.cpp +++ b/protocols/Steam/src/steam_contacts.cpp @@ -120,24 +120,7 @@ void CSteamProto::UpdateContact(MCONTACT hContact, JSONNODE *data) WORD steamStatus = json_as_int(node); WORD status = SteamToMirandaStatus(steamStatus); if (hContact != NULL) - { - // contact status setWord(hContact, "Status", status); - } - else - { - // my status - // TODO: uncomment when invisible status is used in Steam proto - /*if (status == ID_STATUS_OFFLINE) - status = ID_STATUS_INVISIBLE;*/ - - if (status != ID_STATUS_OFFLINE) - { - int old_status = m_iStatus; - m_iStatus = m_iDesiredStatus = status; - ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)old_status, m_iStatus); - } - } node = json_get(data, "gameid"); DWORD gameId = node ? atol(_T2A(json_as_string(node))) : 0; @@ -156,7 +139,8 @@ void CSteamProto::UpdateContact(MCONTACT hContact, JSONNODE *data) { if (hContact != NULL) db_unset(hContact, "CList", "StatusMsg"); - + + delSetting(hContact, "GameInfo"); delSetting(hContact, "GameID"); } } diff --git a/protocols/Steam/src/steam_proto.cpp b/protocols/Steam/src/steam_proto.cpp index 36592a4082..778c9f95ee 100644 --- a/protocols/Steam/src/steam_proto.cpp +++ b/protocols/Steam/src/steam_proto.cpp @@ -204,7 +204,7 @@ DWORD_PTR __cdecl CSteamProto:: GetCaps(int type, MCONTACT hContact) case PFLAGNUM_4: return PF4_AVATARS | PF4_NOCUSTOMAUTH | PF4_NOAUTHDENYREASON | PF4_FORCEAUTH | PF4_FORCEADDED | PF4_IMSENDUTF | PF4_SUPPORTIDLE;// | PF4_IMSENDOFFLINE | PF4_SUPPORTTYPING; case PFLAGNUM_5: - return 0; + return PF2_SHORTAWAY | PF2_LONGAWAY | PF2_HEAVYDND | PF2_OUTTOLUNCH | PF2_FREEFORCHAT; case PFLAG_UNIQUEIDTEXT: return (DWORD_PTR)Translate("SteamID"); case PFLAG_UNIQUEIDSETTING: @@ -326,15 +326,10 @@ int CSteamProto::SetStatus(int new_status) // Routing statuses not supported by Steam switch (new_status) { - case ID_STATUS_OCCUPIED: - new_status = ID_STATUS_DND; - break; - - case ID_STATUS_ONTHEPHONE: - new_status = ID_STATUS_AWAY; + case ID_STATUS_OFFLINE: break; - case ID_STATUS_INVISIBLE: + default: new_status = ID_STATUS_ONLINE; break; } @@ -368,16 +363,6 @@ int CSteamProto::SetStatus(int new_status) //ForkThread(&CSteamProto::LogInThread, NULL); StartQueue(); } - else { - ptrA token(getStringA("TokenSecret")); - ptrA sessionId(getStringA("SessionID")); - int state = MirandaToSteamState(new_status); - - PushRequest( - new SteamWebApi::SetStatusRequest(token, sessionId, state), - &CSteamProto::OnStatusChanged, - (void *)new_status); - } return 0; } diff --git a/protocols/Steam/src/steam_proto.h b/protocols/Steam/src/steam_proto.h index 95832418fe..82dd4f925b 100644 --- a/protocols/Steam/src/steam_proto.h +++ b/protocols/Steam/src/steam_proto.h @@ -188,7 +188,6 @@ protected: void OnGotSession(const NETLIBHTTPREQUEST *response, void *arg); void OnLoggedOn(const NETLIBHTTPREQUEST *response, void *arg); - void OnStatusChanged(const NETLIBHTTPREQUEST *response, void *arg); // contacts void SetContactStatus(MCONTACT hContact, WORD status); |