WvStreams
|
00001 /* -*- Mode: C++ -*- 00002 * Worldvisions Weaver Software: 00003 * Copyright (C) 1997-2002 Net Integration Technologies, Inc. 00004 * 00005 * A server stream for WvStreamsDebugger connections 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 // Username, salt, md5sum("%s%s", salt, password) 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