1 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 #ifndef _TCP_LINK_H_ 3 #define _TCP_LINK_H_ 4 5 #ifdef HAVE_CONFIG_H 6 #include <config.h> 7 #endif 8 9 #ifdef _WIN32 10 #include <winsock.h> 11 #else 12 #include <netinet/in.h> 13 #endif 14 15 #include <time.h> 16 17 #include "icq.h" 18 #include "icqpacket.h" 19 #include "list.h" 20 21 /* link mode bitfield values */ 22 #define TCP_LINK_MODE_RAW 1 23 #define TCP_LINK_MODE_HELLOWAIT 2 24 #define TCP_LINK_MODE_LISTEN 4 25 #define TCP_LINK_MODE_CONNECTING 8 26 #define TCP_LINK_SOCKS_CONNECTING 16 27 #define TCP_LINK_SOCKS_AUTHORIZATION 32 28 #define TCP_LINK_SOCKS_AUTHSTATUS 64 29 #define TCP_LINK_SOCKS_NOAUTHSTATUS 128 30 #define TCP_LINK_SOCKS_CROSSCONNECT 256 31 #define TCP_LINK_SOCKS_CONNSTATUS 512 32 33 /* link types */ 34 #define TCP_LINK_MESSAGE 1 35 #define TCP_LINK_CHAT 2 36 #define TCP_LINK_FILE 3 37 38 #define icq_TCPLinkBufferSize 4096 39 #define TCP_LINK_CONNECT_TIMEOUT 30 40 41 typedef struct icq_TCPLink_s 42 { 43 /* icq_TCPLink ICQLINK, type, mode, and session */ 44 ICQLINK *icqlink; 45 int type; 46 int mode; 47 int proxy_status; 48 void *session; 49 50 /* socket parameters */ 51 int socket; 52 struct sockaddr_in socket_address; 53 struct sockaddr_in remote_address; 54 55 /* data buffer for receive calls */ 56 char buffer[icq_TCPLinkBufferSize]; 57 int buffer_count; 58 59 /* packet queues */ 60 list *received_queue; 61 list *send_queue; 62 63 /* icq specific data, initialized by hello packet */ 64 unsigned long id; 65 unsigned long remote_version; 66 unsigned long remote_uin; 67 char flags; 68 69 /* connect timer */ 70 time_t connect_time; 71 72 } icq_TCPLink; 73 74 icq_TCPLink *icq_TCPLinkNew(ICQLINK *link); 75 void icq_TCPLinkDelete(void *p); 76 void icq_TCPLinkClose(icq_TCPLink *p); 77 void icq_TCPLinkNodeDelete(list_node *p); 78 79 int icq_TCPLinkConnect(icq_TCPLink *plink, DWORD uin, int port); 80 icq_TCPLink *icq_TCPLinkAccept(icq_TCPLink *plink); 81 int icq_TCPLinkListen(icq_TCPLink *plink); 82 83 int icq_TCPLinkOnDataReceived(icq_TCPLink *plink); 84 void icq_TCPLinkOnPacketReceived(icq_TCPLink *plink, icq_Packet *p); 85 void icq_TCPLinkOnConnect(icq_TCPLink *plink); 86 87 unsigned long icq_TCPLinkSendSeq(icq_TCPLink *plink, icq_Packet *p, 88 unsigned long sequence); 89 void icq_TCPLinkSend(icq_TCPLink *plink, icq_Packet *p); 90 91 void icq_TCPLinkProcessReceived(icq_TCPLink *plink); 92 93 icq_TCPLink *icq_FindTCPLink(ICQLINK *link, unsigned long uin, int type); 94 95 void icq_ChatRusConv_n(const char to[4], char *t_in, int t_len); 96 97 #endif /* _TCP_LINK_H_ */ 98