/** * Start the thread. Called from the constructor in this class. * * @param pParam * * @return */ UINT AFX_CDECL UploadBandwidthThrottler::RunProc(LPVOID pParam) { DbgSetThreadName("UploadBandwidthThrottler"); InitThreadLocale(); UploadBandwidthThrottler* uploadBandwidthThrottler = (UploadBandwidthThrottler*)pParam; return uploadBandwidthThrottler->RunInternal(); }
BOOL CFrameGrabThread::InitInstance() { CSafeThread::InitInstance(); // ismod DbgSetThreadName("FrameGrabThread"); InitThreadLocale(); return TRUE; }
/** * Start the thread. Called from the constructor in this class. * * @param pParam * * @return */ UINT AFX_CDECL LastCommonRouteFinder::RunProc(LPVOID pParam) { DbgSetThreadName("LastCommonRouteFinder"); InitThreadLocale(); LastCommonRouteFinder* lastCommonRouteFinder = (LastCommonRouteFinder*)pParam; return lastCommonRouteFinder->RunInternal(); }
/**************************************************************************** 函数名: _DownloadThread(LPVOID pParam) 函数功能: 创建一个线程用于下载 被本函数调用的函数清单: DownloadThread(); 调用本函数的函数清单: void CEmuleUpdater::UpdateAvailable(void) 参数: 返回值: 描述: ****************************************************************************/ UINT AFX_CDECL CEmuleUpdater::_DownloadThread(LPVOID pParam) { DbgSetThreadName("HttpDownload"); InitThreadLocale(); CEmuleUpdater* pEmuleUpdater = (CEmuleUpdater*) pParam; ASSERT(pEmuleUpdater); ASSERT(pEmuleUpdater->IsKindOf(RUNTIME_CLASS(CEmuleUpdater))); pEmuleUpdater->DownloadThread(); return 0; }
UINT AFX_CDECL CHttpDownloadDlg::_DownloadThread(LPVOID pParam) { DbgSetThreadName("HttpDownload"); InitThreadLocale(); //Convert from the SDK world to the C++ world CHttpDownloadDlg* pDlg = (CHttpDownloadDlg*) pParam; ASSERT(pDlg); ASSERT(pDlg->IsKindOf(RUNTIME_CLASS(CHttpDownloadDlg))); pDlg->DownloadThread(); return 0; }
UINT AFX_CDECL CPartFileConvert::run(LPVOID /*lpParam*/) { DbgSetThreadName("Partfile-Converter"); InitThreadLocale(); //Xman // BEGIN SLUGFILLER: SafeHash CReadWriteLock lock(&theApp.m_threadlock); if (!lock.ReadLock(0)) return 0; // END SLUGFILLER: SafeHash int imported=0; for (;;) { // search next queued job and start it pfconverting=NULL; for(POSITION pos = m_jobs.GetHeadPosition(); pos != NULL; m_jobs.GetNext(pos)){ pfconverting=m_jobs.GetAt(pos); if (pfconverting->state==CONV_QUEUE) break; else pfconverting=NULL; } if (pfconverting!=NULL) { pfconverting->state=CONV_INPROGRESS; UpdateGUI(pfconverting); pfconverting->state=performConvertToeMule(pfconverting->folder); if (pfconverting->state==CONV_OK) ++imported; UpdateGUI(pfconverting); AddLogLine(true,GetResString(IDS_IMP_STATUS),pfconverting->folder,GetReturncodeText(pfconverting->state)); } else break;// nothing more to do now } // clean up UpdateGUI(NULL); if (imported) theApp.sharedfiles->PublishNextTurn(); convertPfThread=NULL; return 0; }
UINT AFX_CDECL CHttpDownloadDlg::_DownloadThread(LPVOID pParam) { DbgSetThreadName("HttpDownload"); InitThreadLocale(); //Convert from the SDK world to the C++ world CHttpDownloadDlg* pDlg = (CHttpDownloadDlg*) pParam; ASSERT(pDlg); ASSERT(pDlg->IsKindOf(RUNTIME_CLASS(CHttpDownloadDlg))); // BEGIN SLUGFILLER: SafeHash CReadWriteLock lock(&theApp.m_threadlock); if (!lock.ReadLock(1000)) { // netfinity: Make sure we doesn't get stuck pDlg->HandleThreadError(GetResString(IDS_HTTPDOWNLOAD_GENERIC_ERROR)); return 0; } // END SLUGFILLER: SafeHash pDlg->DownloadThread(); return 0; }
BOOL CPreviewThread::InitInstance() { DbgSetThreadName("PartFilePreview"); InitThreadLocale(); return TRUE; }
UINT AFX_CDECL WebSocketListeningFunc(LPVOID pThis) { DbgSetThreadName("WebSocketListening"); srand(time(NULL)); InitThreadLocale(); SOCKET hSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0); if (INVALID_SOCKET != hSocket) { SOCKADDR_IN stAddr; stAddr.sin_family = AF_INET; stAddr.sin_port = htons(thePrefs.GetWSPort()); if (thePrefs.GetBindAddrA()) stAddr.sin_addr.S_un.S_addr = inet_addr(thePrefs.GetBindAddrA()); else stAddr.sin_addr.S_un.S_addr = INADDR_ANY; if (!bind(hSocket, (sockaddr*)&stAddr, sizeof(stAddr)) && !listen(hSocket, SOMAXCONN)) { HANDLE hEvent = CreateEvent(NULL, FALSE, TRUE, NULL); if (hEvent) { if (!WSAEventSelect(hSocket, hEvent, FD_ACCEPT)) { HANDLE pWait[] = { hEvent, s_hTerminate }; while (WAIT_OBJECT_0 == WaitForMultipleObjects(2, pWait, FALSE, INFINITE)) { for (;;) { struct sockaddr_in their_addr; int sin_size = sizeof(struct sockaddr_in); SOCKET hAccepted = accept(hSocket,(struct sockaddr *)&their_addr, &sin_size); if (INVALID_SOCKET == hAccepted) break; if (thePrefs.GetAllowedRemoteAccessIPs().GetCount() > 0) { bool bAllowedIP = false; for (int i = 0; i < thePrefs.GetAllowedRemoteAccessIPs().GetCount(); i++) { if (their_addr.sin_addr.S_un.S_addr == thePrefs.GetAllowedRemoteAccessIPs()[i]) { bAllowedIP = true; break; } } if (!bAllowedIP) { LogWarning(_T("Web Interface: Rejected connection attempt from %s"), ipstr(their_addr.sin_addr.S_un.S_addr)); VERIFY( !closesocket(hAccepted) ); break; } } if(thePrefs.GetWSIsEnabled()) { SocketData *pData = new SocketData; pData->hSocket = hAccepted; pData->pThis = pThis; pData->incomingaddr=their_addr.sin_addr; // - do NOT use Windows API 'CreateThread' to create a thread which uses MFC/CRT -> lot of mem leaks! // - 'AfxBeginThread' could be used here, but creates a little too much overhead for our needs. CWinThread* pAcceptThread = new CWinThread(WebSocketAcceptedFunc, (LPVOID)pData); if (!pAcceptThread->CreateThread()) { delete pAcceptThread; pAcceptThread = NULL; VERIFY( !closesocket(hAccepted) ); hAccepted = NULL; } } else { VERIFY( !closesocket(hAccepted) ); hAccepted = NULL; } } } } VERIFY( CloseHandle(hEvent) ); hEvent = NULL; } } VERIFY( !closesocket(hSocket) ); hSocket = NULL; } return 0; }
UINT AFX_CDECL WebSocketAcceptedFunc(LPVOID pD) { DbgSetThreadName("WebSocketAccepted"); srand(time(NULL)); InitThreadLocale(); SocketData *pData = (SocketData *)pD; SOCKET hSocket = pData->hSocket; CWebServer *pThis = (CWebServer *)pData->pThis; in_addr ad=pData->incomingaddr; delete pData; ASSERT(INVALID_SOCKET != hSocket); HANDLE hEvent = CreateEvent(NULL, FALSE, TRUE, NULL); if (hEvent) { if (!WSAEventSelect(hSocket, hEvent, FD_READ | FD_CLOSE | FD_WRITE)) { CWebSocket stWebSocket; stWebSocket.SetParent(pThis); stWebSocket.m_pHead = NULL; stWebSocket.m_pTail = NULL; stWebSocket.m_bValid = true; stWebSocket.m_bCanRecv = true; stWebSocket.m_bCanSend = true; stWebSocket.m_hSocket = hSocket; stWebSocket.m_pBuf = NULL; stWebSocket.m_dwRecv = 0; stWebSocket.m_dwBufSize = 0; stWebSocket.m_dwHttpHeaderLen = 0; stWebSocket.m_dwHttpContentLen = 0; HANDLE pWait[] = { hEvent, s_hTerminate }; while (WAIT_OBJECT_0 == WaitForMultipleObjects(2, pWait, FALSE, INFINITE)) { while (stWebSocket.m_bValid) { WSANETWORKEVENTS stEvents; if (WSAEnumNetworkEvents(hSocket, NULL, &stEvents)) stWebSocket.m_bValid = false; else { if (!stEvents.lNetworkEvents) break; //no more events till now if (FD_READ & stEvents.lNetworkEvents) for (;;) { char pBuf[0x1000]; int nRes = recv(hSocket, pBuf, sizeof(pBuf), 0); if (nRes <= 0) { if (!nRes) { stWebSocket.m_bCanRecv = false; stWebSocket.OnReceived(NULL, 0, ad); } else if (WSAEWOULDBLOCK != WSAGetLastError()) stWebSocket.m_bValid = false; break; } stWebSocket.OnReceived(pBuf, nRes,ad); } if (FD_CLOSE & stEvents.lNetworkEvents) stWebSocket.m_bCanRecv = false; if (FD_WRITE & stEvents.lNetworkEvents) // send what is left in our tails while (stWebSocket.m_pHead) { if (stWebSocket.m_pHead->m_pToSend) { int nRes = send(hSocket, stWebSocket.m_pHead->m_pToSend, stWebSocket.m_pHead->m_dwSize, 0); if (nRes != (signed) stWebSocket.m_pHead->m_dwSize) { if (nRes) if ((nRes > 0) && (nRes < (signed) stWebSocket.m_pHead->m_dwSize)) { stWebSocket.m_pHead->m_pToSend += nRes; stWebSocket.m_pHead->m_dwSize -= nRes; } else if (WSAEWOULDBLOCK != WSAGetLastError()) stWebSocket.m_bValid = false; break; } } else if (shutdown(hSocket, SD_SEND)) { stWebSocket.m_bValid = false; break; } // erase this chunk CWebSocket::CChunk* pNext = stWebSocket.m_pHead->m_pNext; delete stWebSocket.m_pHead; stWebSocket.m_pHead = pNext; if (stWebSocket.m_pHead == NULL) stWebSocket.m_pTail = NULL; } } } if (!stWebSocket.m_bValid || (!stWebSocket.m_bCanRecv && !stWebSocket.m_pHead)) break; } while (stWebSocket.m_pHead) { CWebSocket::CChunk* pNext = stWebSocket.m_pHead->m_pNext; delete stWebSocket.m_pHead; stWebSocket.m_pHead = pNext; } delete[] stWebSocket.m_pBuf; } VERIFY( CloseHandle(hEvent) ); } VERIFY( !closesocket(hSocket) ); return 0; }
UINT AFX_CDECL WebSocketListeningFunc(LPVOID pThis) { DbgSetThreadName("WebSocketListening"); srand(time(NULL)); InitThreadLocale(); // WSADATA stData; // if (!WSAStartup(MAKEWORD(1, 1), &stData)) { SOCKET hSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0); if (INVALID_SOCKET != hSocket) { SOCKADDR_IN stAddr; stAddr.sin_family = AF_INET; stAddr.sin_port = htons(thePrefs.GetWSPort()); stAddr.sin_addr.S_un.S_addr = INADDR_ANY; if (!bind(hSocket, (sockaddr*)&stAddr, sizeof(stAddr)) && !listen(hSocket, SOMAXCONN)) { HANDLE hEvent = CreateEvent(NULL, FALSE, TRUE, NULL); if (hEvent) { if (!WSAEventSelect(hSocket, hEvent, FD_ACCEPT)) { HANDLE pWait[] = { hEvent, s_hTerminate }; while (WAIT_OBJECT_0 == WaitForMultipleObjects(2, pWait, FALSE, INFINITE)) { for (;;) { struct sockaddr_in their_addr; int sin_size = sizeof(struct sockaddr_in); SOCKET hAccepted = accept(hSocket,(struct sockaddr *)&their_addr, &sin_size); if (INVALID_SOCKET == hAccepted) break; if(thePrefs.GetWSIsEnabled()) { SocketData *pData = new SocketData; pData->hSocket = hAccepted; pData->pThis = pThis; pData->incomingaddr=their_addr.sin_addr; // - do NOT use Windows API 'CreateThread' to create a thread which uses MFC/CRT -> lot of mem leaks! // - 'AfxBeginThread' could be used here, but creates a little too much overhead for our needs. CWinThread* pAcceptThread = new CWinThread(WebSocketAcceptedFunc, (LPVOID)pData); if (!pAcceptThread->CreateThread()) { delete pAcceptThread; pAcceptThread = NULL; VERIFY( !closesocket(hSocket) ); } } else VERIFY( !closesocket(hSocket) ); } } } VERIFY( CloseHandle(hEvent) ); } } VERIFY( !closesocket(hSocket) ); } // VERIFY( !WSACleanup() ); } return 0; }
BOOL CAICHSyncThread::InitInstance() { DbgSetThreadName("AICHSyncThread"); InitThreadLocale(); return TRUE; }
int CUPnPImplMiniLib::CStartDiscoveryThread::Run() { DbgSetThreadName("CUPnPImplMiniLib::CStartDiscoveryThread"); if ( !m_pOwner ) return 0; CSingleLock sLock(&m_pOwner->m_mutBusy); if (!sLock.Lock(0)){ DebugLogWarning(_T("CUPnPImplMiniLib::CStartDiscoveryThread::Run, failed to acquire Lock, another Mapping try might be running already")); return 0; } if (m_pOwner->m_bAbortDiscovery) // requesting to abort ASAP? return 0; UPNPDev* structDeviceList = upnpDiscover(2000, NULL, NULL); if (structDeviceList == NULL){ DebugLog(_T("UPNP: No Internet Gateway Devices found, aborting")); m_pOwner->m_bUPnPPortsForwarded = TRIS_FALSE; m_pOwner->SendResultMessage(); return 0; } if (m_pOwner->m_bAbortDiscovery){ // requesting to abort ASAP? freeUPNPDevlist(structDeviceList); return 0; } DebugLog(_T("List of UPNP devices found on the network:")); for(UPNPDev* pDevice = structDeviceList; pDevice != NULL; pDevice = pDevice->pNext) { DebugLog(_T("Desc: %S, st: %S"), pDevice->descURL, pDevice->st); } m_pOwner->m_pURLs = new UPNPUrls; ZeroMemory(m_pOwner->m_pURLs, sizeof(UPNPUrls)); m_pOwner->m_pIGDData = new IGDdatas; ZeroMemory(m_pOwner->m_pIGDData, sizeof(IGDdatas)); char achLanIP[16]; achLanIP[0] = 0; int iResult = UPNP_GetValidIGD(structDeviceList, m_pOwner->m_pURLs, m_pOwner->m_pIGDData, achLanIP, sizeof(achLanIP)); switch (iResult){ case 1: DebugLog(_T("Found valid IGD : %S"), m_pOwner->m_pURLs->controlURL); break; case 2: DebugLog(_T("Found a (not connected?) IGD : %S - Trying to continue anyway"), m_pOwner->m_pURLs->controlURL); break; case 3: DebugLog(_T("UPnP device found. Is it an IGD ? : %S - Trying to continue anyway"), m_pOwner->m_pURLs->controlURL); break; default: DebugLog(_T("Found device (igd ?) : %S - Trying to continue anyway"), m_pOwner->m_pURLs->controlURL); } freeUPNPDevlist(structDeviceList); DebugLog(_T("Our LAN IP: %S"), achLanIP); if (m_pOwner->m_bAbortDiscovery) // requesting to abort ASAP? return 0; // do we still have old mappings? Remove them first m_pOwner->DeletePorts(true); bool bSucceeded = OpenPort(m_pOwner->m_nTCPPort, true, achLanIP); if (bSucceeded && m_pOwner->m_nUDPPort != 0) bSucceeded = OpenPort(m_pOwner->m_nUDPPort, false, achLanIP); if (!m_pOwner->m_bAbortDiscovery){ // dont send a result on a abort request m_pOwner->m_bUPnPPortsForwarded = bSucceeded ? TRIS_TRUE : TRIS_FALSE; m_pOwner->SendResultMessage(); } return 0; }
int CUPnPImplMiniLib::CStartDiscoveryThread::Run() { DbgSetThreadName("CUPnPImplMiniLib::CStartDiscoveryThread"); if ( !m_pOwner ) return 0; CSingleLock sLock(&m_pOwner->m_mutBusy); if (!sLock.Lock(0)){ DebugLogWarning(_T("CUPnPImplMiniLib::CStartDiscoveryThread::Run, failed to acquire Lock, another Mapping try might be running already")); return 0; } if (m_pOwner->m_bAbortDiscovery) // requesting to abort ASAP? return 0; bool bSucceeded = false; #if !(defined(_DEBUG) || defined(_BETA)) try #endif { if (!m_pOwner->m_bCheckAndRefresh) { UPNPDev* structDeviceList = upnpDiscover(2000, NULL, NULL, NULL); if (structDeviceList == NULL){ DebugLog(_T("UPNP: No Internet Gateway Devices found, aborting")); m_pOwner->m_bUPnPPortsForwarded = TRIS_FALSE; m_pOwner->SendResultMessage(); return 0; } if (m_pOwner->m_bAbortDiscovery){ // requesting to abort ASAP? freeUPNPDevlist(structDeviceList); return 0; } DebugLog(_T("List of UPNP devices found on the network:")); for(UPNPDev* pDevice = structDeviceList; pDevice != NULL; pDevice = pDevice->pNext) { DebugLog(_T("Desc: %S, st: %S"), pDevice->descURL, pDevice->st); } m_pOwner->m_pURLs = new UPNPUrls; ZeroMemory(m_pOwner->m_pURLs, sizeof(UPNPUrls)); m_pOwner->m_pIGDData = new IGDdatas; ZeroMemory(m_pOwner->m_pIGDData, sizeof(IGDdatas)); m_pOwner->m_achLanIP[0] = 0; int iResult = UPNP_GetValidIGD(structDeviceList, m_pOwner->m_pURLs, m_pOwner->m_pIGDData, m_pOwner->m_achLanIP, sizeof(m_pOwner->m_achLanIP)); freeUPNPDevlist(structDeviceList); bool bNotFound = false; switch (iResult){ case 1: DebugLog(_T("Found valid IGD : %S"), m_pOwner->m_pURLs->controlURL); break; case 2: DebugLog(_T("Found a (not connected?) IGD : %S - Trying to continue anyway"), m_pOwner->m_pURLs->controlURL); break; case 3: DebugLog(_T("UPnP device found. Is it an IGD ? : %S - Trying to continue anyway"), m_pOwner->m_pURLs->controlURL); break; default: DebugLog(_T("Found device (igd ?) : %S - Aborting"), m_pOwner->m_pURLs->controlURL != NULL ? m_pOwner->m_pURLs->controlURL : "(none)"); bNotFound = true; } if (bNotFound || m_pOwner->m_pURLs->controlURL == NULL) { m_pOwner->m_bUPnPPortsForwarded = TRIS_FALSE; m_pOwner->SendResultMessage(); return 0; } DebugLog(_T("Our LAN IP: %S"), m_pOwner->m_achLanIP); if (m_pOwner->m_bAbortDiscovery) // requesting to abort ASAP? return 0; // do we still have old mappings? Remove them first m_pOwner->DeletePorts(true); } bSucceeded = OpenPort(m_pOwner->m_nTCPPort, true, m_pOwner->m_achLanIP, m_pOwner->m_bCheckAndRefresh); if (bSucceeded && m_pOwner->m_nUDPPort != 0) bSucceeded = OpenPort(m_pOwner->m_nUDPPort, false, m_pOwner->m_achLanIP, m_pOwner->m_bCheckAndRefresh); if (bSucceeded && m_pOwner->m_nTCPWebPort != 0) OpenPort(m_pOwner->m_nTCPWebPort, true, m_pOwner->m_achLanIP, m_pOwner->m_bCheckAndRefresh); // don't fail if only the webinterface port fails for some reason } #if !(defined(_DEBUG) || defined(_BETA)) catch(...) { DebugLogError(_T("Unknown Exception in CUPnPImplMiniLib::CStartDiscoveryThread::Run()")); } #endif if (!m_pOwner->m_bAbortDiscovery){ // dont send a result on a abort request m_pOwner->m_bUPnPPortsForwarded = bSucceeded ? TRIS_TRUE : TRIS_FALSE; m_pOwner->m_bSucceededOnce |= bSucceeded; m_pOwner->SendResultMessage(); } return 0; }