39 #include <ptbuildopts.h>
128 virtual void OnStart();
135 virtual void OnStop();
139 virtual bool WritePrompt();
144 virtual bool ReadAndProcessInput();
149 virtual bool ProcessInput(
int ch);
150 virtual bool ProcessInput(
const PString & line);
158 virtual void OnCompletedLine();
165 PCLI & GetCLI()
const {
return m_cli; }
169 bool IsProcessingCommand()
const {
return m_state == e_ProcessingCommand; }
177 bool m_ignoreNextEOL;
207 Context & WriteUsage();
211 Context & WriteError(
220 Context & GetContext()
const {
return m_context; }
236 const char * prompt = NULL
256 bool runInBackground =
true
270 Context * StartContext(
272 bool autoDelete =
true,
273 bool runInBackground =
true
274 ) {
return StartContext(channel, channel, autoDelete, autoDelete, runInBackground); }
275 Context * StartContext(
278 bool autoDeleteRead =
true,
279 bool autoDeleteWrite =
true,
280 bool runInBackground =
true
286 virtual Context * StartForeground();
295 ) {
return Run(&channel, &channel,
false,
false); }
298 bool autoDelete =
true
299 ) {
return Run(channel, channel, autoDelete, autoDelete); }
303 bool autoDeleteRead =
true,
304 bool autoDeleteWrite =
true
314 ) {
return context != NULL && context->Run(); }
319 virtual Context * CreateContext();
324 virtual Context * AddContext(
325 Context * context = NULL
331 virtual void RemoveContext(
337 virtual void GarbageCollection();
346 virtual void OnReceivedLine(
362 virtual bool OnLogIn(
384 const char * command,
386 const char * help = NULL,
387 const char * usage = NULL,
388 const char * argSpec = NULL
403 const PString & GetNewLine()
const {
return m_newLine; }
408 void SetNewLine(
const PString & newLine) { m_newLine = newLine; }
413 bool GetRequireEcho()
const {
return m_requireEcho; }
418 void SetRequireEcho(
bool requireEcho) { m_requireEcho = requireEcho; }
423 const PString & GetEditCharacters()
const {
return m_editCharacters; }
428 void SetEditCharacters(
const PString & editCharacters) { m_editCharacters = editCharacters; }
433 const PString & GetPrompt()
const {
return m_prompt; }
438 void SetPrompt(
const PString & prompt) { m_prompt = prompt; }
443 const PString & GetUsernamePrompt()
const {
return m_usernamePrompt; }
448 void SetUsernamePrompt(
const PString & prompt) { m_usernamePrompt = prompt; }
453 const PString & GetPasswordPrompt()
const {
return m_passwordPrompt; }
458 void SetPasswordPrompt(
const PString & prompt) { m_passwordPrompt = prompt; }
463 const PString & GetUsername()
const {
return m_username; }
468 void SetUsername(
const PString & username) { m_username = username; }
473 const PString & GetPassword()
const {
return m_password; }
478 void SetPassword(
const PString & password) { m_password = password; }
483 const PCaselessString & GetCommentCommand()
const {
return m_commentCommand; }
488 void SetCommentCommand(
const PCaselessString & commentCommand) { m_commentCommand = commentCommand; }
493 const PCaselessString & GetExitCommand()
const {
return m_exitCommand; }
498 void SetExitCommand(
const PCaselessString & exitCommand) { m_exitCommand = exitCommand; }
503 const PCaselessString & GetHelpCommand()
const {
return m_helpCommand; }
508 void SetHelpCommand(
const PCaselessString & helpCommand) { m_helpCommand = helpCommand; }
514 const PString & GetHelpOnHelp()
const {
return m_helpOnHelp; }
520 void SetHelpOnHelp(
const PCaselessString & helpOnHelp) { m_helpOnHelp = helpOnHelp; }
525 const PCaselessString & GetRepeatCommand()
const {
return m_repeatCommand; }
530 void SetRepeatCommand(
const PCaselessString & repeatCommand) { m_repeatCommand = repeatCommand; }
535 const PCaselessString & GetHistoryCommand()
const {
return m_historyCommand; }
540 void SetHistoryCommand(
const PCaselessString & historyCommand) { m_historyCommand = historyCommand; }
545 const PString & GetNoHistoryError()
const {
return m_noHistoryError; }
550 void SetNoHistoryError(
const PString & noHistoryError) { m_noHistoryError = noHistoryError; }
555 const PString & GetCommandUsagePrefix()
const {
return m_commandUsagePrefix; }
560 void SetCommandUsagePrefix(
const PString & commandUsagePrefix) { m_commandUsagePrefix = commandUsagePrefix; }
565 const PString & GetCommandErrorPrefix()
const {
return m_commandErrorPrefix; }
570 void SetCommandErrorPrefix(
const PString & commandErrorPrefix) { m_commandErrorPrefix = commandErrorPrefix; }
575 const PString & GetUnknownCommandError()
const {
return m_unknownCommandError; }
580 void SetUnknownCommandError(
const PString & unknownCommandError) { m_unknownCommandError = unknownCommandError; }
604 struct InternalCommand {
610 typedef std::map<PString, InternalCommand> CommandMap_t;
611 CommandMap_t m_commands;
613 typedef std::list<Context *> ContextList_t;
614 ContextList_t m_contextList;
621 class PCLIStandard :
public PCLI
629 const char * prompt = NULL
638 virtual Context * StartForeground();
648 ) {
return RunScript(&channel,
false); }
651 bool autoDelete =
true
661 class PCLISocket :
public PCLI
668 const char * prompt = NULL,
669 bool singleThreadForAll =
false
681 bool runInBackground =
true
696 virtual Context * AddContext(
697 Context * context = NULL
703 virtual void RemoveContext(
718 WORD GetPort()
const {
return m_listenSocket.GetPort(); }
723 bool HandleSingleThreadForAll();
724 bool HandleIncoming();
727 bool m_singleThreadForAll;
732 typedef std::map<PSocket *, Context *> ContextMap_t;
733 ContextMap_t m_contextBySocket;
742 class PCLITelnet :
public PCLISocket
749 const char * prompt = NULL,
750 bool singleThreadForAll =
false
761 #endif // PTLIB_CLI_H