4
// author: arvin@suse.de
14
#include "wvdialmon.h"
17
WvStream *pppd_log = NULL; // to read messages of pppd
22
int main( int argc, char ** argv )
25
char *argv_ppp[ argc+10 ];
27
argv_ppp[argc_ppp++] = "/usr/sbin/pppd";
29
for( int i = 1; i < argc; i++ )
30
argv_ppp[argc_ppp++] = argv[i];
33
// open a pipe to access the messages of pppd
35
if( pipe( pppd_msgfd ) == -1 ) {
36
fprintf( stderr, "pipe failed: %s\n", strerror(errno) );
41
sprintf( buffer, "%d", pppd_msgfd[1] );
42
argv_ppp[argc_ppp++] = "logfd";
43
argv_ppp[argc_ppp++] = buffer;
45
pppd_log = new WvStream( pppd_msgfd[0] );
47
pppd_mon.setconnectmsg( "Connected..." );
51
for( int i = 0; i < argc_ppp; i++ )
52
printf( "%s\n", argv_ppp[i] );
59
if( pid == (pid_t) 0 ) { // we are the child
60
argv_ppp[argc_ppp] = NULL;
61
execv( argv_ppp[0], argv_ppp );
62
fprintf( stderr, "exec failed: %s\n", strerror(errno) );
66
if( pid < (pid_t) 0 ) { // the fork failed
67
fprintf( stderr, "error: can't fork child process\n" );
73
ppp_pipe = new WvPipe( argv_ppp[0], argv_ppp, false, false, false );
83
// see if pppd is still alive
88
// now watch for messages and output to stdout
90
if( pppd_log != NULL && pppd_log->isok() ) {
96
line = pppd_log->getline( 100 );
98
char *buffer1 = pppd_mon.analyse_line( line );
99
if( buffer1 != NULL && buffer1[0] != '\0' ) {
100
char buffer2[ strlen( buffer1 ) + 10 ];
101
sprintf( buffer2, "pppd: %s", buffer1 );
102
fprintf( stdout, "%s", buffer2 );
105
} while( line != NULL );
111
exit( EXIT_SUCCESS );