Пример #1
0
/* session event callback routine: traces opening / closing sessions; sets the callbacks */
static void session_event_handler( CapEnv* env, TcpSession* sess, char event )
{
	char buff[512];
	switch( event )
	{
	case DSSL_EVENT_NEW_SESSION:
		SessionToString(sess, buff);
		printf( "\n=> New Session: %s", buff );
		SessionSetCallback( sess, data_callback_proc, error_callback_proc, NULL, sess );
		SessionSetMissingPacketCallback( sess, missing_packet_callback, MISSING_PACKET_COUNT, 
			MISSING_PACKET_TIMEOUT );
		break;

	case DSSL_EVENT_SESSION_CLOSING:
		SessionToString(sess, buff);
		printf( "\n<= Session closing: %s", buff );
		break;

	default:
		fprintf( stderr, "ERROR: Unknown session event code (%d)", (int)event );
		break;
	}
}
Пример #2
0
// Handles session startup and teardown
static void session_event_handler(CapEnv* env, TcpSession* sess, char event)
{
	char buff[512];
	SessionToString(sess, buff);
	FakeSessionState*	mySession;

	switch(event)
	{
		case DSSL_EVENT_NEW_SESSION:
			if (config.loglevel > 0)
			{
				if (config.daemon)
					syslog(LOG_INFO, "=> New Session: %s", buff);
				else
					fprintf(stderr, "\n=> New Session: %s", buff);
			}

		        if( ( mySession = malloc( sizeof( FakeSessionState ) ) ) != NULL )
		        {
				if( init_fake_session_state( mySession ) != -1 )
				{
					SessionSetCallback(sess, data_callback_proc, error_callback_proc, sess);
					sess->user_data = mySession;
					SessionSetMissingPacketCallback( sess, missing_packet_callback, MISSING_PACKET_COUNT, 
						MISSING_PACKET_TIMEOUT );
				}
				else
				{
					if (config.loglevel > 0)
	                                {
	                                        if (config.daemon)
	                                                syslog(LOG_INFO, "error: cannot init fake session: %s", buff);
	                                        else
	                                                fprintf(stderr, "Error: cannot init fake session: %s", buff);
	                                }
				}
			}
			else
			{
				if (config.loglevel > 0)
	                        {
                                	if (config.daemon)
                                        	syslog(LOG_INFO, "error: cannot allocate memory for fake session: %s", buff);
	                                else
	                                        fprintf(stderr, "Error: cannot allocate memory for fake session: %s", buff);
				}
                        }

			break;

		case DSSL_EVENT_SESSION_CLOSING:
			if (config.loglevel > 0)
			{
				// Get stats
				struct pcap_stat        myStats;
	                        pcap_stats(env->pcap_adapter, &myStats);

				if (config.daemon)
					syslog(LOG_INFO, "<= Session closing: %s\tpkts recv: %d pkts drop: %d", buff, myStats.ps_recv, myStats.ps_drop );
				else
					fprintf(stderr, "\n<= Session closing: %s\tpkts recv: %d pkts drop: %d", buff, myStats.ps_recv, myStats.ps_drop );
			}
			// Terminate session
			mySession = (FakeSessionState*)sess->user_data;
			if( mySession->handshakeSent )
				sendEmptyTCPSegment( mySession->ln, sess, mySession->serverSeq, mySession->clientSeq, TH_RST | TH_ACK, ePacketDirFromServer );
			// Clean up libnet and fake session object
			libnet_destroy( mySession->ln );
			free( sess->user_data );
			break;

		default:
			if (config.daemon)
				syslog(LOG_ERR, "unknown session event code (%d).", (int)event);
			else
				fprintf(stderr, "ERROR: Unknown session event code (%d).\n", (int)event);
			break;
	}
}