1/*
2 * Author:      William Chia-Wei Cheng (bill.cheng@acm.org)
3 *
4 * Copyright (C) 2001-2009, William Chia-Wei Cheng.
5 *
6 * This file may be distributed under the terms of the Q Public License
7 * as defined by Trolltech AS of Norway and appearing in the file
8 * LICENSE.QPL included in the packaging of this file.
9 *
10 * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING
11 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
12 * PURPOSE.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
13 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
14 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
15 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
16 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 *
18 * @(#)$Header: /mm2/home/cvs/bc-src/tgif/wb.e,v 1.15 2011/05/16 16:22:00 william Exp $
19 */
20
21#ifndef _WB_E_
22#define _WB_E_
23
24#define WB_PACK 60000
25
26typedef struct WhiteBoardRec {
27   int	do_whiteboard;
28
29   char	send_fname[MAXPATHLENGTH];
30   char	gz_send_fname[MAXPATHLENGTH]; /* zlib, not gzip */
31   FILE *send_fp;
32   FILE *gz_send_fp; /* zlib, not gzip */
33   int	send_socket;
34
35   int	listening;
36
37   char	listen_fname[MAXPATHLENGTH];
38   char	gz_listen_fname[MAXPATHLENGTH]; /* zlib, not gzip */
39   FILE	*listen_fp;
40   FILE	*gz_listen_fp; /* zlib, not gzip */
41   int	listen_socket;
42
43   int	MCastSock;
44   int	bd_commands;
45   int	BlockRemoteCmdDepth;
46
47   int	logical_clock;
48   long	pid;
49
50   int	dont_serialize; /* true will skip the call to SerializeCmd() */
51
52   struct CmdRec	*first_cmd, *last_cmd, *cur_cmd;
53   struct CmdRec	*first_shadow_cmd, *last_shadow_cmd;
54
55   int	join_session_in_progress; /* there is current WB state info */
56} *WhiteBoardPtr;
57
58typedef struct WbMessage{
59   char	WbCmd[WB_PACK];
60}wbmsgPtr;
61
62typedef struct tagSerializationInfo {
63   struct SubCmdRec *subcmd;
64   struct SelRec *top_sel; /* TopSel */
65   struct SelRec *bot_sel; /* BotSel */
66   int num_objs; /* NumObjs */
67
68   int include_tgif_obj; /* recordCmdIncludeTgifObj */
69   int new_colormap; /* recordCmdUsesNewColormap */
70   int logical_clock; /* gstWBInfo.logical_clock */
71   char *sender_process_id; /* just a pointer, gszLocalPID */
72
73   struct SelRec *top_before; /* topSelBeforeInCmd */
74   struct SelRec *bot_before; /* botSelBeforeInCmd */
75   int *pos_before; /* stackingPosition */
76   int count_before; /* stackingCount */
77   int pos_before_has_ids; /* stackingPositionHasIds */
78} SerializationInfo;
79
80extern struct WhiteBoardRec	gstWBInfo;
81
82extern int	cmdLineNoWhiteBoard;
83extern int	cmdLineWhiteBoardListenOnly;
84
85#ifdef _INCLUDE_FROM_WB_C_
86#undef extern
87#define extern
88#endif /*_INCLUDE_FROM_WB_C_*/
89
90/* =================== Remote Related Functions =================== */
91
92extern void	PrintFullIDsOfObjects ARGS_DECL((char *psz_prefix));
93
94extern int	WBHasReadData ARGS_DECL((int *pn_flag, int *pn_retry));
95extern int	RecvWBData ARGS_DECL((
96			int flag, /* *pn_flag of WBHasReadData() */
97			char **ppsz_buf, int *pn_buf_sz));
98extern void	TryHandleWBInputData ARGS_DECL((void));
99extern int	SendWBData ARGS_DECL((char *pszWBData, int logical_clock));
100//extern int	SendWBData ARGS_DECL((char *pszWBData));
101
102/* =================== Cmd Related Functions =================== */
103
104extern char	*SerializeCmd ARGS_DECL((int CmdType, SerializationInfo*,
105		                         int *pnAssignedLogicalClock,
106		                         char **ppszPlainWBData,
107		                         int *pnPlainWBDataSz));
108extern void	SerializeFreeBuf ARGS_DECL((char *psz_buf));
109
110extern int	ReadExtendedCmd ARGS_DECL((FILE *FP, char *Inbuf));
111extern int	ReadExtendedCmdInfo ARGS_DECL((FILE *FP, char *Inbuf));
112extern int	ReadCmd ARGS_DECL((FILE *FP, char *Inbuf));
113extern int	ReadBeforeImage ARGS_DECL((FILE *FP, char *Inbuf));
114extern int	ReadAfterPositions ARGS_DECL((FILE *FP, char *Inbuf));
115extern int	ReadAfterImage ARGS_DECL((FILE *FP, char *Inbuf));
116extern void	FindCmdInsertionPoint ARGS_DECL((struct CmdRec *cmd_to_insert,
117				struct CmdRec **pp_immed_right_cmd));
118extern void	FindShadowCmdInsertionPoint ARGS_DECL((
119				struct CmdRec *cmd_to_insert,
120				struct CmdRec **pp_immed_right_cmd));
121extern void	CleanUpObsoletedWBCmds ARGS_DECL((struct CmdRec *));
122extern void	ProcessRemoteCmd ARGS_DECL((char *psz_content_type,
123				char *psz_buf, int buf_sz));
124
125/* =================== Handle New User Requests =================== */
126
127extern void	HandleNewUserRequest ARGS_DECL((void));
128
129/* =================== Init and CleanUp Functions =================== */
130
131extern void	CleanUpWhiteBoard ARGS_DECL((void));
132extern int	InitWhiteBoard ARGS_DECL((void));
133extern int	InitWhiteBoard2 ARGS_DECL((void));
134extern void	RMcallback_terminate ARGS_DECL((void));
135
136#ifdef _INCLUDE_FROM_WB_C_
137#undef extern
138#ifndef _NO_RECURSIVE_EXTERN
139#define extern extern
140#endif /* ~_NO_RECURSIVE_EXTERN */
141#endif /*_INCLUDE_FROM_WB_C_*/
142
143#endif /*_WB_E_*/
144