changelog
[monky] / tests / test-portmon.c
1 /* -------------------------------------------------------
2  * test-portmon.c: unit testing for libtcp-portmon library
3  * Philip Kovacs (kovacsp3@comcast.net) 2005
4  * 
5  * $Id$
6  * ------------------------------------------------------*/
7
8 #include <signal.h>
9 #include <unistd.h>
10 #include "libtcp-portmon.h"
11
12 volatile int g_signal;
13
14 tcp_port_monitor_collection_t *p_collection = NULL;
15
16 void set_terminate(int); 
17
18 int main()
19 {
20    tcp_port_monitor_t * p_monitor;
21    int i;
22    char buf[256];
23
24    g_signal=0;
25
26    (void) signal(SIGINT,set_terminate);
27
28    if ( (p_collection = create_tcp_port_monitor_collection( NULL )) == NULL) {
29         fprintf(stderr,"error: create_tcp_port_monitor_collection()\n");
30         exit(1);
31    }
32
33    if ( (p_monitor = create_tcp_port_monitor( 1, 65535, NULL )) == NULL) {
34         fprintf(stderr,"error: create_tcp_port_monitor()\n");
35         exit(1);
36    }
37
38    if ( (insert_tcp_port_monitor_into_collection( p_collection, p_monitor )) != 0 ) {
39          fprintf(stderr,"error: insert_tcp_port_monitor_into_collection()\n");
40          exit(1);
41    }
42         
43    while (1)
44    {
45       update_tcp_port_monitor_collection( p_collection );
46
47       if ( (p_monitor = find_tcp_port_monitor( p_collection, 1, 65535 )) == NULL ) {
48            fprintf(stderr,"error: find_tcp_port_monitor()\n");
49            exit(1);
50       }
51
52       peek_tcp_port_monitor( p_monitor, COUNT, 0, buf, sizeof(buf)-1 );
53       fprintf( stdout, "\n(%d,%d) COUNT=%s\n", 
54                         p_monitor->port_range_begin, p_monitor->port_range_end, buf );
55       for ( i=0; i<p_monitor->hash.size; i++ )
56       {
57            fprintf( stdout, "(%d,%d) -- connection %d -- ", 
58                         p_monitor->port_range_begin, p_monitor->port_range_end, i );
59            peek_tcp_port_monitor( p_monitor, REMOTEIP, i, buf, sizeof(buf)-1 );
60            fprintf( stdout, "%s ", buf );
61            peek_tcp_port_monitor( p_monitor, REMOTEHOST, i, buf, sizeof(buf)-1 );
62            fprintf( stdout, "(%s) ", buf );
63            peek_tcp_port_monitor( p_monitor, REMOTEPORT, i, buf, sizeof(buf)-1 );
64            fprintf( stdout, ": %s ", buf );
65            peek_tcp_port_monitor( p_monitor, LOCALIP, i, buf, sizeof(buf)-1 );
66            fprintf( stdout, "on %s ", buf );
67            peek_tcp_port_monitor( p_monitor, LOCALHOST, i, buf, sizeof(buf)-1 );
68            fprintf( stdout, "(%s) ", buf );
69            peek_tcp_port_monitor( p_monitor, LOCALPORT, i, buf, sizeof(buf)-1 );
70            fprintf( stdout, ": %s\n", buf );
71            /*
72            peek_tcp_port_monitor( p_monitor, LOCALSERVICE, i, buf, sizeof(buf)-1 );
73            fprintf( stdout, "(%s)\n", buf );
74            */
75       }
76  
77       printf("\n<< PRESS CNTL-C TO EXIT >>\n");
78
79       sleep(3);
80
81       if ( g_signal && p_collection ) {
82            destroy_tcp_port_monitor_collection(p_collection);
83            break;
84       }
85    }
86
87    printf("bye\n");
88    return(0);
89 }
90
91 void set_terminate(int sig)
92 {
93    g_signal=1;
94 }