cdriver.hh
来自「Click is a modular router toolkit. To us」· HH 代码 · 共 110 行
HH
110 行
#ifndef CLICKY_CDRIVER_HH#define CLICKY_CDRIVER_HH 1#include "crouter.hh"namespace clicky {class cdriver { public: virtual ~cdriver() { } enum { dflag_background = 1, dflag_clear = 2, dflag_nonraw = 4 }; virtual bool active() const = 0; virtual int driver_mask() const = 0; virtual void do_read(const String &hname, const String &hparam, int flags) = 0; virtual void do_write(const String &hname, const String &hvalue, int flags) = 0; virtual void do_check_write(const String &hname, int flags) = 0; static int check_handler_name(const String &inname, String &ename, String &hname, ErrorHandler *errh); static void transfer_messages(crouter *rw, int status, const messagevector &messages);};class csocket_cdriver : public cdriver { public: csocket_cdriver(crouter *rw, GIOChannel *socket, bool ready); ~csocket_cdriver(); static GIOChannel *start_connect(IPAddress addr, uint16_t port, bool *ready, ErrorHandler *errh); bool active() const; int driver_mask() const; void do_read(const String &hname, const String &hparam, int flags); void do_write(const String &hname, const String &hvalue, int flags); void do_check_write(const String &hname, int flags); // actually private gboolean csocket_event(GIOCondition); private: enum { csocket_failed, csocket_connecting, csocket_initial, csocket_connected }; enum { dtype_read = 1, dtype_write = 2, dtype_check_write = 3 }; struct msg { crouter::throb_after tnotify; int type; int flags; String hname; String command; int command_datalen; int wpos; StringAccum sa; size_t rlinepos; size_t rendmsgpos; size_t rdatapos; size_t rdatalen; bool ignore_newline; msg(crouter *cr_, const String &hname_, const String &command_, int command_datalen_, int type_, int flags_) : tnotify(cr_, 400), type(type_), flags(flags_), hname(hname_), command(command_), command_datalen(command_datalen_), wpos(0), rlinepos(0), rendmsgpos((size_t) -1), rdatapos((size_t) -1), rdatalen(0), ignore_newline(false) { } }; crouter *_cr; GIOChannel *_csocket; guint _csocket_watch; int _csocket_state; int _csocket_minor_version; std::deque<msg *> _csocket_msgq; gboolean kill_with_dialog(GatherErrorHandler *gerrh, int gerrh_pos, const char *format, ...); bool msg_parse(msg *m, GatherErrorHandler *gerrh, int gerrh_pos); void add_msg(const String &hname, const String &command, int command_datalen, int type, int flags);};class clickfs_cdriver : public cdriver { public: clickfs_cdriver(crouter *cr, const String &prefix); bool active() const; int driver_mask() const; void do_read(const String &hname, const String &hparam, int flags); void do_write(const String &hname, const String &hvalue, int flags); void do_check_write(const String &hname, int flags); private: crouter *_cr; String _prefix; bool _active; bool _dot_h; String filename(const String &ename, const String &hname) const; void complain(const String &fullname, const String &ename, const String &hname, int errno_val, messagevector &messages);};}#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?