00001
00002
00003
00004
00005
00006
00007 #ifndef __WVSTREAMSDEBUGGERSERVER_H
00008 #define __WVSTREAMSDEBUGGERSERVER_H
00009
00010 #include "wvstream.h"
00011 #include "wvstreamclone.h"
00012 #include "wvaddr.h"
00013 #include "wvistreamlist.h"
00014 #include "wvstreamsdebugger.h"
00015 #include "wvlog.h"
00016
00017 class WvUnixAddr;
00018 class WvUnixListener;
00019 class WvTCPListener;
00020
00021 class WvStreamsDebuggerServer : public WvStream
00022 {
00023 struct Connection : public WvStreamClone
00024 {
00025 WvStreamsDebugger debugger;
00026 WvString salt;
00027
00028 Connection(IWvStream *s);
00029
00030 void result_cb(WvStringParm cmd, WvStringList &results);
00031
00032 void send(WvStringParm code, WvStringParm result);
00033 void send(WvStringParm code, WvStringList &results);
00034
00035 void choose_salt();
00036 };
00037
00038 typedef wv::function<bool(WvStringParm, WvStringParm, WvStringParm)> AuthCallback;
00039
00040 WvLog log;
00041
00042 WvUnixListener *unix_listener;
00043 void unix_listener_cb(IWvStream *s);
00044 void unix_listener_close_cb();
00045
00046 WvTCPListener *tcp_listener;
00047 void tcp_listener_cb(IWvStream *s);
00048 void tcp_listener_close_cb();
00049
00050 AuthCallback auth_cb;
00051
00052 void auth_request_cb(Connection &s);
00053 void auth_response_cb(Connection &s);
00054 void ready_cb(Connection &s);
00055
00056 WvIStreamList streams;
00057
00058 public:
00059 WvStreamsDebuggerServer(const WvUnixAddr &unix_addr,
00060 AuthCallback _auth_cb = AuthCallback(),
00061 const WvIPPortAddr &tcp_addr = WvIPPortAddr());
00062 ~WvStreamsDebuggerServer();
00063
00064 void set_auth_callback(AuthCallback _auth_cb)
00065 { auth_cb = _auth_cb; }
00066 };
00067
00068 #endif // __WVSTREAMSDEBUGGERSERVER_H