126 lines
2.4 KiB
C++
126 lines
2.4 KiB
C++
#include "./commandWinampAuth.h"
|
|
#include "./resultWinampAuth.h"
|
|
|
|
|
|
LoginCommandWinampAuth::LoginCommandWinampAuth()
|
|
: ref(1)
|
|
{
|
|
}
|
|
|
|
LoginCommandWinampAuth::~LoginCommandWinampAuth()
|
|
{
|
|
|
|
}
|
|
|
|
HRESULT LoginCommandWinampAuth::CreateInstance(LoginCommandWinampAuth **instance)
|
|
{
|
|
if (NULL == instance) return E_POINTER;
|
|
*instance = new LoginCommandWinampAuth();
|
|
if (NULL == *instance) return E_OUTOFMEMORY;
|
|
return S_OK;
|
|
}
|
|
|
|
ULONG LoginCommandWinampAuth::AddRef()
|
|
{
|
|
return InterlockedIncrement((LONG*)&ref);
|
|
}
|
|
|
|
ULONG LoginCommandWinampAuth::Release()
|
|
{
|
|
if (0 == ref)
|
|
return ref;
|
|
|
|
LONG r = InterlockedDecrement((LONG*)&ref);
|
|
if (0 == r)
|
|
delete(this);
|
|
|
|
return r;
|
|
}
|
|
|
|
HRESULT LoginCommandWinampAuth::GetType(GUID *commandUid)
|
|
{
|
|
if (NULL == commandUid) return E_INVALIDARG;
|
|
*commandUid = LCUID_WINAMPAUTH;
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT LoginCommandWinampAuth::SetParameter(LPCWSTR pszKey, LPCWSTR pszValue)
|
|
{
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
HRESULT LoginCommandWinampAuth::IsValid()
|
|
{
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT LoginCommandWinampAuth::IsIdentical(LoginCommand *test)
|
|
{
|
|
if (NULL == test)
|
|
return E_INVALIDARG;
|
|
|
|
GUID typeId;
|
|
if (FAILED(test->GetType(&typeId)) || FALSE == IsEqualGUID(LCUID_WINAMPAUTH, typeId))
|
|
return S_FALSE;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
HRESULT LoginCommandWinampAuth::BeginLogin(LoginData *data, LoginResult::Callback callback, void *user, LoginResult **result)
|
|
{
|
|
LoginResultWinampAuth *winampAuth;
|
|
HRESULT hr = LoginResultWinampAuth::CreateInstance(data, callback, user, &winampAuth);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
if (NULL != result)
|
|
*result = winampAuth;
|
|
else
|
|
winampAuth->Release();
|
|
}
|
|
else
|
|
{
|
|
if (NULL != result)
|
|
*result = NULL;
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT LoginCommandWinampAuth::EndLogin(LoginResult *result, INT *authCode, LoginCredentials **credentials)
|
|
{
|
|
if (NULL == result)
|
|
return E_INVALIDARG;
|
|
|
|
HRESULT hr = result->IsCompleted();
|
|
if (S_OK != hr)
|
|
{
|
|
HANDLE completed;
|
|
hr = result->GetWaitHandle(&completed);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
WaitForSingleObjectEx(completed, INFINITE, TRUE);
|
|
CloseHandle(completed);
|
|
}
|
|
}
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
LoginResultWinampAuth *winampAuth;
|
|
hr = result->QueryInterface(LCUID_WINAMPAUTH, (void**)&winampAuth);
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
hr = winampAuth->GetResult(authCode, credentials);
|
|
winampAuth->Release();
|
|
}
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT LoginCommandWinampAuth::RequestAbort(LoginResult *result, BOOL drop)
|
|
{
|
|
if (NULL == result) return E_INVALIDARG;
|
|
return result->RequestAbort(drop);
|
|
}
|