QTMSockets.hpp (TeXmacs-2.1.1-src) | : | QTMSockets.hpp (TeXmacs-2.1.2-src) | ||
---|---|---|---|---|
skipping to change at line 23 | skipping to change at line 23 | |||
#include <QApplication> | #include <QApplication> | |||
#include <QObject> | #include <QObject> | |||
#include <QThread> | #include <QThread> | |||
#include <QSocketNotifier> | #include <QSocketNotifier> | |||
#include "hashset.hpp" | #include "hashset.hpp" | |||
#include "string.hpp" | #include "string.hpp" | |||
#include "tm_link.hpp" | #include "tm_link.hpp" | |||
#ifndef OS_MINGW | #ifndef OS_MINGW | |||
#include <sys/types.h> | #include <sys/types.h> | |||
#include <sys/socket.h> | #include <sys/socket.h> | |||
#include <netinet/in.h> | #include <netinet/in.h> | |||
#define NMSPC(a) a | ||||
#define SOCKADDR_IN sockaddr_in | #define SOCKADDR_IN sockaddr_in | |||
#define SOCKADDR_IN6 sockaddr_in6 | ||||
#define SOCKADDR sockaddr | #define SOCKADDR sockaddr | |||
#define SOCKADDR_STORAGE sockaddr_storage | ||||
#else | #else | |||
namespace wsoc { | namespace wsoc { | |||
#include <winsock2.h> | #include <winsock2.h> | |||
#include <ws2tcpip.h> | #include <ws2tcpip.h> | |||
} | } | |||
#define NMSPC(a) wsoc::a | ||||
typedef ushort u_short; | ||||
typedef ulong u_long; | ||||
typedef uint32_t in_addr_t; | typedef uint32_t in_addr_t; | |||
typedef int socklen_t; | typedef int socklen_t; | |||
#define SOCKADDR_IN wsoc::sockaddr_in | #define SOCKADDR_IN wsoc::sockaddr_in | |||
#define SOCKADDR_IN6 wsoc::sockaddr_in6 | ||||
#define SOCKADDR wsoc::sockaddr | #define SOCKADDR wsoc::sockaddr | |||
#define SOCKADDR_STORAGE wsoc::sockaddr_storage | ||||
#endif | #endif | |||
extern unsigned dbg_cnt; | // Common structures fors sockets | |||
extern unsigned qtmsocket_debug_count; | ||||
string debug_io_string (string s); | string debug_io_string (string s); | |||
#define DBG_IO(a) \ | #define DBG_IO(a) \ | |||
if (DEBUG_IO) debug_io << "TeXmacs-" << dbg_cnt++<<"] " << a << "\n" | if (DEBUG_IO) debug_io << "TeXmacs " \ | |||
#define DBG_IOS(a,s) if(N(s)) DBG_IO (a << debug_io_string (s)) | << qtmsocket_debug_count++ << "] " << a << "\n" | |||
#define DBG_IOS(a,s) \ | ||||
if(N(s)) DBG_IO (a << debug_io_string (s)) | ||||
enum state { ST_OK, ST_WSA, ST_SOCKET, ST_FCNTL, ST_BIND, | enum state { ST_OK, ST_WSA, ST_SOCKET, ST_FCNTL, ST_BIND, | |||
ST_LISTEN, ST_CONNECTION, ST_GETHOST, ST_NOTIF, | ST_LISTEN, ST_CONNECTION, ST_GETHOST, ST_NOTIF, | |||
ST_VOID, ST_HALTED, ST_CLOSED }; | ST_VOID, ST_HALTED, ST_CLOSED }; | |||
typedef int IdClt; | ||||
class socket_basic { | class socket_basic { | |||
public: | public: | |||
bool alive () { return st == ST_OK; } | bool alive () { return st == ST_OK; } | |||
protected: | protected: | |||
socket_basic(void); | socket_basic(void); | |||
~socket_basic(); | ~socket_basic(); | |||
int sock; | int sock; | |||
int err; | int err; | |||
enum state st; | enum state st; | |||
private: | private: | |||
static int count; | static int count; | |||
#ifdef OS_MINGW | #ifdef OS_MINGW | |||
static wsoc::WSADATA wsadata; | static wsoc::WSADATA wsadata; | |||
#endif | #endif | |||
}; | }; | |||
// Socket for clients | ||||
class socket_link: public QObject, public socket_basic, public tm_link_rep { | class socket_link: public QObject, public socket_basic, public tm_link_rep { | |||
Q_OBJECT | Q_OBJECT | |||
public: | public: | |||
socket_link (int s,struct SOCKADDR_IN *addr); | socket_link (int s, SOCKADDR_STORAGE* addr); | |||
socket_link (string host, u_short port=6561); | socket_link (string host, unsigned short port=6561); | |||
~socket_link (); | ~socket_link (); | |||
string start (); | string start (); | |||
void write (string s, int channel=LINK_OUT); | void write (string s, int channel=LINK_OUT); | |||
string& watch (int channel); | string& watch (int channel); | |||
string read (int channel); | string read (int channel); | |||
void listen (int msecs); | void listen (int msecs); | |||
void interrupt () {} | void interrupt () {} | |||
void stop (); | void stop (); | |||
bool alive () { return socket_basic::alive(); } | bool alive () { return socket_basic::alive(); } | |||
IdClt getid () { return id; } | int getid () { return id; } | |||
public slots: | public slots: | |||
void data_set_ready (int); | void data_set_ready (int); | |||
void ready_to_send (int); | void ready_to_send (int); | |||
signals: | signals: | |||
void disconnection (class socket_link * clt); | void disconnection (socket_link* clt); | |||
private : | private : | |||
static IdClt nr_ids; | int id; | |||
IdClt id; | ||||
string inbuf; | string inbuf; | |||
string outbuf; | string outbuf; | |||
QSocketNotifier *qsnr,*qsnw; | QSocketNotifier *qsnr,*qsnw; | |||
struct SOCKADDR_IN add; | SOCKADDR_STORAGE add; | |||
}; | }; | |||
// Socket for servers | ||||
class socket_server: public QObject, public socket_basic { | class socket_server: public QObject, public socket_basic { | |||
Q_OBJECT | Q_OBJECT | |||
public: | public: | |||
socket_server(in_addr_t add, u_short port=6561); | socket_server (string host, unsigned short port=6561); | |||
~socket_server(); | ~socket_server(); | |||
string read (IdClt clt); | string read (int clt); | |||
void write (IdClt clt, string s); | void write (int clt, string s); | |||
enum state st; | enum state st; | |||
int err; | int err; | |||
int srv_count() { return N(clts); } | int srv_count() { return N(clts); } | |||
public slots: | public slots: | |||
void connection (int); | void connection (int); | |||
void disconnection (socket_link* clt); | void disconnection (socket_link* clt); | |||
private : | private : | |||
socket_link* find_client (IdClt id); | socket_link* find_client (int id); | |||
hashset<pointer> clts; | hashset<pointer> clts; | |||
QSocketNotifier *qsnc; | QSocketNotifier *qsnc; | |||
}; | }; | |||
End of changes. 23 change blocks. | ||||
20 lines changed or deleted | 33 lines changed or added |