void CKademlia::Disconnect() { if(!m_pKadHandler) return; m_pKadEngine = NULL; m_pLookupManager = NULL; m_pPayloadIndex = NULL; m_pFirewallHandler = NULL; SaveNodes(); m_pKadHandler = NULL; m_pRootZone = NULL; LogLine(LOG_INFO, L"Neo Kad Stopped"); }
void CKademlia::Process(UINT Tick) { m_pSocket->Process((Tick & EPerSec) != 0); if(!m_pKadHandler) return; if((Tick & E2PerSec) != 0) // 2 times a second { m_pFirewallHandler->Process(Tick); m_pKadHandler->Process(Tick); m_pRootZone->Process(Tick); m_pPayloadIndex->Process(Tick); } #ifndef _DEBUG if(IsConnected()) #endif { m_pLookupManager->Process(Tick); if((Tick & E10PerSec) != 0) // 10 times a second m_pKadEngine->Process(Tick); if((Tick & EPer10Sec) != 0) // every 10 seconds { if(GetCurTick() - m_uLastSave > SEC2MS(Cfg()->GetInt("NodeSaveInterval"))) { SaveNodes(); m_uLastSave = GetCurTick(); } } } }
static int ExtProc(int fn, int port, unsigned char * buff) { int len = 0, txlen=0; struct CHANNELINFO * PORT = Portlist[port]; struct PORTCONTROL * PORTVEC = PORT->PORTVEC; struct SOUNDTNCINFO * TNC = PortToTNC[port]; int State = TNC->State; UINT * buffptr; switch (fn) { case 1: // poll TNC->ProcessMonitor++; if (TNC->ProcessMonitor > 300) { TNC->ProcessMonitor = 0; if (TNC->PID) { HANDLE hProc; hProc = OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, TNC->PID); if (hProc) { DWORD ExitCode = 0; GetExitCodeProcess(hProc, &ExitCode); if (ExitCode != STILL_ACTIVE) RestartSoundTNC(TNC); CloseHandle(hProc); } } else RestartSoundTNC(TNC); } if (State & 0x20) PORTVEC->SENDING++; if (State & 0x10) PORTVEC->ACTIVE++; buffptr = Q_REM(&RXQ[port]); if (buffptr) { len = buffptr[1]; memcpy(&buff[7], &buffptr[2], len); len+=7; buff[5]=(len & 0xff); buff[6]=(len >> 8); ReleaseBuffer(buffptr); return len; } return 0; case 2: // send buffptr = GetBuff(); if (buffptr == 0) return (0); // No buffers, so ignore txlen = (buff[6] <<8 ) + buff[5] - 7; buffptr[1] = txlen; buffptr[2] = PortToChannel[port]; // Channel on this Soundcard memcpy(buffptr+3, &buff[7], txlen); C_Q_ADD(&TNC->TXQ, buffptr); return 0; case 3: // CHECK IF OK TO SEND return (0); // OK case 4: // reinit return (0); // OK case 5: // Close if (TNC->PID) { KillSoundTNC(TNC); if (AUTOSAVE == 1) SaveNodes(); Sleep(1000); } return (0); } return 0; }