- updated man pages
[opensuse:smpppd.git] / smpppd / connection.h
1 // -*- c++ -*-
2
3 /*
4  *  Author: Arvin Schnell <arvin@suse.de>
5  */
6
7
8 #ifndef connection_h
9 #define connection_h
10
11
12 #include <string>
13 #include <list>
14
15 using std::string;
16 using std::list;
17
18 #include "connection-config.h"
19 #include "process.h"
20 #include "misc.h"
21 #include "pppstat.h"
22
23
24 class Connection
25 {
26
27 public:
28
29     enum Status { DISCONNECTED, LURKING, CONNECTING, CONNECTED, DISCONNECTING };
30
31     static Connection* create (const ConnectionConfig*, void (*) (bool, const char*),
32                                void (*) (Status), void (*) ());
33
34     virtual ~Connection ();
35
36     Status get_status () const { return status; }
37     static string status_name (Status);
38
39     virtual bool start () = 0;
40     virtual bool dialin () = 0;
41     virtual bool hangup () = 0;
42     virtual bool stop () = 0;
43     virtual bool set_channels (int) = 0;
44
45     virtual int action_flags () const = 0;
46     virtual int get_channels () const = 0;
47     virtual int max_channels () const = 0;
48
49     virtual void timer () = 0;
50
51     virtual void prepare_select (fd_set*, fd_set*) const = 0;
52     virtual void handle_select (fd_set*, fd_set*) = 0;
53
54     bool get_rxtx_bytes (bytes_t& rx_bytes, bytes_t& tx_bytes);
55
56     const ConnectionConfig* config;
57
58 protected:
59
60     Connection (const ConnectionConfig*, void (*) (bool, const char*),
61                 void (*) (Status), void (*) ());
62
63     bool accounting_up ();
64     bool accounting_down ();
65
66     /**
67      * The first integer specifies if this message is important
68      * and should be highlighted in the frontend.
69      */
70     void logit (bool, const char*, ...) const __attribute__ ((format (printf, 3, 4)));
71
72     void status_callback (Status);
73
74     void weexit ();
75
76     Status status;
77
78     PPPStat pppstat;
79
80     /* dns stuff */
81     bool dns_changed;
82
83     int reconnect_time;
84
85     void dns_modify (const string&, const string&);
86     void dns_restore ();
87
88     bool read_rxtx_bytes (const char* ifname);
89
90     bytes_t rx_bytes, tx_bytes;
91     bool once_equal;
92
93     /* adds ip options to the pppd */
94     bool add_ip_options (Process* pppd);
95
96     /* adds user and password options to the pppd */
97     bool add_user_pass_options (Process* pppd);
98
99     bool accounting_is_up;
100     time_t time_begin, time_end;
101     bytes_t rx_begin, rx_end;
102     bytes_t tx_begin, tx_end;
103
104     // we need callbacks for status, log and exit
105
106     void (*lcb) (bool, const char*);
107     void (*scb) (Status);
108     void (*ecb) ();
109
110     // checks if a peers file exists
111     bool check_peers_file (const char*);
112
113 };
114
115
116 #endif