prot-a-send-async.c 6.25 KB
Newer Older
Linus Tolke's avatar
Linus Tolke committed
1
/*
2
 * $Id: prot-a-send-async.c,v 0.26 2001/12/22 17:00:10 ceder Exp $
3
 * Copyright (C) 1991, 1993-1999  Lysator Academic Computer Association.
Linus Tolke's avatar
Linus Tolke committed
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 *
 * This file is part of the LysKOM server.
 * 
 * LysKOM is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by 
 * the Free Software Foundation; either version 1, or (at your option) 
 * any later version.
 * 
 * LysKOM is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with LysKOM; see the file COPYING.  If not, write to
 * Lysator, c/o ISY, Linkoping University, S-581 83 Linkoping, SWEDEN,
 * or the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, 
 * MA 02139, USA.
 *
 * Please mail bug reports to bug-lyskom@lysator.liu.se. 
 */
Per Cederqvist's avatar
Per Cederqvist committed
25
26
27
28
/*
 * Asynchronous messages in protocol A.
 */

David Byers's avatar
David Byers committed
29
30
31
32
33

#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

Per Cederqvist's avatar
Per Cederqvist committed
34
#include <setjmp.h>
35
36
37
38
39
40
#include <time.h>
#include <sys/types.h>
#include <sys/socket.h>
#ifdef HAVE_STDARG_H
#  include <stdarg.h>
#endif
Per Cederqvist's avatar
Per Cederqvist committed
41

Per Cederqvist's avatar
Per Cederqvist committed
42
#include "misc-types.h"
43
#include "s-string.h"
Per Cederqvist's avatar
Per Cederqvist committed
44
#include "kom-types.h"
Per Cederqvist's avatar
Per Cederqvist committed
45
#include "com.h"
46
#include "async.h"
Per Cederqvist's avatar
Per Cederqvist committed
47
48
#include "connections.h"
#include "prot-a-send-async.h"
Per Cederqvist's avatar
Per Cederqvist committed
49
#include "async.h"
50
#include "isc-interface.h"
Per Cederqvist's avatar
Per Cederqvist committed
51
#include "prot-a-output.h"
Per Cederqvist's avatar
Per Cederqvist committed
52

53

Per Cederqvist's avatar
Per Cederqvist committed
54
55
56
static void
async_header(Connection *fp,
	     int   no_of_tokens,
57
	     enum async fnc)
Per Cederqvist's avatar
Per Cederqvist committed
58
{
59
60
61
    isc_putc(':', fp->isc_session);
    isc_putul(no_of_tokens, fp->isc_session);
    prot_a_output_ul(fp, fnc);
Per Cederqvist's avatar
Per Cederqvist committed
62
63
64
65
66
67
68
69
}



    
static void
async_trailer(Connection *fp)
{
70
71
    isc_putc('\n', fp->isc_session);
    isc_flush(fp->isc_session);
Per Cederqvist's avatar
Per Cederqvist committed
72
73
74
}


75
76
77
78
79
80
81
void
prot_a_async_new_text_old(Connection *cptr,
                          Text_no	      text_no,
                          Text_stat      *text_s)
{
    ASYNC_CHECK_ACCEPT(cptr, ay_new_text_old);
    async_header(cptr, 16, ay_new_text_old);
82
    prot_a_output_ul(cptr, text_no);
83
84
85
86
    prot_a_output_text_stat_old(cptr, text_s);
    async_trailer(cptr);
}

Per Cederqvist's avatar
Per Cederqvist committed
87
88
void
prot_a_async_new_text(Connection *cptr,
89
90
                      Text_no	      text_no,
                      Text_stat      *text_s)
Per Cederqvist's avatar
Per Cederqvist committed
91
{
92
    ASYNC_CHECK_ACCEPT(cptr, ay_new_text);
David Byers's avatar
David Byers committed
93
    async_header(cptr, 18, ay_new_text);
94
    prot_a_output_ul(cptr, text_no);
David Byers's avatar
David Byers committed
95
    prot_a_output_text_stat(cptr, text_s);
Per Cederqvist's avatar
Per Cederqvist committed
96
97
98
99
100
101
102
103
    async_trailer(cptr);
}


void
prot_a_async_i_am_on(Connection *cptr,
		     Who_info info)
{
104
    ASYNC_CHECK_ACCEPT(cptr, ay_i_am_on);
Per Cederqvist's avatar
Per Cederqvist committed
105
106
107
108
109
110
111
112
113
114
    async_header(cptr, 5, ay_i_am_on);
    prot_a_output_who_info(cptr, &info);
    async_trailer(cptr);
}

void
prot_a_async_logout(Connection *cptr,
		    Pers_no pers_no,
		    Session_no session_no)
{
115
    ASYNC_CHECK_ACCEPT(cptr, ay_logout);
Per Cederqvist's avatar
Per Cederqvist committed
116
    async_header(cptr, 2, ay_logout);
117
118
    prot_a_output_ul(cptr, pers_no);
    prot_a_output_ul(cptr, session_no);
Per Cederqvist's avatar
Per Cederqvist committed
119
120
121
122
123
124
125
126
127
    async_trailer(cptr);
}

void
prot_a_async_new_name(Connection *cptr,
		      Conf_no conf_no,
		      String old_name,
		      String new_name)
{
128
    ASYNC_CHECK_ACCEPT(cptr, ay_new_name);
Per Cederqvist's avatar
Per Cederqvist committed
129
    async_header(cptr, 3, ay_new_name);
130
    prot_a_output_ul(cptr, conf_no);
Per Cederqvist's avatar
Per Cederqvist committed
131
132
133
134
135
136
137
138
    prot_a_output_string(cptr, old_name);
    prot_a_output_string(cptr, new_name);
    async_trailer(cptr);
}

void
prot_a_async_sync_db(Connection *cptr)
{
139
    ASYNC_CHECK_ACCEPT(cptr, ay_sync_db);
Per Cederqvist's avatar
Per Cederqvist committed
140
141
142
143
144
145
146
147
    async_header(cptr, 0, ay_sync_db);
    async_trailer(cptr);
}

void
prot_a_async_forced_leave_conf(Connection *cptr,
			       Conf_no         conf_no)
{
148
    ASYNC_CHECK_ACCEPT(cptr, ay_leave_conf);
Per Cederqvist's avatar
Per Cederqvist committed
149
    async_header(cptr, 1, ay_leave_conf);
150
    prot_a_output_ul(cptr, conf_no);
Per Cederqvist's avatar
Per Cederqvist committed
151
152
153
154
155
156
157
158
    async_trailer(cptr);
}

void
prot_a_async_login(Connection *cptr,
		   Pers_no	   pers_no,
		   int		   session_no)
{
159
    ASYNC_CHECK_ACCEPT(cptr, ay_login);
Per Cederqvist's avatar
Per Cederqvist committed
160
    async_header(cptr, 2, ay_login);
161
162
    prot_a_output_ul(cptr, pers_no);
    prot_a_output_ul(cptr, session_no);
Per Cederqvist's avatar
Per Cederqvist committed
163
164
    async_trailer(cptr);
}
165

Per Cederqvist's avatar
Per Cederqvist committed
166
167
168
void
prot_a_async_rejected_connection(Connection *cptr)
{
169
    ASYNC_CHECK_ACCEPT(cptr, ay_rejected_connection);
Per Cederqvist's avatar
Per Cederqvist committed
170
171
172
173
174
175
    async_header(cptr, 0, ay_rejected_connection);
    async_trailer(cptr);
}
    
void
prot_a_async_send_message(Connection *cptr,
176
			  Conf_no     recipient,
Per Cederqvist's avatar
Per Cederqvist committed
177
178
179
			  Pers_no     sender,
			  String      message)
{
180
    ASYNC_CHECK_ACCEPT(cptr, ay_send_message);
Per Cederqvist's avatar
Per Cederqvist committed
181
    async_header(cptr, 3, ay_send_message);
182
183
    prot_a_output_ul(cptr, recipient);
    prot_a_output_ul(cptr, sender);
Per Cederqvist's avatar
Per Cederqvist committed
184
185
186
    prot_a_output_string(cptr, message);
    async_trailer(cptr);
}
187
188
189
190
191
192
193

void
prot_a_async_deleted_text(Connection *cptr,
                         Text_no	      text_no,
                         Text_stat      *text_s)
{
    ASYNC_CHECK_ACCEPT(cptr, ay_deleted_text);
194
    async_header(cptr, 18, ay_deleted_text);
195
    prot_a_output_ul(cptr, text_no);
196
197
198
199
    prot_a_output_text_stat(cptr, text_s);
    async_trailer(cptr);
}

David Byers's avatar
David Byers committed
200
201
202
203
204
205
206
207
void
prot_a_async_new_recipient(Connection   *cptr,
                           Text_no      text_no,
                           Conf_no      conf_no,
                           Info_type    type)
{
    ASYNC_CHECK_ACCEPT(cptr, ay_new_recipient);
    async_header(cptr, 3, ay_new_recipient);
208
209
210
    prot_a_output_ul(cptr, text_no);
    prot_a_output_ul(cptr, conf_no);
    prot_a_output_ul(cptr, type);
David Byers's avatar
David Byers committed
211
212
213
214
215
216
217
218
219
220
221
    async_trailer(cptr);
}

void
prot_a_async_sub_recipient(Connection   *cptr,
                           Text_no      text_no,
                           Conf_no      conf_no,
                           Info_type    type)
{
    ASYNC_CHECK_ACCEPT(cptr, ay_sub_recipient);
    async_header(cptr, 3, ay_sub_recipient);
222
223
224
    prot_a_output_ul(cptr, text_no);
    prot_a_output_ul(cptr, conf_no);
    prot_a_output_ul(cptr, type);
David Byers's avatar
David Byers committed
225
226
227
228
229
230
231
232
233
234
    async_trailer(cptr);
}


void
prot_a_async_new_membership(Connection   *cptr,
                            Pers_no pers_no,
                            Conf_no conf_no)
{
    ASYNC_CHECK_ACCEPT(cptr, ay_new_membership);
235
    async_header(cptr, 2, ay_new_membership);
236
237
    prot_a_output_ul(cptr, pers_no);
    prot_a_output_ul(cptr, conf_no);
David Byers's avatar
David Byers committed
238
239
    async_trailer(cptr);
}
240
241
242
243
244
245
246
247
248
249
250
251
252
253

#ifdef DEBUG_CALLS

void
prot_a_async_garb_ended(Connection *cptr,
			int deleted_texts)
{
    ASYNC_CHECK_ACCEPT(cptr, ay_garb_ended);
    async_header(cptr, 1, ay_garb_ended);
    prot_a_output_ul(cptr, deleted_texts);
    async_trailer(cptr);
}

#endif