예제 #1
0
void 
CConnectionManager::RegistryWatchDogThread()
{
	HKEY hKey;
	if (RegOpenKeyEx(HKEY_CURRENT_USER, REGISTRY_ROOT_KEY_SITES_PARENT, 0, KEY_NOTIFY, &hKey) != ERROR_SUCCESS) 
	{
		TRACE_E(FS(_T("Registry watchdog thread unable to open registry key: %s"), REGISTRY_ROOT_KEY_SITES_PARENT));
		_endthreadex(2);
		return;
	}
	while (true)
	{
		if (RegNotifyChangeKeyValue(hKey, TRUE, REG_NOTIFY_CHANGE_NAME|REG_NOTIFY_CHANGE_LAST_SET, NULL, FALSE)!=ERROR_SUCCESS)
		{
			TRACE_E(_T("Registry watchdog thread unable to setup next waiting operation"));
			_endthreadex(1);
			return;
		}
		TRACE_W(_T("Registry watchdog triggered"));
		m_CS.Enter();
		m_SitesModel.Load(REGISTRY_ROOT_KEY_SITES);
		m_CS.Leave();
		TRACE_W(_T("Sites model reloaded!"));
	}
	RegCloseKey(hKey);
	_endthread();
}
예제 #2
0
STDMETHODIMP 
CUpgradrScriptDebugger::OnLeaveBreakPoint(IRemoteDebugApplicationThread __RPC_FAR *prdat)
{
	Sleep(0);
	DT(TRACE_W("CUpgradrScriptDebugger::OnLeaveBreakPoint()"));	
	return S_OK;
}
예제 #3
0
STDMETHODIMP 
CUpgradrScriptDebugger::OnClose()
{
	Sleep(0);
	DT(TRACE_W("CUpgradrScriptDebugger::OnClose()"));
	return S_OK;
}
예제 #4
0
STDMETHODIMP 
CUpgradrScriptDebugger::OnDebugOutput(LPCOLESTR pstr)
{
	Sleep(0);
	DT(TRACE_W(FS(_T("CUpgradrScriptDebugger::OnDebugOutput(%S)"), pstr)));
	return S_OK;
}
예제 #5
0
STDMETHODIMP 
CUpgradrScriptDebugger::OnSetName(LPCOLESTR pstrName)
{
	Sleep(0);
	DT(TRACE_W(FS(_T("CUpgradrScriptDebugger::OnSetName(%S)"), pstrName)));
	return S_OK;
}
예제 #6
0
STDMETHODIMP 
CUpgradrScriptDebugger::OnDisconnectDebugger()
{
	Sleep(0);
	DT(TRACE_W("CUpgradrScriptDebugger::OnDisconnectDebugger()"));
	return S_OK;
}
예제 #7
0
STDMETHODIMP 
CUpgradrScriptDebugger::OnConnectDebugger(IApplicationDebugger __RPC_FAR *pad)
{
	Sleep(0);
	DT(TRACE_W("CUpgradrScriptDebugger::OnConnectDebugger()"));
	return S_OK;
}
예제 #8
0
void 
CConnection::OnEvent(UINT uEvent)
{
	BrowserManagerLock browserManager;
	CBrowserMessageWindow* window = browserManager->FindBrowserMessageWindow(m_Parent->m_Parent->GetBrowserId());
	if (!window) return;

	switch (uEvent)
	{
		case EVT_CONSUCCESS:
			TRACE_I( _T("Connection Established\r\n") );
			break;
		case EVT_CONFAILURE:
			TRACE_I( _T("Connection Failed\r\n") );
			window->PostMessage(BMM_REQUEST_DISCONNECTED_NOTIFY, 0, 0);
			CloseComm();
			m_Parent->m_Connected = false;
			break;
		case EVT_CONDROP:
			TRACE_I( _T("Connection Abandonned\r\n") );
			window->PostMessage(BMM_REQUEST_DISCONNECTED_NOTIFY, 0, 0);
			CloseComm();
			m_Parent->m_Connected = false;
			break;
		case EVT_ZEROLENGTH:
			TRACE_I( _T("Zero Length Message\r\n") );
			break;
		default:
			TRACE_W(_T("Unknown Socket event\n"));
			break;
	}
}
예제 #9
0
void
CConnectionManager::StartReconnectListener()
{
	DWORD port = 41258;
	if (GetDWORDValueFromRegistry(REGISTRY_ROOT_KEY, REGISTRY_SETTINGS_KEY, REGISTRY_SETTINGS_PORT, &port)!=0)
	{
		Log(_T("Unable to read port from registry."), ICON_WARNING);
	}
	DWORD range = 16;
	if (GetDWORDValueFromRegistry(REGISTRY_ROOT_KEY, REGISTRY_SETTINGS_KEY, REGISTRY_SETTINGS_RANGE, &range)!=0)
	{
		Log(_T("Unable to read port range from registry."), ICON_WARNING);
	}
	for (unsigned int i=1; i<=range; i++)
	{
		CString p;
		p.Format(_T("%d"), port-i);
		m_ReconnectListener.SetSmartAddressing(false); 
		m_ReconnectListener.SetServerState(true); 
		if (m_ReconnectListener.CreateSocket(p, AF_INET, SOCK_STREAM))
		{
			m_ReconnectListener.WatchComm();
			return;
		}
	}
	TRACE_W(_T("Unable to assign port for reconnect listener"));
}
예제 #10
0
STDMETHODIMP 
CUpgradrScriptDebugger::OnBreakFlagChange(APPBREAKFLAGS abf, IRemoteDebugApplicationThread __RPC_FAR *prdatSteppingThread)
{
	Sleep(0);
	DT(TRACE_W(FS(_T("CUpgradrScriptDebugger::OnBreakFlagChange(%ld)"), abf)));
	ScriptDebuggerLock scriptDebugger;
	scriptDebugger->m_DebugFlags = abf;
	return S_OK;
}
예제 #11
0
void 
CReconnectListener::OnEvent(UINT uEvent)
{
	switch (uEvent)
	{
		case EVT_CONSUCCESS:
			TRACE_I( _T("Reconnection request") );
			m_Parent->Reconnect();
			break;
		case EVT_CONFAILURE:
			CloseComm();
			m_Parent->RequestStartingReconnectListener();
			break;
		case EVT_CONDROP:
			CloseComm();
			m_Parent->RequestStartingReconnectListener();
			break;
		case EVT_ZEROLENGTH:
			break;
		default:
			TRACE_W(_T("Unknown Socket event\n"));
			break;
	}
}
예제 #12
0
void                                           
CFrame::UpdateLinks()
{
	// start from scratch
	m_ChildFrames.clear();

	// detect all child frames
	CComQIPtr<IOleContainer> spContainer = m_Document;
	if (!!spContainer)
	{
		// get an enumerator for the frames
		IEnumUnknown* pEnumerator;
		HRESULT hr = spContainer->EnumObjects(OLECONTF_EMBEDDINGS, &pEnumerator);

		if (SUCCEEDED(hr))
		{
			IUnknown* pUnknown;
			ULONG uFetched;

			// enumerate all the frames
			for (UINT i = 0; S_OK == pEnumerator->Next(1, &pUnknown, &uFetched); i++)
			{
				CComQIPtr<IWebBrowser2> spChildBrowser = pUnknown;
				pUnknown->Release();
				if (!!spChildBrowser)
				{
					// well done, store child frame
					CComPtr<IDispatch> spChildDispDoc;
					CHECK_COM(spChildBrowser->get_Document(&spChildDispDoc), FS(_T("Cannot retrieve document object from %08X"), spChildBrowser));
					CComQIPtr<IHTMLDocument2> spChildDoc = spChildDispDoc;

					// sometimes IE can return NULL spChildDispDoc 
					// 
					// (observed on pages with file download blocking)
					// test for valid doc
					if (!!spChildDoc)
					{
						CComBSTR url2;
						CHECK_COM(spChildDoc->get_URL(&url2), FS(_T("Cannot retrieve location URL from %08X"), spChildDoc));
						CString URL2 = url2;

						// it wouldn't be so easy to simply add child document into childs
						// but IE (maybe) does some reallocation of this document, so we need to do lookup via frameId

						TFrameId id = m_FrameTable.GetFrameId(spChildDoc, false);

						// wait for document to load, 
						// there is RISK OF CALLS to other functions !!!
						//if (id==NULL_FRAME) id = m_FrameTable.GetFrameId(spChildDoc, true); // blocking call
						if (id==NULL_FRAME)
						{
							// TODO: tohle se muze nekdy stat, kdyz se frame jeste nestihne naloadovat pri F5, napriklad gmail.com to dela
							TRACE_W(FS(_T("Child doc not found for %s !!"), URL2));
						}
						else
						{
							m_ChildFrames.push_back(id);
						}
					}
				}
			}
		}
		pEnumerator->Release();
	}
}