diff options
-rw-r--r-- | protocols/VKontakte/src/vk_queue.cpp | 70 | ||||
-rw-r--r-- | protocols/VKontakte/src/vk_thread.cpp | 26 |
2 files changed, 45 insertions, 51 deletions
diff --git a/protocols/VKontakte/src/vk_queue.cpp b/protocols/VKontakte/src/vk_queue.cpp index aeaf052028..5fbbff50df 100644 --- a/protocols/VKontakte/src/vk_queue.cpp +++ b/protocols/VKontakte/src/vk_queue.cpp @@ -35,46 +35,42 @@ void CVkProto::UninitQueue() void CVkProto::ExecuteRequest(AsyncHttpRequest *pReq)
{
CMStringA str;
-
-LBL_Restart:
- pReq->bNeedsRestart = false;
- pReq->szUrl = pReq->m_szUrl.GetBuffer();
- if (!pReq->m_szParam.IsEmpty()) {
- if (pReq->requestType == REQUEST_GET) {
- str.Format("%s?%s", pReq->m_szUrl, pReq->m_szParam);
- pReq->szUrl = str.GetBuffer();
+ do {
+ pReq->bNeedsRestart = false;
+ pReq->szUrl = pReq->m_szUrl.GetBuffer();
+ if (!pReq->m_szParam.IsEmpty()) {
+ if (pReq->requestType == REQUEST_GET) {
+ str.Format("%s?%s", pReq->m_szUrl, pReq->m_szParam);
+ pReq->szUrl = str.GetBuffer();
+ }
+ else {
+ pReq->pData = mir_strdup(pReq->m_szParam.GetBuffer());
+ pReq->dataLength = pReq->m_szParam.GetLength();
+ }
}
- else {
- pReq->pData = mir_strdup(pReq->m_szParam.GetBuffer());
- pReq->dataLength = pReq->m_szParam.GetLength();
+ debugLogA("CVkProto::ExecuteRequest \n====\n%s\n====\n", pReq->szUrl);
+ NETLIBHTTPREQUEST *reply = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)m_hNetlibUser, (LPARAM)pReq);
+ if (reply != NULL) {
+ if (pReq->m_pFunc != NULL)
+ (this->*(pReq->m_pFunc))(reply, pReq); // may be set pReq->bNeedsRestart
+ CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)reply);
}
- }
-
- debugLogA("CVkProto::ExecuteRequest \n====\n%s\n====\n", pReq->szUrl);
- NETLIBHTTPREQUEST *reply = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)m_hNetlibUser, (LPARAM)pReq);
- if (reply != NULL) {
- if (pReq->m_pFunc != NULL)
- (this->*(pReq->m_pFunc))(reply, pReq);
-
- CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)reply);
- if (pReq->bNeedsRestart)
- goto LBL_Restart;
- }
- else if (pReq->bIsMainConn) {
- if (m_iStatus >= ID_STATUS_CONNECTING && m_iStatus < ID_STATUS_CONNECTING + MAX_CONNECT_RETRIES)
- ConnectionFailed(LOGINERR_NONETWORK);
- else if (pReq->m_iRetry){
- pReq->bNeedsRestart = true;
- Sleep(1000); //Pause for fix err
- pReq->m_iRetry--;
- debugLogA("CVkProto::ExecuteRequest restarting retry = %d", MAX_RETRIES - pReq->m_iRetry);
- goto LBL_Restart;
- }
- else{
- debugLogA("CVkProto::ExecuteRequest ShutdownSession");
- ShutdownSession();
+ else if (pReq->bIsMainConn) {
+ if (m_iStatus >= ID_STATUS_CONNECTING && m_iStatus < ID_STATUS_CONNECTING + MAX_CONNECT_RETRIES)
+ ConnectionFailed(LOGINERR_NONETWORK);
+ else if (pReq->m_iRetry){
+ pReq->bNeedsRestart = true;
+ Sleep(1000); //Pause for fix err
+ pReq->m_iRetry--;
+ debugLogA("CVkProto::ExecuteRequest restarting retry = %d", MAX_RETRIES - pReq->m_iRetry);
+ }
+ else{
+ debugLogA("CVkProto::ExecuteRequest ShutdownSession");
+ ShutdownSession();
+ }
}
- }
+ debugLogA("CVkProto::ExecuteRequest pReq->bNeedsRestart = %d", (int)pReq->bNeedsRestart);
+ } while (pReq->bNeedsRestart);
delete pReq;
}
diff --git a/protocols/VKontakte/src/vk_thread.cpp b/protocols/VKontakte/src/vk_thread.cpp index a925887b68..326833dc79 100644 --- a/protocols/VKontakte/src/vk_thread.cpp +++ b/protocols/VKontakte/src/vk_thread.cpp @@ -50,10 +50,11 @@ void CVkProto::ConnectionFailed(int iReason) static VOID CALLBACK TimerProc(HWND, UINT, UINT_PTR, DWORD)
{
- for (int i = 0; i < vk_Instances.getCount(); i++){
- vk_Instances[i]->SetServerStatus(vk_Instances[i]->m_iDesiredStatus);
- vk_Instances[i]->RetrieveUsersInfo(true);
- }
+ for (int i = 0; i < vk_Instances.getCount(); i++)
+ if (vk_Instances[i]->IsOnline()){
+ vk_Instances[i]->SetServerStatus(vk_Instances[i]->m_iDesiredStatus);
+ vk_Instances[i]->RetrieveUsersInfo(true);
+ }
}
static void CALLBACK VKSetTimer(void *pObject)
@@ -95,7 +96,7 @@ void CVkProto::OnLoggedOut() bool bOnline = false;
for (int i=0; i < vk_Instances.getCount(); i++)
- bOnline = bOnline && vk_Instances[i]->IsOnline();
+ bOnline = bOnline || vk_Instances[i]->IsOnline();
if(!bOnline)
CallFunctionAsync(VKUnsetTimer, this);
SetAllContactStatuses(ID_STATUS_OFFLINE);
@@ -182,8 +183,7 @@ void CVkProto::OnOAuthAuthorize(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pReq return;
}
- if (reply->resultCode != 200) { // something went wrong
-LBL_NoForm:
+ if (reply->resultCode != 200 || !strstr(reply->pData, "form method=\"post\"")){ // something went wrong
ConnectionFailed(LOGINERR_NOSERVER);
return;
}
@@ -192,16 +192,14 @@ LBL_NoForm: ConnectionFailed(LOGINERR_WRONGPASSWORD);
return;
}
-
- // Application requests access to user's account
- if (!strstr(reply->pData, "form method=\"post\""))
- goto LBL_NoForm;
-
+
CMStringA szAction, szBody;
bool bSuccess = AutoFillForm(reply->pData, szAction, szBody);
if (!bSuccess || szAction.IsEmpty() || szBody.IsEmpty()) {
- if (m_prevError)
- goto LBL_NoForm;
+ if (m_prevError){
+ ConnectionFailed(LOGINERR_NOSERVER);
+ return;
+ }
m_prevError = true;
}
|