Example #1
0
STDMETHODIMP Profile::get_OfficePhone(BSTR* pVal)
{
	try {
		WCHAR * pResult = gSkypeQueue.RetrieveProperty(L"PROFILE", L"", L"PHONE_OFFICE");
		*pVal = SysAllocString(pResult);
		free(pResult);
		return S_OK;
	} catch (const WCHAR * err) {
		return AtlReportError(GetObjectCLSID(), err, GUID_NULL, E_FAIL);
	}
}
Example #2
0
STDMETHODIMP Profile::put_Birthday(DATE newVal)
{
	try {
		CDateTime dt = newVal;
		_bstr_t bstrDate = dt.Format("%Y%m%d");

		gSkypeQueue.SetProperty(L"PROFILE", L"", L"BIRTHDAY", bstrDate);
		return S_OK;
	} catch (const WCHAR * err) {
		return AtlReportError(GetObjectCLSID(), err, GUID_NULL, E_FAIL);
	}
}
Example #3
0
STDMETHODIMP Profile::put_ForwardingRules(SAFEARRAY * newVal)
{
	try {
		VARTYPE vt = VT_UNKNOWN;
		SafeArrayGetVartype(newVal, & vt);
		UINT uiDim = SafeArrayGetDim(newVal);
		if((uiDim != 1) || (vt != VT_RECORD)) {
			return AtlReportError(GetObjectCLSID(), L"Array of rules must be single dimension array of strings", GUID_NULL, E_INVALIDARG);
		}

		HRESULT hr = SafeArrayLock(newVal);
		if(FAILED(hr)) {
			return AtlReportError(GetObjectCLSID(), L"Unable to lock array", GUID_NULL, E_FAIL);
		}

		wstring wstrItems;
		ForwardingRule * pItems = (ForwardingRule *) newVal->pvData;
		for(ULONG l = 0; l < newVal->rgsabound[0].cElements; l++) {
			WCHAR start[32], end[32];
			_ltow_s(pItems[l].StartTime, start, sizeof(start)/sizeof(start[0]), 10);
			_ltow_s(pItems[l].EndTime, end, sizeof(end)/sizeof(end[0]), 10);
			if(l > 0) {
				wstrItems += L" ";
			}
			wstrItems += start;
			wstrItems += L",";
			wstrItems += end;
			wstrItems += L",";
			wstrItems += pItems[l].Handle;
		}

		SafeArrayUnlock(newVal);
		gSkypeQueue.SetProperty(L"PROFILE", L"", L"CALL_FORWARD_RULES", wstrItems.c_str());
		return S_OK;
	} catch (const WCHAR * err) {
		return AtlReportError(GetObjectCLSID(), err, GUID_NULL, E_FAIL);
	}
}
Example #4
0
// This is called when the user first loads the add-in, and on start-up
//  of each subsequent Developer Studio session
STDMETHODIMP CDSAddIn::OnConnection(IApplication* pApp, VARIANT_BOOL bFirstTime,
		long dwCookie, VARIANT_BOOL* OnConnection)
{
  HRESULT result = S_OK;

  try
  {
    CComPtr< IUnknown> pIUnk;

	  AFX_MANAGE_STATE(AfxGetStaticModuleState());

    cex_ = _Module.GetClassObject( GetObjectCLSID(), IID_IUnknown, reinterpret_cast<void**>(&pIUnk));

    cex_ = CoRegisterClassObject( 
      GetObjectCLSID(),
      pIUnk,
      CLSCTX_LOCAL_SERVER,
      REGCLS_MULTIPLEUSE,
      &classRegistrationId_
      );

    pIApp_ = pApp;

    m_dwCookie = dwCookie;
    *OnConnection = VARIANT_TRUE;
  }
  catch( const std::bad_cast&)
  {
    *OnConnection = VARIANT_FALSE;
  }
  catch( const _com_error&)
  {
    *OnConnection = VARIANT_FALSE;
  }

  return result;
}
HRESULT CTCPropBagOnRegKey::_CreateLocalObject(const _bstr_t& strName,
  IUnknown** ppunkObj, IErrorLog* pErrorLog, IUnknown* punkOuter)
{
  // Read the CLSID of the object saved on the specified subkey
  CLSID clsid;
  CRegKey subkey;
  _bstr_t strObjectID;
  HRESULT hr = GetObjectCLSID(strName, clsid, subkey, strObjectID,
    pErrorLog);
  if (FAILED(hr))
    return hr;

  // Create the object
  DWORD dwCtx = CLSCTX_ALL | CLSCTX_REMOTE_SERVER;
  IPersistPropertyBagPtr pppb;
  void** ppv = reinterpret_cast<void**>(&pppb);
  hr = CoCreateInstance(clsid, punkOuter, dwCtx, __uuidof(pppb), ppv);
  if (E_INVALIDARG == hr)
  {
    dwCtx &= ~CLSCTX_REMOTE_SERVER;
    hr = CoCreateInstance(clsid, punkOuter, dwCtx, __uuidof(pppb), ppv);
  }
  if (FAILED(hr))
  {
    // Use local resources
    MCLibRes res;

    // Format a description string
    _bstr_t strDesc;
    strDesc.Format(IDS_FMT_FAIL_CREATE_CLSID, strObjectID);

    // Log the error
    USES_CONVERSION;
    return LogError("CreateObject", strDesc, hr, T2COLE(strName), pErrorLog);
  }

  // Load the object's persistent properties
  CComObjectStack<CTCPropBagOnRegKey> bag;
  bag.Init(subkey, strName, this);
  hr = pppb->Load(&bag, pErrorLog);
  if (FAILED(hr))
    return hr;

  // Detach the IUnknown* and copy to the [out] parameter, don't Release it
  *ppunkObj = pppb.Detach();

  // Indicate success
  return S_OK;
}
Example #6
0
STDMETHODIMP Profile::get_RingtoneFileName(/*[in]*/ SkypeRingtone Tone, /*[in, out]*/ BSTR * FileName)
{
	CHECK_PROTOCOL(5)
	CHECK_RINGTONE(Tone)

	WCHAR wstrCmd[32], wstrResponse[32];
	try {
		swprintf_s(wstrCmd, sizeof(wstrCmd)/sizeof(wstrCmd[0]), L"GET RINGTONE %d", Tone);
		swprintf_s(wstrResponse, sizeof(wstrResponse)/sizeof(wstrResponse[0]), L"RINGTONE %d ", Tone);
		WCHAR * pResponse = gSkypeQueue.ExecuteBlockingCommand(wstrCmd, wstrResponse);
		*FileName = SysAllocString(pResponse);
		free(pResponse);
		return S_OK;
	} catch (const WCHAR * err) {
		return AtlReportError(GetObjectCLSID(), err, GUID_NULL, E_FAIL);
	}
}
Example #7
0
STDMETHODIMP Profile::get_RingtoneStatus(/*[in]*/ SkypeRingtone Tone, /*[out, retval]*/ VARIANT_BOOL *pVal)
{
	CHECK_PROTOCOL(5)
	CHECK_RINGTONE(Tone)

	WCHAR wstrCmd[32], wstrResponse[32];
	try {
		swprintf_s(wstrCmd, sizeof(wstrCmd)/sizeof(wstrCmd[0]), L"GET RINGTONE %d STATUS", Tone);
		swprintf_s(wstrResponse, sizeof(wstrResponse)/sizeof(wstrResponse[0]), L"RINGTONE %d ", Tone);

		WCHAR * pResponse = gSkypeQueue.ExecuteBlockingCommand(wstrCmd, wstrResponse);
		*pVal = (wcsstr(pResponse, L" ON") != NULL);
		free(pResponse);
		return S_OK;
	} catch (const WCHAR * err) {
		return AtlReportError(GetObjectCLSID(), err, GUID_NULL, E_FAIL);
	}
}
Example #8
0
STDMETHODIMP Profile::get_Birthday(DATE* pVal)
{
	LONG yy, mm, dd;
	BOOL bOk = FALSE;

	try {
		WCHAR * pStrBirthdate = gSkypeQueue.RetrieveProperty(L"PROFILE", L"", L"BIRTHDAY");
		if(swscanf_s(pStrBirthdate, L"%04d%02d%02d", & yy, & mm, &dd) == 3) {
			OleDateFromTm((WORD) yy, (WORD) mm, (WORD) dd, 0, 0, 0, * pVal);
			bOk = TRUE;
		}
		free(pStrBirthdate);
		return bOk;		// 未入力の場合もエラーとしない。
		//return bOk ? S_OK : AtlReportError(GetObjectCLSID(), L"Invalid birthday in user Profile", GUID_NULL, E_FAIL);
	} catch(const WCHAR * err) {
		return AtlReportError(GetObjectCLSID(), err, GUID_NULL, E_FAIL);
	}
}
Example #9
0
STDMETHODIMP Profile::put_Sex(SkypeUserSex newVal)
{
	try {
		CComObject<Conversion> * objConvert;
		HRESULT hr = CComObject<Conversion>::CreateInstance(& objConvert);
		if(SUCCEEDED(hr)) {
			BSTR bstrText;
			hr = objConvert->SkypeUserSexAsText(newVal, & bstrText);
			if(SUCCEEDED(hr)) {
				gSkypeQueue.SetProperty(L"PROFILE", L"", L"SEX", bstrText);
				SysFreeString(bstrText);
			}
		}
		return hr;
	} catch (const WCHAR * err) {
		return AtlReportError(GetObjectCLSID(), err, GUID_NULL, E_FAIL);
	}
}
Example #10
0
STDMETHODIMP Profile::put_AvatarFileName(/*[in]*/ LONG Index, /*[in]*/ BSTR FileName)
{
	CHECK_PROTOCOL(5)

	WCHAR wstrBuffer[32];

	try {
		wstring wstrCmd = L"SET AVATAR ";
		wstrCmd += _ltow_s(Index, wstrBuffer, sizeof(wstrBuffer)/sizeof(wstrBuffer[0]), 10);
		wstrCmd += L" ";
		wstrCmd += FileName;
		
		WCHAR * pResult = gSkypeQueue.ExecuteBlockingCommand(wstrCmd.c_str(), L"AVATAR");
		free(pResult);
		return S_OK;
	} catch (const WCHAR * err) {
		return AtlReportError(GetObjectCLSID(), err, GUID_NULL, E_FAIL);
	}
}
Example #11
0
STDMETHODIMP Profile::put_RingtoneFileName(/*[in]*/ SkypeRingtone Tone, /*[in]*/ BSTR FileName)
{
	CHECK_PROTOCOL(5)
	CHECK_RINGTONE(Tone)

	WCHAR wstrBuffer[32];

	try {
		wstring wstrCmd = L"SET RINGTONE ";
		wstrCmd += _ltow_s(Tone, wstrBuffer, sizeof(wstrBuffer)/sizeof(wstrBuffer[0]), 10);
		wstrCmd += L" ";
		wstrCmd += FileName;
		
		WCHAR * pResult = gSkypeQueue.ExecuteBlockingCommand(wstrCmd.c_str(), L"RINGTONE");
		free(pResult);
		return S_OK;
	} catch (const WCHAR * err) {
		return AtlReportError(GetObjectCLSID(), err, GUID_NULL, E_FAIL);
	}
}
Example #12
0
/*
 * Connects to the Maya command port, if not already connected.
 *
 * Return Value
 *   Returns S_OK if successful or already connected,
 *   or an error value otherwise.
 */
STDMETHODIMP CMELCommand::Connect(void)
{
	if (m_socket != INVALID_SOCKET)
		// already connected!
		return S_OK;

	// initialize Windows Sockets 2
	WSADATA wsaData;
	if (WSAStartup(MAKEWORD(2, 0), &wsaData) == 0)
	{
		CW2A pszPortName(m_strPortName);
		m_socket = ConnectToMayaCommandPortByName(pszPortName);
		if (m_socket != INVALID_SOCKET)
			return S_OK;
	}
	WSACleanup();

	CAtlString strError = L"Unable to connect to command port: ";
	strError += m_strPortName;
	return AtlReportError(GetObjectCLSID(), strError, IID_IMELCommand);
}
STDMETHODIMP ChatMessageCollection::get_Item(VARIANT index, IChatMessage ** pRetVal)
{
	if (pRetVal == NULL)
		return E_POINTER;

	VARIANT vIndex;
	VariantInit(& vIndex);
	VariantChangeType(& vIndex, & index, 0, VT_I4);

	long lCtr = 0;
	for(ChatMessageList::iterator it = m_itemList.begin(); it != m_itemList.end(); it++) {
		if(++lCtr == vIndex.lVal) {
			CComObject<ChatMessage> * ptrChatMessage;
			if(SUCCEEDED(CComObject<ChatMessage>::CreateInstance(& ptrChatMessage))) {
				ptrChatMessage->SetID(*it);
				return ptrChatMessage->QueryInterface(pRetVal);
			}
		}
	}

	return AtlReportError(GetObjectCLSID(), "Index not within collection bounds", GUID_NULL, E_INVALIDARG);
}
// IPersist
STDMETHODIMP CMyMath::GetClassID(/*[out]*/CLSID * pClassID)
{
    *pClassID = GetObjectCLSID();
    return S_OK;
}
Example #15
0
STDMETHODIMP Profile::get_ForwardingRules(SAFEARRAY ** pVal)
{
	try {
		WCHAR * pResult = gSkypeQueue.RetrieveProperty(L"PROFILE", L"", L"CALL_FORWARD_RULES");
		size_t sz = wcslen(pResult) + 1;
		WCHAR * pCopy = new WCHAR[sz];

		long lTotal=0, lCtr=0;
		HRESULT hr;
		ForwardingRule * pItems;

		for(int i = 0; i < 2; i++) {
			wcscpy_s(pCopy, sz, pResult);
			WCHAR *next_token = NULL;
			WCHAR * pItem = wcstok_s(pCopy, L" ", &next_token);
			while(pItem != NULL) {
				size_t iLen = wcslen(pItem);
				if(iLen > 0) {
					LONG start;
					LONG end;
					WCHAR * name = new WCHAR[iLen];

					bool bValid = 
						swscanf_s(pItem, L"%d,%d,%s", & start, & end, name, iLen) == 3;

					if(bValid) {
						if(i == 0) {
							lTotal++;
						} else {
							pItems[lCtr].StartTime = start;
							pItems[lCtr].EndTime = end;
							pItems[lCtr].Handle = SysAllocString(name);
							lCtr++;
						}
					}

					delete(name);
				}
				pItem = wcstok_s(NULL, L" ", &next_token);
			}

			if(i == 0) {
				SAFEARRAYBOUND sba;
				sba.cElements = lTotal;
				sba.lLbound = 0;

				CComPtr<IRecordInfo> *ptrRecInfo;

				hr = GetRecordInfoFromGuids(CAtlModule::m_libid, 1, 0, 0x409,
					__uuidof(ForwardingRule), (IRecordInfo**) & ptrRecInfo);

				if(FAILED(hr)) {
					return AtlReportError(GetObjectCLSID(), L"Unable to retrieve structure info", GUID_NULL, E_FAIL);				
				}
					
				*pVal = SafeArrayCreateEx(VT_RECORD, 1, & sba, ptrRecInfo);
				if((*pVal) == NULL) {
					return AtlReportError(GetObjectCLSID(), L"Unable to create array", GUID_NULL, E_FAIL);
				}

				hr = SafeArrayLock(*pVal);
				if(FAILED(hr)) {
					return AtlReportError(GetObjectCLSID(), L"Unable to lock array", GUID_NULL, E_FAIL);
				}

				pItems = (ForwardingRule *) (*pVal)->pvData;

			} else {
				hr = SafeArrayUnlock(*pVal);
				if(FAILED(hr)) {
					return AtlReportError(GetObjectCLSID(), L"Unable to unlock array", GUID_NULL, E_FAIL);
				}
			}
		}

		free(pResult);
		return S_OK;
	} catch (const WCHAR * err) {
		return AtlReportError(GetObjectCLSID(), err, GUID_NULL, E_FAIL);
	}

	return S_OK;
}
STDMETHODIMP CImpCEDL::DownloadSelect(long lHWND,BSTR sUser)
{
   	HRESULT hr = S_OK;
    HWND hwndParent = NULL;
    CWnd *pWnd = NULL;
	CStation *pStation = NULL;
	CDLUpdateDlg* pDlg = NULL;
    CComBSTR sTargetName = _T("");

	AFX_MANAGE_STATE(AfxGetStaticModuleState())
    FC_DEBUGPRINT1(_T("CEDL> DownloadSelect: thread id=0x%x\n"),::GetCurrentThreadId());

	try {
	    if (!m_bInit) {
		    FC_DEBUGPRINT (_T ("CEDL> DownloadSelect: not initialized\n"));
            ComThrow(GetObjectCLSID(),__uuidof(IDL),E_CE_DL_NOT_INITED);

	    }
		pStation = m_pStationList->FindStationByIndex(0,true);
		if(!pStation) {
			FC_DEBUGPRINT(_T("CEDL> DownloadSelect: Station not found\n"));
            ComThrow(GetObjectCLSID(),__uuidof(IDL),E_CE_DL_STATION_NOT_FOUND);
		}

        pWnd = new CWnd();
        if(!pWnd) {
            AfxThrowMemoryException();
        }
        
        hwndParent = reinterpret_cast<HWND>(lHWND);
        if(!::IsWindow(hwndParent)) {
            hwndParent = NULL;
        }

        pWnd->Attach(hwndParent);
        pDlg = new CDLUpdateDlg(pWnd);
		if(!pDlg) {
			AfxThrowMemoryException();
		}
    
		pDlg->SetStation(pStation);
		assert(m_pEvents != NULL);
		pDlg->SetEventPtr(m_pEvents);
		pDlg->DoModal();
		
	}
	catch(CMemoryException* e) {
		hr = E_OUTOFMEMORY;
		e->Delete();
	}
    catch(_com_error err) {
        Fire_OnNewMessage(sTargetName,E_FACILITY_CEDL,err.Error(),err.Description());
        hr = ComCatch(err);
    }

    if(pWnd) {
        pWnd->Detach();
        delete pWnd;
    }
    
    if(pDlg) {
		delete(pDlg);
	}

    FC_RELEASE_PTR(pStation);
	return hr;
}
STDMETHODIMP CImpCEDL::Init(BSTR sTargetName, BSTR sGenPath,BOOL bSilent)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())
	HRESULT hr = S_OK;
	CString strPath,strSrc,strDest,strTarget;
	CFileStatus rStatus;
    PIDLEvents pEvntSink;
    PICEMsg pMsgSink;
    IErrorInfo* pInfo = NULL;
    DWORD dwErr = 0UL;
	
	// Enforce using of DAO36 and Jet40 by mfc42.dll
	AfxGetModuleState()->m_dwVersion = 0x0601;
    //EF don't call this: causes an zombie process! AfxDaoInit();

	FC_DEBUGPRINT1(_T("CEDL> Init: thread id=0x%x\n"),::GetCurrentThreadId());

    try { 
        if(!sTargetName || !sGenPath) {
            ComThrow(GetObjectCLSID(),__uuidof(IDL),E_POINTER);
        }

        strTarget = sTargetName;
        strPath = sGenPath;
	    strSrc = strPath + _T('\\') + strTarget;

        //create own event sink - not created if already done
        CreateEvntSink();

        //check for the target specific gen path first
	    if(!CFile::GetStatus(strSrc,rStatus)) {
            ComThrow(GetObjectCLSID(),__uuidof(IDL),E_CE_DL_NOGENPATH,strSrc,strTarget);
        }

        //create downloader directory within target specific gen path if
        //not already created
        strSrc = strSrc + _T('\\') + CEDL_DOMDIR;

	    if(!CFile::GetStatus(strSrc,rStatus)) {
		    //create a new dir
            if(_tmkdir(strSrc)) {
                //on error throw file exception with path
                dwErr = GetLastError();
                CFileException::ThrowOsError(dwErr,strSrc);
		    }
        }

        CStationList::CopyDatabase(strTarget,sGenPath,false);
        //get the path of the current database
        CStationList::GetDBPath(strDest,strTarget,sGenPath);
    

        pEvntSink = dynamic_cast <CProxyIDLEvents<CImpCEDL>*>(this);
        assert(pEvntSink);
        pMsgSink = dynamic_cast <CProxy_ICEMessageEvent<CImpCEDL>*>(this);    
        assert(pMsgSink);

        /* TODO CHECK OBSOLETE
        if(m_pStationList) { //station list there - reinitialization
            //station list there but represents not the same project ?
            if(strGUID != m_pStationList->GetProjectGuid()) {
                /*  not the same project return downloader already inited.
                    a different project requires a call to Exit before reinit
                    downloader 
                return E_CE_DL_ALREADY_INITED;
            }

            /*  iff any download is pending and state not CEDL_STAT_IDLE
                reinitialization is not possible

            if(m_pStationList->IsDownloadPending()) {
                return E_CE_DL_PENDING;
            }

            //check wether downloader database is open.
            if(!m_pStationList->IsDBOpen()) { //reopen it iff not open
	            m_pStationList->OpenDB();
            }

            if(!m_pStationList->CheckDBVersion()) {
                //close db first
                m_pStationList->CloseDB();
                CStationList::CopyDatabase(sGenPath,true);
                //reopen
                m_pStationList->OpenDB();
            }

        }
        */

	    m_pStationList = new CStationList(strPath,strDest);
	    if(!m_pStationList) {
		    AfxThrowMemoryException();
	    }

	    m_pStationList->OpenDB();

        if(!m_pStationList->CheckDBVersion()) {
            //close db first
            m_pStationList->CloseDB();
            CStationList::CopyDatabase(strTarget,sGenPath,true);
            //reopen
            m_pStationList->OpenDB();
        }
         
        m_pStationList->BuildStationList(sTargetName,pEvntSink,pMsgSink, bSilent?true:false);
    }
    catch(_com_error err) {
        Fire_OnNewMessage(NULL,E_FACILITY_CEDL,err.Error(),err.Description());
        ComCatch(err);
		hr = err.Error();
    }
    catch(CMemoryException* e) {
        e->Delete();
        hr = E_OUTOFMEMORY;
    }
	catch(CDaoException* e) {
        hr = e->m_scode;

        strDest.Empty();
        if(e->m_pErrorInfo) {
            strDest = e->m_pErrorInfo->m_strDescription;
        }

        if(strDest.IsEmpty()) {
            strDest.Format(IDS_CEDL_DEFERROR,hr);
        }

        ComErrorInfo(GetObjectCLSID(),__uuidof(IDL),&pInfo,strDest);
        _com_error err(hr,pInfo);
        
        Fire_OnNewMessage(NULL,E_FACILITY_CEDL,err.Error(),err.Description());
        e->Delete();
        ComCatch(err);
    }
	catch(CFileException * e) {
		hr = HRESULT_FROM_WIN32(e->m_lOsError);
        strDest.Empty();
        strSrc.Empty();

        FormatMsg(strSrc.GetBuffer(_MAX_PATH),hr);
        strSrc.ReleaseBuffer();

        if(strSrc.IsEmpty()) {
            strSrc.Format(IDS_CEDL_DEFERROR,hr);
        }
        strSrc.TrimRight(_T("\r\n"));

        FormatMsg(strDest.GetBuffer(_MAX_PATH),E_CE_DL_FILE_ERROR,strTarget,
            strSrc,e->m_strFileName);
        strDest.ReleaseBuffer();

        ComErrorInfo(GetObjectCLSID(),__uuidof(IDL),&pInfo,strDest);
        _com_error err(hr,pInfo);
        
        Fire_OnNewMessage(NULL,E_FACILITY_CEDL,err.Error(),err.Description());
        e->Delete();
        ComCatch(err);
	}

    if(FAILED(hr)) {
        Cleanup();
        m_bInit = FALSE;
        return hr;
    }
    
    m_bInit = TRUE;
	return hr;
}
Example #18
0
STDMETHODIMP CDirectDynamic::GetClassID(CLSID* pClassID)
{
	*pClassID = GetObjectCLSID();
	return S_OK;
}