- updated man pages
[opensuse:smpppd.git] / smpppd / backend.h
1 // -*- c++ -*-
2
3 /*
4  *  Author: Arvin Schnell <arvin@suse.de>
5  */
6
7
8 #ifndef backend_h
9 #define backend_h
10
11
12 #include <netdb.h>
13 #include <netinet/in.h>
14 #include <sys/types.h>
15 #include <sys/socket.h>
16
17 #include <vector>
18
19 #include "lists.h"
20 #include "log.h"
21 #include "stream.h"
22 #include "defines.h"
23 #include "connection-config.h"
24
25
26 class Backend : public Stream
27 {
28
29 public:
30
31     Backend (int filedes);
32
33     enum { NEW_CONFIG, NEW_STATUS, NEW_RXTXBYTES, NEW_LOG1, NEW_LOG2 };
34     int append_buffer (const string& line);
35
36     enum Status { DISCONNECTED, LURKING, CONNECTING, CONNECTED, DISCONNECTING };
37
38     Status get_status () const { return status; }
39     int get_action_flags () const { return action_flags; }
40
41     string get_ifcfg_filename () const { return ifcfg; }
42     string get_provider_filename () const { return provider; }
43
44     int get_max_channels () const { return max_channels; }
45     int get_num_channels () const { return num_channels; }
46
47     bool get_debug () const { return debug; }
48
49     bytes_t get_rx_bytes () const { return rx_bytes; }
50     bytes_t get_tx_bytes () const { return tx_bytes; }
51
52     vector <string> get_last_log () const { return last_log; }
53
54 private:
55
56     Status status;
57     int action_flags;
58     string ifcfg, provider;
59     int max_channels, num_channels;
60     bool debug;
61     bytes_t rx_bytes, tx_bytes;
62     vector <string> last_log;
63
64     vector <string> buffer;
65
66 };
67
68
69 class Ifcfg
70 {
71
72     friend class Ifcfgs;
73
74 public:
75
76     Ifcfg (string ifcfg);
77     ~Ifcfg ();
78
79     void start ();
80     void start (const string&);
81     void dialin ();
82     void hangup ();
83     void stop ();
84
85     void set_channels (int);
86
87     void select_provider (const string&);
88
89     string ifcfg;               // FIXME private
90     string ifcfg_menu;
91
92     ConnectionConfig* config;
93
94     Backend* backend;
95
96     ProviderList providerlist;
97
98     MyLog log;
99
100 // private:
101
102     int sockfd;
103
104 };
105
106
107 class Ifcfgs : public std::vector <Ifcfg*>
108 {
109
110 public:
111
112     ~Ifcfgs ();
113
114     void prepare_select (fd_set*, fd_set*) const;
115     void handle_select (fd_set*, fd_set*);
116
117     Ifcfg* find (const string& ifcfg);
118
119 };
120
121
122 extern Ifcfgs ifcfgs;
123
124
125 #endif