prot-a-send-async.c 6.37 KB
Newer Older
Linus Tolke's avatar
Linus Tolke committed
1
/*
2
 * $Id: prot-a-send-async.c,v 0.24 1999/05/30 09:26:23 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

34
static const char *
35
rcsid = "$Id: prot-a-send-async.c,v 0.24 1999/05/30 09:26:23 ceder Exp $";
36
37
#include "rcs.h"
USE(rcsid);
Per Cederqvist's avatar
Per Cederqvist committed
38

Per Cederqvist's avatar
Per Cederqvist committed
39
#include <setjmp.h>
40
41
42
43
44
45
#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
46

Per Cederqvist's avatar
Per Cederqvist committed
47
#include "misc-types.h"
48
#include "s-string.h"
Per Cederqvist's avatar
Per Cederqvist committed
49
#include "kom-types.h"
Per Cederqvist's avatar
Per Cederqvist committed
50
#include "com.h"
51
#include "async.h"
Per Cederqvist's avatar
Per Cederqvist committed
52
53
#include "connections.h"
#include "prot-a-send-async.h"
Per Cederqvist's avatar
Per Cederqvist committed
54
#include "async.h"
55
#include "isc-interface.h"
Per Cederqvist's avatar
Per Cederqvist committed
56
#include "prot-a-output.h"
Per Cederqvist's avatar
Per Cederqvist committed
57

58

Per Cederqvist's avatar
Per Cederqvist committed
59
60
61
62
63
static void
async_header(Connection *fp,
	     int   no_of_tokens,
	     Async fnc)
{
64
65
66
    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
67
68
69
70
71
72
73
74
}



    
static void
async_trailer(Connection *fp)
{
75
76
    isc_putc('\n', fp->isc_session);
    isc_flush(fp->isc_session);
Per Cederqvist's avatar
Per Cederqvist committed
77
78
79
}


80
81
82
83
84
85
86
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);
87
    prot_a_output_ul(cptr, text_no);
88
89
90
91
    prot_a_output_text_stat_old(cptr, text_s);
    async_trailer(cptr);
}

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


void
prot_a_async_i_am_on(Connection *cptr,
		     Who_info info)
{
109
    ASYNC_CHECK_ACCEPT(cptr, ay_i_am_on);
Per Cederqvist's avatar
Per Cederqvist committed
110
111
112
113
114
115
116
117
118
119
    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)
{
120
    ASYNC_CHECK_ACCEPT(cptr, ay_logout);
Per Cederqvist's avatar
Per Cederqvist committed
121
    async_header(cptr, 2, ay_logout);
122
123
    prot_a_output_ul(cptr, pers_no);
    prot_a_output_ul(cptr, session_no);
Per Cederqvist's avatar
Per Cederqvist committed
124
125
126
127
128
129
130
131
132
    async_trailer(cptr);
}

void
prot_a_async_new_name(Connection *cptr,
		      Conf_no conf_no,
		      String old_name,
		      String new_name)
{
133
    ASYNC_CHECK_ACCEPT(cptr, ay_new_name);
Per Cederqvist's avatar
Per Cederqvist committed
134
    async_header(cptr, 3, ay_new_name);
135
    prot_a_output_ul(cptr, conf_no);
Per Cederqvist's avatar
Per Cederqvist committed
136
137
138
139
140
141
142
143
    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)
{
144
    ASYNC_CHECK_ACCEPT(cptr, ay_sync_db);
Per Cederqvist's avatar
Per Cederqvist committed
145
146
147
148
149
150
151
152
    async_header(cptr, 0, ay_sync_db);
    async_trailer(cptr);
}

void
prot_a_async_forced_leave_conf(Connection *cptr,
			       Conf_no         conf_no)
{
153
    ASYNC_CHECK_ACCEPT(cptr, ay_leave_conf);
Per Cederqvist's avatar
Per Cederqvist committed
154
    async_header(cptr, 1, ay_leave_conf);
155
    prot_a_output_ul(cptr, conf_no);
Per Cederqvist's avatar
Per Cederqvist committed
156
157
158
159
160
161
162
163
    async_trailer(cptr);
}

void
prot_a_async_login(Connection *cptr,
		   Pers_no	   pers_no,
		   int		   session_no)
{
164
    ASYNC_CHECK_ACCEPT(cptr, ay_login);
Per Cederqvist's avatar
Per Cederqvist committed
165
    async_header(cptr, 2, ay_login);
166
167
    prot_a_output_ul(cptr, pers_no);
    prot_a_output_ul(cptr, session_no);
Per Cederqvist's avatar
Per Cederqvist committed
168
169
    async_trailer(cptr);
}
170

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

void
prot_a_async_deleted_text(Connection *cptr,
                         Text_no	      text_no,
                         Text_stat      *text_s)
{
    ASYNC_CHECK_ACCEPT(cptr, ay_deleted_text);
199
    async_header(cptr, 18, ay_deleted_text);
200
    prot_a_output_ul(cptr, text_no);
201
202
203
204
    prot_a_output_text_stat(cptr, text_s);
    async_trailer(cptr);
}

David Byers's avatar
David Byers committed
205
206
207
208
209
210
211
212
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);
213
214
215
    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
216
217
218
219
220
221
222
223
224
225
226
    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);
227
228
229
    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
230
231
232
233
234
235
236
237
238
239
    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);
240
    async_header(cptr, 2, ay_new_membership);
241
242
    prot_a_output_ul(cptr, pers_no);
    prot_a_output_ul(cptr, conf_no);
David Byers's avatar
David Byers committed
243
244
    async_trailer(cptr);
}
245
246
247
248
249
250
251
252
253
254
255
256
257
258

#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