00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 #ifndef COMMUNICATE_H_
00014 #define COMMUNICATE_H_
00015 
00016 #include "channel.h"
00017 #include <gnutls/gnutls.h>
00018 #include <gnutls/extra.h>
00019 
00020 extern void set_blocking(int fileno, bool blocking);
00021 extern bool is_nonblocking_error (void);
00022 
00024 
00025 class communicate {
00026   private:
00028     list<channel> conns_;
00030     int serv_socket_;
00032     int type;
00034     sigc::signal<void, channel*> serv_handler;
00036     int channelnr;
00038     gnutls_certificate_credentials_t cred;
00039     gnutls_dh_params_t dh_params;
00040     gnutls_rsa_params_t rsa_params;
00041     std::string data_dir;
00042     bool init;
00043 
00044   public:
00045     communicate();
00046 
00048     ~communicate();
00049 
00050     void set_dir(std::string dir);
00052     std::string user;
00054     std::string session;
00056     long sessnr;
00057 
00059 
00062     channel* reading(const std::string file, sigc::signal<void, channel*> handler);
00063 
00065 
00068     channel* writing(const std::string file);
00069 
00071 
00074     channel* client(const std::string host, int port, sigc::signal<void, channel*> handler);
00075 
00077 
00080     bool reconnect(channel* ch);
00081 
00083     void server(int port, sigc::signal<void, channel*> handler);
00084 
00085 
00086     #ifndef no_gnutls
00088 
00091     channel* tls_client(const std::string host, int port, sigc::signal<void, channel*> handler);
00092 
00094     void tls_server(int port, sigc::signal<void, channel*> handler);
00095 
00097     void tls_reload();
00098     #endif
00099 
00101     void poll();
00102 
00104     void complete(int timeout);
00105 
00107     void server_close();
00108 };
00109 
00110 #endif