1 /*
2  * dcc.h: Things dealing client to client connections.
3  *
4  * Copyright(c) 1998 Colten Edwards
5  *
6  */
7 
8 #ifndef __dcc_h_
9 #define __dcc_h_
10 
11 	/*
12 	 * these are all used in the bot_link layer. the dcc_printf is used in
13 	 * a few other places as well. ie dcc.c
14 	 */
15 	int	BX_dcc_printf (int, char *, ...);
16 	void	tandout_but (int, char *, ...);
17 	void	chanout_but (int, char *, ...);
18 	int	handle_tcl_chan (int, char *, char *, char *);
19 	int	tand_chan (int, char *);
20 	int	tand_zapf (int, char *);
21 	int	tand_zapfbroad (int, char *);
22 	int	handle_dcc_bot (int, char *);
23 	int	tandem_join (int, char *);
24 	int	tandem_part (int, char *);
25 	int	send_who_to (int, char *, int);
26 	int	tand_who (int, char *);
27 	int	tand_whom (int, char *);
28 	int	tell_who (int, char *);
29 	int	send_who (int, char *);
30 	int	tell_whom (int, char *);
31 	int	send_whom (int, char *);
32 	int	tand_priv (int, char *);
33 	int	tand_boot (int, char *);
34 	int	tand_privmsg (int, char *);
35 	int	tand_part (int, char *);
36 	int	tand_join (int, char *);
37 	int	tand_clink (int, char *);
38 	int	tand_command (int, char *);
39 	int	cmd_cmsg (int, char *);
40 	int	cmd_cboot (int, char *);
41 	int	cmd_act (int, char *);
42 	int	cmd_help (int, char *);
43 	int	cmd_msg (int, char *);
44 	int	cmd_say (int, char *);
45 	int	cmd_tcl (int, char *);
46 	int	cmd_chat (int, char *);
47 	int	cmd_quit (int, char *);
48 	int	cmd_invite (int, char *);
49 	int	cmd_echo (int, char *);
50 	int	cmd_boot (int, char *);
51 	int	cmd_ops (int, char *);
52 	int	cmd_adduser (int, char *);
53 	int	cmd_ircii (int, char *);
54 	int	cmd_whoami (int, char *);
55 	int	send_command (int, char *);
56 
57 	int	dcc_ftpcommand (char *, char *);
58 
59 
60 /*
61  * these definitions are mostly used by ircII as well
62  * I expanded the flags to a full 32 bits to allow for future
63  * expansion.
64  */
65 #define DCC_PACKETID  0xfeab		/* used to figure out endianess
66 					 * as well as identify the resend
67 					 * packet
68 					 */
69 #define MAX_DCC_BLOCK_SIZE 16384	/*
70 					 * this is really arbritrary value.
71 					 * we can actually make this a lot
72 					 * larger and things will still work
73 					 * as expected. The network layer places
74 					 * a limit however.
75 					 */
76 
77 #define DCC_CHAT	0x00000001
78 
79 #define DCC_FILEOFFER	0x00000002
80 #define DCC_FILEREAD	0x00000003
81 
82 #define	DCC_RAW_LISTEN	0x00000004
83 #define	DCC_RAW		0x00000005
84 
85 #define DCC_REFILEOFFER	0x00000006
86 #define DCC_REFILEREAD	0x00000007
87 
88 #define DCC_BOTMODE	0x00000008
89 #define DCC_FTPOPEN	0x00000009
90 #define DCC_FTPGET	0x0000000a
91 #define DCC_FTPSEND	0x0000000b
92 #define DCC_FTPCOMMAND	0x0000000c
93 #define DCC_TYPES	0x000000ff
94 
95 #define DCC_WAIT	0x00010000
96 #define DCC_ACTIVE	0x00020000
97 #define DCC_OFFER	0x00040000
98 #define DCC_DELETE	0x00080000
99 #define DCC_TWOCLIENTS	0x00100000
100 
101 #ifdef NON_BLOCKING_CONNECTS
102 #define DCC_CNCT_PEND	0x00200000
103 #endif
104 
105 #ifdef HAVE_SSL
106 #define DCC_SSL		0x04000000
107 #endif
108 
109 #define DCC_QUEUE	0x00400000
110 #define DCC_TDCC	0x00800000
111 #define DCC_BOTCHAT	0x01000000
112 #define DCC_ECHO	0x02000000
113 #define DCC_STATES	0xffffff00
114 
115 
116 	int	check_dcc_list (char *);
117 	int	dcc_exempt_save (FILE *);
118 
119 	void	BX_dcc_filesend(char *, char *);
120 	void	BX_dcc_resend(char *, char *);
121 	void	dcc_stats(char *, char *);
122 	void	dcc_chat(char *, char *);
123 	void	dcc_ftpopen(char *, char *);
124 	void	dcc_glist(char *, char *);
125 	void	dcc_chatbot(char *, char *);
126 	void	dcc_resume(char *, char *);
127 	void	dcc_rename(char *, char *);
128 
129 	int	BX_get_active_count(void);
130 	int	dcc_ftpcommand(char *, char *);
131 	void	process_dcc(char *);
132 	int	dcc_activechat(char *);	/* identify all active chat dcc's */
133 	int	dcc_activebot(char *);	/* identify all active bot's */
134 	int	dcc_activeraw(char *);  /* identify all active raw connects */
135 	void	dcc_chat_transmit(char *, char *, char *, char *, int);
136 	void	dcc_bot_transmit(char *, char *, char *);
137 	void	dcc_raw_transmit(char *, char *, char *);
138 
139 	void	register_dcc_type(char *, char *, char *, char *, char *, char *, char *, char *, void (*func)(int));
140 
141 	void	dcc_reject(char *, char *, char *);
142 	char	*dcc_raw_connect(char *, unsigned short);
143 	char	*dcc_raw_listen(int port);
144 	void	close_all_dcc(void);
145 	void	dcc_sendfrom_queue(void);
146 	void	dcc_check_idle(void);
147 	int	check_dcc_socket(int);
148 	char	*get_dcc_info(SocketList *, DCC_int *, int);
149 	void	init_dcc_table(void);
150 	int BX_remove_all_dcc_binds(char *);
151 	int BX_remove_dcc_bind(char *, int);
152 
153 
154 	int	BX_add_dcc_bind(char *, char *, void *, void *, void *, void *, void *);
155 
156 	SocketList *BX_find_dcc(char *, char *, char *, int, int, int, int);
157 	void	BX_erase_dcc_info(int, int, char *, ...);
158 	DCC_int	*BX_dcc_create(char *, char *, char *, unsigned long, int, int, unsigned long, void (*func)(int));
159 	int	close_dcc_number(int);
160 
161 	char *	equal_nickname (const char *);
162 
163 #define DCC_STRUCT_TYPE  0xdcc0dcc0
164 
165 #endif /* __dcc_h_ */
166