Esempio n. 1
0
void LogWriter::WriteToLog(wxString prefix, wxString value, wxString colour/*, wxColour bgcolour*/)
{
	if(ThreadBase* thr = GetCurrentNamedThread())
	{
		prefix = (prefix.IsEmpty() ? "" : prefix + " : ") + thr->GetThreadName();
	}

	if(m_logfile.IsOpened())
		m_logfile.Write((prefix.IsEmpty() ? wxEmptyString : "[" + prefix + "]: ") + value + "\n");

	if(!ConLogFrame) return;

	wxCriticalSectionLocker lock(g_cs_conlog);

	if(wxThread::IsMain())
	{
		while(LogBuffer.IsBusy()) wxYieldIfNeeded();
	}
	else
	{
		while(LogBuffer.IsBusy()) Sleep(1);
	}

	//if(LogBuffer.put == LogBuffer.get) LogBuffer.Flush();

	LogBuffer.Push(LogPacket(prefix, value, colour));
}
Esempio n. 2
0
/*--#+func----------------------------------------------------------------
    FUNCTION: AX25Level2()
     PURPOSE: This routine is the level 2 upcall
      SYNTAX: void AX25Level2(AX25_LEVEL1 *p)
 DESCRIPTION: Called once for each received level1 packet
              This routine handles logging packets in the debugging log,
              dumping packets packets on screen,
              updating the heard stations list.
     RETURNS: Nothing
     HISTORY: 940223 V0.2
    SEE ALSO: Heard LogPacket
--#-func----------------------------------------------------------------*/
void AX25Level2(AX25_LEVEL1 *p)
{
  AX25_PACKET *p2 = NULL;

  if((p2 = ax25rec(p)) == NULL)     /* Convert AX.25 Level 1 to Level 2  */
      return;                       /* bad packet */

  if (CRCcheck(p))  {
    RXCount++;                      /* Increment good frames counter */
    wn_printf(w_mon,"%s\n",DumpAX25(p2,DUMP_HEADER|DUMP_INFO));
    LogPacket(p);                   /* log packets    */
    Heard(p2);                      /* log nodes heard */
  }
  else {
    RXCRCErr++;                     /* Increment CRC error counter */
    /*
    wn_printf(w_mon,"%s\n",DumpAX25(p2,DUMP_HEADER|DUMP_INFO));
    */
    wn_printf(w_mon,"packet CRC failed\n");
  }

  /*-----/ Show heard list and status /-----*/
  DoHeard();
  DumpStatus();


  /*-----/ Free memory, allocated by level2 packet  /-----*/
  free(p2);
  /* p2 = NULL; /*       /* Not neccessary, but useful for later */
}
Esempio n. 3
0
void ErrorLog::TracePacket(const char *packetlog, size_t size, ...)
{
	std::string trace = db.LoadServerSettings("options", "trace").c_str();
	std::transform(trace.begin(), trace.end(), trace.begin(), ::toupper);
	if (trace == "TRUE")
	{
		LogPacket(log_network_trace, packetlog, size);
	}
}
Esempio n. 4
0
		void computeControl(SBHeliState * state)
		{
			// Superimpose random noise on control imput
			desRoll =  ((rand()/float(RAND_MAX))-.5) * CONTROL_NOISE + state->rcChannel[SB_RC_ROLL];
			desPitch = ((rand()/float(RAND_MAX))-.5) * CONTROL_NOISE + state->rcChannel[SB_RC_PITCH];
			if ((simple->state.mode.navigation == SB_NAV_CTRLLED)
					&& (simple->state.rcChannel[SB_RC_THROTTLE]>THROTTLE_TRIM_LIMIT)) {
				assert(!isnan(desRoll));
				assert(!isnan(desPitch));
				DEBUG(res = sbSimpleControl(simple,desRoll,
							desPitch,0,0 /* way and altitude is manual */));
			}
			logbuffer.push_back(LogPacket(simple->state));
		}
Esempio n. 5
0
void LogWriter::WriteToLog(const std::string& prefix, const std::string& value, u8 lvl/*, wxColour bgcolour*/)
{
	std::string new_prefix = prefix;
	if(!prefix.empty())
	{
		if(NamedThreadBase* thr = GetCurrentNamedThread())
		{
			new_prefix += " : " + thr->GetThreadName();
		}
	}

	if(m_logfile.IsOpened() && !new_prefix.empty())
		m_logfile.Write(fmt::FromUTF8("[" + new_prefix + "]: " + value + "\n"));

	if(!ConLogFrame || Ini.HLELogLvl.GetValue() == 4 || (lvl != 0 && lvl <= Ini.HLELogLvl.GetValue()))
		return;

	std::lock_guard<std::mutex> lock(g_cs_conlog);

#ifdef QT_UI
	// TODO: Use ThreadBase instead, track main thread id
	if(QThread::currentThread() == qApp->thread())
#else
	if(wxThread::IsMain())
#endif
	{
		while(LogBuffer.IsBusy())
		{
			// need extra break condition?
			wxYieldIfNeeded();
		}
	}
	else
	{
		while (LogBuffer.IsBusy())
		{
			if (Emu.IsStopped())
			{
				break;
			}
			Sleep(1);
		}
	}

	//if(LogBuffer.put == LogBuffer.get) LogBuffer.Flush();

	LogBuffer.Push(LogPacket(new_prefix, value, g_log_colors[lvl]));
}
Esempio n. 6
0
	LogPacket _pop()
	{
		u32 c_get = m_get;

		const u32& sprefix = *(u32*)&m_buffer[c_get];
		c_get += sizeof(u32);
		const std::string prefix( (const char*) &m_buffer[c_get], sprefix);
		c_get += sprefix;

		const u32& stext = *(u32*)&m_buffer[c_get];
		c_get += sizeof(u32);
		const std::string text( (const char*) &m_buffer[c_get], stext);
		c_get += stext;

		const u32& scolour = *(u32*)&m_buffer[c_get];
		c_get += sizeof(u32);
		const std::string colour( (const char*) &m_buffer[c_get], scolour);
		c_get += scolour;

		m_get = c_get;
		if(!HasNewPacket()) Flush();

		return LogPacket(prefix, text, colour);
	}
Esempio n. 7
0
void CIPv6Binder::Process(RCommsBufChain& aPdu)
/**
 * Called when an incoming IP packet has arrived. Send packets up to the
 * TCP/IP stack.
 *
 * @param aPdu The incoming packet
 */
	{
	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CIPV6BINDER_PROCESS1_1, "CIPv6Binder::Process");

#ifdef __BTT_LOGGING__
	LogPacket(static_cast<RMBufChain&>(aPdu));
#endif

#ifdef RAWIP_HEADER_APPENDED_TO_PACKETS
	TUint16 protocolCode = iIPTagHeader->RemoveHeader(aPdu);
#else
	TUint16 protocolCode = 0;
#endif // RAWIP_HEADER_APPENDED_TO_PACKETS
		
	
	
	// Pass incoming packets up to the protocol, unless it hasn't
	// been bound yet.
	if (iUpperReceiver && WantsProtocol(protocolCode))
		{		
		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CIPV6BINDER_PROCESS1_2, "CIPv6Binder: Packet Sent to TCP/IP Protocol!!!");
		iUpperReceiver->Process(static_cast<RMBufChain&>(aPdu));
		}
	else 
		{
		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CIPV6BINDER_PROCESS1_3, "WARNING: dumping incoming packet, no protocol bound");
		aPdu.Free();
		}

	}
Esempio n. 8
0
ESock::MLowerDataSender::TSendResult CIPv6Binder::Send(RCommsBufChain& aPdu)
/**
 * Called by the protocol to send an outgoing IP packet to the network.
 *
 * @param aPdu The outgoing packet
 * @return Standard error codes
 */
	{
	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CIPV6BINDER_SEND1_1, "CIPv6Binder::Send");

#ifdef __BTT_LOGGING__
		LogPacket(static_cast<RMBufChain&>(aPdu));
#endif
	
		// Return <0: an error occurred
		// Return  0: no error, but don't send any more packets
	
#ifdef RAWIP_HEADER_APPENDED_TO_PACKETS
		iIPTagHeader->AddHeader(aPdu);
#endif // RAWIP_HEADER_APPENDED_TO_PACKETS
		
		return ESock::MLowerDataSender::TSendResult(iLowerDataSender->Send(aPdu));

	}
/**
 * @ingroup SnmpStack
 * @brief SNMP 요청 메시지를 전송한 후, 이에 대한 응답 메시지를 수신한다.
 * @param pclsRequest		SNMP 요청 메시지
 * @param pclsResponse	SNMP 응답 메시지
 * @returns 성공하면 true 를 리턴하고 실패하면 false 를 리턴한다.
 */
bool CSnmpSession::SendRecv( CSnmpMessage * pclsRequest, CSnmpMessage * pclsResponse )
{
	int iSendLen, iRecvLen = 0, n;
	bool	bRes = false;

	if( m_hSocket == INVALID_SOCKET )
	{
		if( Open() == false ) return false;
	}

	if( m_bTcp )
	{
		char szSend[SNMP_MAX_PACKET_SIZE], szRecv[SNMP_MAX_PACKET_SIZE];
		int iWantRecvLen = 0;

		iSendLen = pclsRequest->MakePacket( szSend, sizeof(szSend) );
		if( iSendLen == -1 )
		{
			CLog::Print( LOG_ERROR, "%s MakePacket error", __FUNCTION__ );
			return false;
		}

		if( TcpSend( m_hSocket, szSend, iSendLen ) == false )
		{
			CLog::Print( LOG_ERROR, "%s TcpSend error", __FUNCTION__ );
			return false;
		}

		while( 1 )
		{
			n = TcpRecv( m_hSocket, szRecv + iRecvLen, sizeof(szRecv) - iRecvLen, m_iMiliTimeout / 1000 ); 
			if( n <= 0 )
			{
				CLog::Print( LOG_ERROR, "%s recv error(%d)", __FUNCTION__, GetError() );
				return false;
			}

			iRecvLen += n;
			if( iWantRecvLen <= 0 )
			{
				iWantRecvLen = pclsResponse->GetPacketLen( szRecv, iRecvLen );
			}

			if( iWantRecvLen > 0 )
			{
				if( iRecvLen == iWantRecvLen ) break;
			}
		}

		if( pclsResponse->ParsePacket( szRecv, iRecvLen ) > 0 )
		{
			if( m_bDebug )
			{
				LogPacket( szRecv, iRecvLen );
			}

			if( pclsRequest->m_iRequestId == pclsResponse->m_iRequestId ||
					( pclsRequest->m_iMsgId > 0 && pclsRequest->m_iMsgId == pclsResponse->m_iMsgId ) )
			{
				bRes = true;
			}
		}
	}
	else
	{
		char szSend[SNMP_MAX_PACKET_SIZE], szRecv[SNMP_MAX_PACKET_SIZE];
		struct pollfd arrPoll[1];
		uint32_t	iIp;
		uint16_t	sPort;

		iSendLen = pclsRequest->MakePacket( szSend, sizeof(szSend) );
		if( iSendLen == -1 )
		{
			CLog::Print( LOG_ERROR, "%s MakePacket error", __FUNCTION__ );
			return false;
		}

		for( int iSend = 0; iSend <= m_iReSendCount; ++iSend )
		{
			if( UdpSend( m_hSocket, szSend, iSendLen, m_iIp, m_sPort ) == false )
			{
				CLog::Print( LOG_ERROR, "%s UdpSend error", __FUNCTION__ );
				return false;
			}

			TcpSetPollIn( arrPoll[0], m_hSocket );

POLL_START:
			n = poll( arrPoll, 1, m_iMiliTimeout );
			if( n > 0 )
			{
				iRecvLen = sizeof(szRecv);
				if( UdpRecv( m_hSocket, szRecv, &iRecvLen, &iIp, &sPort ) )
				{
					if( pclsResponse->ParsePacket( szRecv, iRecvLen ) > 0 )
					{
						if( m_bDebug )
						{
							LogPacket( szRecv, iRecvLen );
						}

						if( pclsRequest->m_iRequestId == pclsResponse->m_iRequestId ||
								( pclsRequest->m_iMsgId > 0 && pclsRequest->m_iMsgId == pclsResponse->m_iMsgId ) )
						{
							bRes = true;
							break;
						}
					}

					// 원하는 응답이 수신되지 않으면 다시 수신 대기로 진입한다.
					goto POLL_START;
				}
			}
		}
	}

	return bRes;
}