Line data Source code
1 : #include "../burp.h" 2 : #include "../asfd.h" 3 : #include "../async.h" 4 : #include "../conf.h" 5 : #include "../cmd.h" 6 : #include "../iobuf.h" 7 : #include "../log.h" 8 : #include "monitor.h" 9 : 10 4 : static int copy_input_to_output(struct asfd *in, struct asfd *out) 11 : { 12 4 : struct iobuf wbuf; 13 4 : iobuf_set(&wbuf, CMD_GEN, in->rbuf->buf, in->rbuf->len); 14 4 : return out->write(out, &wbuf); 15 : } 16 : 17 : #ifndef UTEST 18 : static 19 : #endif 20 3 : int monitor_client_main_loop(struct async *as) 21 : { 22 3 : struct asfd *asfd; 23 3 : struct asfd *sfd; // Server fd. 24 3 : struct asfd *sin; 25 3 : struct asfd *sout; 26 : 27 3 : sfd=as->asfd; 28 3 : sin=sfd->next; 29 3 : sout=sin->next; 30 : 31 7 : while(1) 32 : { 33 7 : if(as->read_write(as)) 34 : { 35 3 : logp("Exiting main loop\n"); 36 3 : break; 37 : } 38 : 39 16 : for(asfd=as->asfd; asfd; asfd=asfd->next) 40 16 : while(asfd->rbuf->buf) 41 : { 42 4 : if(asfd==sfd) 43 : { 44 2 : if(copy_input_to_output(sfd, sout)) 45 0 : goto error; 46 : } 47 2 : else if(asfd==sin) 48 : { 49 2 : if(copy_input_to_output(sin, sfd)) 50 0 : goto error; 51 : } 52 4 : iobuf_free_content(asfd->rbuf); 53 4 : if(asfd->parse_readbuf(asfd)) 54 0 : goto error; 55 : } 56 : 57 : //if(sel) logp("sel: %s\n", sel->name); 58 : } 59 : 60 3 : error: 61 3 : return -1; 62 : } 63 : 64 0 : int do_monitor_client(struct asfd *asfd) 65 : { 66 0 : int ret=-1; 67 0 : struct async *as=asfd->as; 68 0 : logp("in monitor\n"); 69 : 70 : // I tried to just printf to stdout, but the strings to print would be 71 : // so long that I would start to get printf errors. 72 : // Using the asfd stuff works well though. 73 0 : if(!setup_asfd_stdin(as) 74 0 : || !setup_asfd_stdout(as)) 75 0 : goto end; 76 0 : ret=monitor_client_main_loop(as); 77 0 : end: 78 0 : return ret; 79 : }