00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef MDWTEXTAUTHENTICATIONPROTOCOL_H
00021 #define MDWTEXTAUTHENTICATIONPROTOCOL_H
00022 #include <map>
00023
00024 #include "StreamServerApi.h"
00025
00026 namespace mdw
00027 {
00028 class Authentified;
00032 class TextAuthenticationProtocol: public StreamServerVisitor, StreamServer
00033 {
00034 public:
00035 TextAuthenticationProtocol (StreamServer &server);
00036
00037 ~TextAuthenticationProtocol();
00038
00039 virtual void visitRead (std::vector<char> &buffer, StreamInfo &info);
00040 virtual void visitConnect (StreamInfo &info);
00041 virtual void visitDisconnect (StreamInfo &info);
00042
00043 virtual void accept (StreamServerVisitor &visitor, int timeOutSec, int timeOutMicro);
00044 virtual void write (const char *buffer, int size, int streamId);
00045 virtual Stream &outStream (int streamId);
00046 virtual void close (int streamId);
00047
00048 private:
00049
00050 typedef enum
00051 {
00052 WaitingForUsername_e,
00053 WaitingForPassword_e,
00054 Connected_e
00055 } State_t;
00056
00057 struct StatusState
00058 {
00059 std::string username;
00060 std::string password;
00061 int numberFailures;
00062 State_t state;
00063 Authentified *auth;
00064 };
00065
00066 StreamServer &_server;
00067 StreamServerVisitor *_currentVisitor;
00068
00069 std::map<int, StatusState> _statusMap;
00070
00071 };
00072
00073 }
00074
00075 #endif