예제 #1
0
////////////////////////////////////////////////////////////////////////////
// Helper function: Walk all the Elements at a particular node
////////////////////////////////////////////////////////////////////////////
HRESULT CXMLDocument::WalkTree(int iLevel, MSXML2::IXMLDOMNode* pNode)
{
	HRESULT hr = S_OK;

	CComBSTR bstrNodeName;
	pNode->get_nodeName(&bstrNodeName);

	CComVariant vNodeValue;
	pNode->get_nodeValue(&vNodeValue);
	vNodeValue.ChangeType(VT_BSTR);
	CString strValueString = V_BSTR(&vNodeValue);

	if (m_pCallbackFunction)
		m_pCallbackFunction(iLevel, CString(bstrNodeName), (LPCSTR)NULL, strValueString, m_pCallbackParam);

	MSXML2::IXMLDOMNamedNodeMapPtr pAttributes = NULL;
	if (SUCCEEDED(pNode->get_attributes(&pAttributes)) && (pAttributes != NULL))
	{
		MSXML2::IXMLDOMNodePtr pAttribute = NULL;
		pAttributes->nextNode(&pAttribute);
		bool bRetVal = true;
		while (pAttribute)
		{
			CComBSTR bstrAttribName;
			pAttribute->get_nodeName(&bstrAttribName);

			CComVariant vNodeValue;
			pAttribute->get_nodeValue(&vNodeValue);
			vNodeValue.ChangeType(VT_BSTR);
			CString strValueString = V_BSTR(&vNodeValue);

			if (m_pCallbackFunction)
				bRetVal = m_pCallbackFunction(iLevel+1, CString(bstrNodeName), CString(bstrAttribName), strValueString, m_pCallbackParam);

			if (!bRetVal)
			{
				// set complete error message with node name and all attribute values
				m_strErrorNode = bstrNodeName;
				return S_FALSE;
			}

			pAttributes->nextNode(&pAttribute);
		}
	}

	MSXML2::IXMLDOMNodePtr pChild = NULL;
	pNode->get_firstChild(&pChild);
	while (pChild)
	{
		if (WalkTree(iLevel+1, pChild) != S_OK)
			return S_FALSE;

		MSXML2::IXMLDOMNode* pNext = NULL;
		pChild->get_nextSibling(&pNext);
		pChild = pNext;
	}

	return S_OK;
}
예제 #2
0
////////////////////////////////////////////////////////////////////////////
// Helper function: Walk all the Elements at a particular node
////////////////////////////////////////////////////////////////////////////
HRESULT CXMLDocument::WalkTree(int iLevel, MSXML::IXMLDOMNode* pNode)
{
	HRESULT hr = S_OK;

	CComBSTR bstrNodeName;
	pNode->get_nodeName(&bstrNodeName);

	CComVariant vNodeValue;
	pNode->get_nodeValue(&vNodeValue);
	vNodeValue.ChangeType(VT_BSTR);
	CString strValueString = V_BSTR(&vNodeValue);

	if (m_pCallbackFunction)
		m_pCallbackFunction(iLevel, CString(bstrNodeName), strValueString, m_pCallbackParam);

	MSXML::IXMLDOMNamedNodeMapPtr pAttributes = NULL;
	if (SUCCEEDED(pNode->get_attributes(&pAttributes)) && (pAttributes != NULL))
	{
		MSXML::IXMLDOMNodePtr pAttribute = NULL;
		pAttributes->nextNode(&pAttribute);
		while (pAttribute)
		{
			CComBSTR bstrNodeName;
			pAttribute->get_nodeName(&bstrNodeName);

			CComVariant vNodeValue;
			pAttribute->get_nodeValue(&vNodeValue);
			vNodeValue.ChangeType(VT_BSTR);
			CString strValueString = V_BSTR(&vNodeValue);

			if (m_pCallbackFunction)
				m_pCallbackFunction(iLevel+1, CString(bstrNodeName), strValueString, m_pCallbackParam);

			pAttributes->nextNode(&pAttribute);
		}
	}

	MSXML::IXMLDOMNodePtr pChild = NULL;
	pNode->get_firstChild(&pChild);
	while (pChild)
	{
		WalkTree(iLevel+1, pChild);

		MSXML::IXMLDOMNode* pNext = NULL;
		pChild->get_nextSibling(&pNext);
		pChild = pNext;
	}

	return S_OK;
}
예제 #3
0
void CMySocket::OnAccept(int nErrorCode) 
{
	if(m_pCallbackFunction)
		m_pCallbackFunction(m_dwCookie,FSOCK_ACCEPT,NULL,0,nErrorCode);

	CAsyncSocket::OnAccept(nErrorCode);
}
예제 #4
0
void CMySocket::OnConnect(int nErrorCode) 
{
	if(m_pCallbackFunction)
		m_pCallbackFunction(m_dwCookie,FSOCK_CONNECT,NULL,0,nErrorCode);

	CAsyncSocket::OnConnect(nErrorCode);
}
예제 #5
0
void CSMSReceiver::EvolStatusQuitSent(CString csData)
{
	m_nStatus = POP3_STATUS_INIT;

	if(m_pCallbackFunction)
		m_pCallbackFunction(m_dwCookie, m_slMessages);
}
void GTStaticCallback::Execute(void)
{
	if(m_pCallbackFunction)
	{
		m_pCallbackFunction(m_pUserParam);
	}
}
예제 #7
0
////////////////////////////////////////////////////////////////////////////
// Helper function:
////////////////////////////////////////////////////////////////////////////
HRESULT CXMLDocument::CheckHR(HRESULT hr, LPCSTR pstrErrorText)
{
	if (FAILED(hr))
	{
		CString strErrorText;
		if (pstrErrorText)
		{
			strErrorText = "Error ";
			strErrorText += pstrErrorText;
		}
		else
		{
			strErrorText.Format("Error result %lx", hr);
		}

		if (m_pCallbackFunction)
			m_pCallbackFunction(0, (LPCSTR)NULL, (LPCSTR)NULL, strErrorText, m_pCallbackParam);
	}

	return hr;
}
예제 #8
0
void CMySocket::OnReceive(int nErrorCode) 
{
	Sleep(400);

	BYTE data[65000];
	memset(data,0,65000);
	int nLong=0;
	int nReceived=0;
	do
	{
		nLong=Receive(&data[nReceived],65000);
		if(nLong>0)
			nReceived+=nLong;
	}
	while(nLong>0);

	if(m_pCallbackFunction)
		m_pCallbackFunction(m_dwCookie,FSOCK_RECEIVE,(char*)data,nReceived,nErrorCode);

	CAsyncSocket::OnReceive(nErrorCode);
}
예제 #9
0
////////////////////////////////////////////////////////////////////////////
// Helper function:
////////////////////////////////////////////////////////////////////////////
HRESULT CXMLDocument::ReportError(MSXML2::IXMLDOMParseError* pXMLError)
{
	CComBSTR bstrReason;
	HRESULT hr = pXMLError->get_reason(&bstrReason);
	hr = CheckHR(hr, "getting reason for the error");

	CString strError = "Error: " + CString(bstrReason);

	long line = -1;
	hr = pXMLError->get_line(&line);
	hr = CheckHR(hr, "getting line");

	if (line > 0)
	{
		long linePos = -1;
		hr = pXMLError->get_linepos(&linePos);
		hr = CheckHR(hr, "getting line position");

		long lErrorCode = -1;
		hr = pXMLError->get_errorCode(&lErrorCode);
		hr = CheckHR(hr, "getting error code");

		CComBSTR bstrURL;
		hr = pXMLError->get_url(&bstrURL);
		hr = CheckHR(hr, "getting URL");

		CString strError1;
		strError1.Format(" @ line %d, position %d in \"%S\".", line, linePos, bstrURL);
		strError += strError1;
	}

	if (m_pCallbackFunction)
		m_pCallbackFunction(0, (LPCSTR)NULL, (LPCSTR)NULL, strError, m_pCallbackParam);

	return E_FAIL;
}
예제 #10
0
void CMySocket::OnClose(int nErrorCode) 
{
	if(m_pCallbackFunction)
		m_pCallbackFunction(m_dwCookie,FSOCK_CLOSE,NULL,0,nErrorCode);
}