WvStreams
wvstreamsdebuggerserver.h
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