annotate src/reditor.c @ 8:f21b6f345e69 v7_2

*** empty log message ***
author axmo
date Wed, 13 Aug 2008 17:54:25 +0900
parents
children bb64d8561b7b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1 #include <stdio.h>
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2 #include <strings.h>
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
3 #include <stdlib.h>
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
4 #include <sys/types.h>
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
5 #include <sys/socket.h>
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
6 #include <netinet/in.h>
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
7 #include <netdb.h>
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
8 #include <unistd.h>
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
9 #include <errno.h>
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
10
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
11 #include "vim.h"
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
12 #include "reditor.h"
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
13
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
14 /* Global variables of Vim */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
15 #include "globals.h"
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
16
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
17 /* Wrapper for Vim */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
18 static void e_msg_wrp(char *msg);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
19 static void e_msg2_wrp(char *msg1, char *msg2);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
20 static void puts_msg_wrpt(char *msg);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
21 static void free_wrp(void *p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
22 static BUFTYPE* make_new_buf_wrp(char *name);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
23 static void free_buf_wrp(BUFTYPE *buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
24 static BUFTYPE* find_buf_by_name_wrp(char *name);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
25 static void open_buffer_memline_wrp(BUFTYPE *buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
26 static BUFTYPE* get_curbuf_wrp();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
27 static BUFTYPE* set_curbuf_wrp(BUFTYPE *buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
28 static char* get_memline_wrp(BUFTYPE *buf, long lnum);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
29 static int append_memline_wrp(long lnum, char *text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
30 static int delete_memline_wrp(long lnum);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
31 static int replace_memline_wrp(long lnum, char *text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
32 static void update_screen_now_wrp();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
33 static void update_screen_later_wrp(BUFTYPE *buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
34 static long get_bufmaxline_wrp(BUFTYPE* buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
35 static char* getstr_input_wrp(char *msg);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
36 static char *get_fullpath_wrp(BUFTYPE *buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
37 static char *get_shortname_wrp(BUFTYPE *buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
38 /* Wrapper END */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
39
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
40
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
41 static rep_T* get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
42
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
43 static int del_ignored_cmd(rep_cmdlist *cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
44 static int translate(rep_cmdlist *userlist, rep_cmdlist *tokenlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
45 static void set_header_to_pkt(rep_cmdlist *cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
46 static int rep_get_listened_fd();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
47 static int set_hostnamebysock(int sock, char *hostname, int maxlen);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
48 static int rep_accept();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
49 static int rep_connect(char *host);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
50
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
51 static void* rep_alloc(int size);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
52 static void rep_free(void *obj);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
53
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
54 static BUFTYPE* get_buf_by_name(char *name);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
55 static Session* init_session(Session *sn);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
56 static Session* make_session(char *name, BUFTYPE *buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
57 static void free_session(Session *sn);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
58 static void free_session_list(Session *head);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
59 static void register_session(Session *sn);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
60 static Session* set_cursession(Session *sn);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
61 static Session* find_session_by_buf(BUFTYPE *buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
62 static Session* find_session_by_name(char *name);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
63 static int set_session_info(char *dest_sinfo, char *sname, char *hostname, int port);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
64 static char* get_fullpath(Session *session);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
65 static char* get_shortname(Session *session);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
66
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
67 static int make_local_slineup(Session *slineup,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
68 char *hostname,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
69 Session *my_sessions);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
70 static int get_slineup_from_sm(char *servername,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
71 Session *slineup,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
72 char *hostname,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
73 Session *my_sessions);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
74 static char* get_sname_by_snum(int snum);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
75 static int writen(int fd, char *textbuf, unsigned int len);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
76
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
77 static char* make_packet(unsigned int cmd,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
78 unsigned int sid,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
79 unsigned int eid,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
80 unsigned int seq,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
81 unsigned int lnum,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
82 char *text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
83 static char* make_open_packet(char *file_name);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
84 static rep_cmd* make_cmd(unsigned int cmd,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
85 unsigned int sid,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
86 unsigned int eid,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
87 unsigned int seq,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
88 unsigned int lnum,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
89 char *text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
90 static int free_cmd(rep_cmd *cmd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
91 static int free_cmdlist(rep_cmdlist *cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
92 static void add_cmd_to_list(rep_cmdlist *cmdlist, rep_cmd *cmd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
93 static int add_pkt_to_list(rep_cmdlist *cmdlist, char *pkt);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
94
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
95 static void check_line_change(Session *sn, unsigned int lnum);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
96
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
97 static unsigned int get_header(char *buf,int offset);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
98 static int set_header(unsigned int num, char *pkt, int offset);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
99
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
100 static int rep_exe_cmd(unsigned int cmd,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
101 unsigned int sid,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
102 unsigned int eid,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
103 unsigned int seq,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
104 unsigned int lnum,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
105 unsigned int textsize,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
106 char *text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
107 static int rep_exe_pkt(char *pkt);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
108 static int rep_exe_pktlist(rep_cmdlist *cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
109 static int rep_exe_cmdlist(rep_cmdlist *cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
110
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
111 static int rep_recv_cmds(int fd, rep_cmdlist *smcmdlist,rep_cmdlist *txtcmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
112 static int rep_send_cmds(int fd, rep_cmdlist *cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
113
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
114 static int session_fd_check(Session *sn, fd_set *rfds_p, fd_set *efds_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
115 static int session_fd_set(Session *sn, fd_set *rfds_p, fd_set *efds_p, int max_fds);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
116 static int append_newline_sep_text(Session *sn, char *text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
117
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
118 /* g_rep has an all information of Remote Editor */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
119 rep_T g_rep;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
120
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
121
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
122
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
123 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
124 * Wrapper for vim
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
125 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
126
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
127 /* エラーメッセージ出力 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
128 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
129 e_msg_wrp(msg)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
130 char * msg;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
131 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
132 EMSG(msg);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
133 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
134
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
135 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
136 e_msg2_wrp(msg1, msg2)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
137 char * msg1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
138 char * msg2;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
139 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
140 EMSG2(msg1,msg2);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
141 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
142
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
143 /* 通常のメッセージを出力 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
144 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
145 puts_msg_wrp(msg)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
146 char * msg;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
147 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
148 MSG_PUTS(msg);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
149 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
150
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
151 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
152 free_wrp(p)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
153 void *p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
154 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
155 vim_free(p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
156 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
157 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
158
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
159
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
160 /* 空の新しいバッファを取得 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
161 static BUFTYPE *
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
162 make_new_buf_wrp(name)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
163 char * name;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
164 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
165 return buflist_new((char_u*)name, NULL, 0, BLN_LISTED);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
166 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
167
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
168 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
169 free_buf_wrp(buf)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
170 BUFTYPE *buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
171 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
172 close_buffer(NULL, buf, DOBUF_DEL);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
173 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
174 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
175
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
176
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
177 /* 名前からバッファへのポインタを取得 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
178 static BUFTYPE *
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
179 find_buf_by_name_wrp(name)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
180 char * name;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
181 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
182 char *sfname = NULL; // sfname is used name's address
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
183 BUFTYPE *buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
184 BUFTYPE *orgbuf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
185
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
186 /* make a full file name. name is changed to absolute path.
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
187 * name's address is assigned to sfname. */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
188 fname_expand(buf, (char_u**)&name, (char_u**)&sfname);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
189 buf = buflist_findname((char_u*)name);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
190
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
191 free_wrp(name);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
192 return buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
193 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
194
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
195 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
196 open_buffer_memline_wrp(buf)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
197 BUFTYPE *buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
198 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
199 BUFTYPE *oldbuf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
200 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
201 oldbuf = set_curbuf_wrp(buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
202 set_curbuf_wrp(oldbuf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
203 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
204 oldbuf = curbuf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
205 curbuf = buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
206 open_buffer(FALSE, NULL);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
207 curbuf = oldbuf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
208 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
209 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
210
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
211
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
212 /* 現在編集中のバッファへのポインタを取得 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
213 extern BUFTYPE *curbuf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
214 static BUFTYPE *
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
215 get_curbuf_wrp()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
216 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
217 return curbuf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
218 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
219
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
220 /* buf を編集対象にする。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
221 *それまで編集対象だったバッファへのポインタを返す */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
222 static BUFTYPE *
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
223 set_curbuf_wrp(buf)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
224 BUFTYPE *buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
225 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
226 BUFTYPE *cb;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
227 if (buf == NULL)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
228 return NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
229
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
230 cb = get_curbuf_wrp();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
231 set_curbuf(buf,DOBUF_GOTO);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
232
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
233 return cb;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
234 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
235
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
236 /* 指定した行番号の行のテキスト(文字列)のポインタを取得 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
237 static char *
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
238 get_memline_wrp(buf, lnum)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
239 BUFTYPE *buf; // buf is curbuf
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
240 long lnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
241 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
242 // return ml_get(lnum);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
243 return (char*)ml_get_buf(buf, lnum, FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
244 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
245
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
246 /* 編集中のバッファの行の挿入 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
247 /* "text" does NOT need to be allocated */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
248 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
249 append_memline_wrp(lnum, text)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
250 long lnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
251 char *text;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
252 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
253 int r;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
254 int permit;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
255 rep_T *rep;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
256 rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
257 permit = rep->permit;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
258 rep->permit = FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
259
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
260 r = ml_append(lnum-1, (char_u*)text, strlen(text)+1, FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
261 appended_lines_mark(lnum-1,1);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
262
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
263 rep->permit = permit;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
264 return r;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
265 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
266
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
267 /* 編集中のバッファの行の削除 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
268 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
269 delete_memline_wrp(lnum)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
270 long lnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
271 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
272 int r;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
273 int permit;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
274 rep_T *rep;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
275 rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
276 permit = rep->permit;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
277 rep->permit = FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
278
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
279 r = ml_delete(lnum, FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
280 deleted_lines_mark(lnum,1);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
281
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
282 rep->permit = permit;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
283 return r;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
284 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
285
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
286 /* 編集中のバッファの行の置換 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
287 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
288 replace_memline_wrp(lnum, text)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
289 long lnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
290 char * text;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
291 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
292 int r;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
293 int permit;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
294 rep_T *rep;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
295 rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
296 permit = rep->permit;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
297 rep->permit = FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
298
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
299 r = ml_replace(lnum, (char_u*)text, TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
300
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
301 rep->permit = permit;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
302 return r;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
303 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
304
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
305 /* バッファの編集後の後処理 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
306 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
307 update_screen_now_wrp()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
308 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
309 check_cursor();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
310 update_screen(CLEAR);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
311 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
312 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
313
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
314 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
315 update_screen_later_wrp(buf)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
316 BUFTYPE *buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
317 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
318 check_cursor();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
319 return redraw_buf_later(buf, CLEAR);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
320 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
321
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
322 /* 編集中のバッファの行数を返す */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
323 static long
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
324 get_bufmaxline_wrp(buf)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
325 BUFTYPE *buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
326 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
327 return buf->b_ml.ml_line_count;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
328 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
329
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
330 /* XXX もう使わないので消す予定 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
331 /* ユーザに文字列を入力させる */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
332 static char *
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
333 getstr_input_wrp(msg)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
334 char *msg; // 入力時のメッセージ
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
335 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
336 char *cmdline;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
337
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
338 /* 受け取る文字列は使用後 vim_free() する */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
339 // cmdline = (char*)getcmdline_prompt('@', (char_u*)msg, 0);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
340 cmdline = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
341
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
342 return cmdline;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
343 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
344
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
345 /* get full path of buffer */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
346 static char *
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
347 get_fullpath_wrp(buf)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
348 BUFTYPE *buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
349 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
350 return (char*)buf->b_ffname;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
351 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
352
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
353 /* get short name of buffer */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
354 static char *
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
355 get_shortname_wrp(buf)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
356 BUFTYPE *buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
357 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
358 return (char*)buf->b_sfname;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
359 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
360
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
361 /* Wrapper END */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
362
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
363
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
364 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
365 puts_sys_err()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
366 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
367 char errmsg[50];
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
368
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
369 sprintf(errmsg, "rep>> %d:%s", errno, strerror(errno));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
370 e_msg_wrp(errmsg);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
371 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
372 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
373
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
374
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
375 static rep_T*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
376 get_rep()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
377 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
378 return(&g_rep);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
379 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
380
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
381 int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
382 rep_permit()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
383 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
384 return(g_rep.permit);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
385 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
386
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
387 int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
388 rep_session_permit()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
389 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
390 return(g_rep.permit && g_rep.cursession && g_rep.cursession->permit);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
391 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
392
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
393 void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
394 rep_start_create_cmds()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
395 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
396 if (g_rep.cursession) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
397 g_rep.cursession->permit = TRUE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
398 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
399 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
400 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
401
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
402 void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
403 rep_stop_create_cmds()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
404 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
405 if (g_rep.cursession) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
406 g_rep.cursession->permit = FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
407 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
408 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
409 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
410
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
411
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
412 int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
413 rep_init()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
414 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
415 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
416 * g_rep is global variable and it is zero cleared.
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
417 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
418
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
419 char def_hostname[] = "localhost";
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
420
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
421 // 現在編集対象のバッファはセッションに加える?
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
422 g_rep.shead = NULL; //make_session();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
423 g_rep.slineup = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
424
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
425 g_rep.cursession = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
426 g_rep.servername = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
427 g_rep.waiting_session_name = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
428
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
429 g_rep.smfd = -1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
430
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
431 g_rep.eid = 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
432 g_rep.seqno = 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
433
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
434 g_rep.permit = FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
435
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
436 if (gethostname(g_rep.hostname, sizeof(g_rep.hostname)) < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
437 strncpy(g_rep.hostname, def_hostname, sizeof(def_hostname)+1);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
438 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
439
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
440 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
441 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
442
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
443
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
444 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
445 * cmdlistを辿り、statメンバが REP_IGNORE であるREPコマンドを削除する。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
446 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
447 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
448 del_ignored_cmd(cmdlist)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
449 rep_cmdlist *cmdlist;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
450 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
451 rep_cmd *curcmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
452 rep_cmd *next;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
453
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
454 for (;(cmdlist->head) && (cmdlist->head->stat == REP_IGNORE); cmdlist->head=next) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
455 next = cmdlist->head->next;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
456 free_cmd(cmdlist->head);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
457 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
458
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
459 if (cmdlist->head == NULL) return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
460
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
461 for (curcmd=cmdlist->head; curcmd->next;) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
462 next = curcmd->next->next;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
463 if (curcmd->next->stat == REP_IGNORE) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
464 free_cmd(curcmd->next);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
465 curcmd->next = next;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
466 cmdlist->num--;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
467 } else {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
468 curcmd = curcmd->next;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
469 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
470 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
471 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
472 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
473
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
474
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
475 /***** translate(UserList, ToknList) *****
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
476 入力はトークンとユーザ入力からのREPコマンドのリストで、
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
477 それらを比較・変換して、二つのREPコマンドリストを生成する。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
478
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
479 -------------
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
480 UserList ->| | -> UserList'
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
481 | translate |
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
482 ToknList ->| | -> ToknList'
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
483 -------------
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
484
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
485 Session ID が異なるときは、可換なので、何もしない。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
486
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
487 ToknList + UserList' をトークンとして次のリモートエディタに渡し、
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
488 ToknList' は自分のバッファに反映させる。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
489
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
490 比較時に行番号が重なったときの処理は以下の表。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
491 なるべくテキストが残るようにしている。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
492 x\y は、TOKEN を x, USER を y するという意味。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
493 0 -- なにもしない
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
494 +1 -- 行番号を +1
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
495 i -- コマンド id を 'i' にする。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
496 X -- コマンドを削除(無視に)する。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
497
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
498 USER
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
499 | i | r | d
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
500 ---|--------------------
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
501 T i | 0\+1 | 0\+1 | 0\+1
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
502 O ---|--------------------
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
503 K r | +1\0 | 0\X | i\X
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
504 E ---|--------------------
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
505 N d | +1\0 | X\i | X\X
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
506
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
507 無視にされた(stat に REP_IGNORE が入っている)REPコマンドは、
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
508 全ての比較が終了したときにリストから削除される。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
509 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
510 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
511 translate(userlist, tokenlist) /* userのREPコマンドリスト, tokenのREPコマンドリスト */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
512 rep_cmdlist *userlist;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
513 rep_cmdlist *tokenlist;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
514 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
515 rep_cmd *usercmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
516 rep_cmd *tokencmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
517 rep_cmd *unext;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
518 rep_cmd *tnext;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
519
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
520 rep_cmd *h_pricmd; // high priority command
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
521 rep_cmd *l_pricmd; // low priority command
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
522
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
523 for (usercmd=userlist->head; usercmd; usercmd=unext) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
524 unext = usercmd->next;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
525
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
526 /* 削除される(予定)のREPコマンドの比較は無視 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
527 if (usercmd->stat == REP_IGNORE) continue;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
528
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
529 for (tokencmd=tokenlist->head; tokencmd; tokencmd=tnext) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
530 tnext=tokencmd->next;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
531
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
532 /* 削除される(予定)のREPコマンドの比較は無視 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
533 if (tokencmd->stat == REP_IGNORE) continue;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
534 /* XXX 消してもいい??*/
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
535 if ( tokencmd->cmd != REP_INSERT_CMD &&
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
536 tokencmd->cmd != REP_DELETE_LINE_CMD &&
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
537 tokencmd->cmd != REP_REPLACE_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
538 tokencmd->stat = REP_IGNORE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
539 continue;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
540 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
541 if (usercmd->stat == REP_IGNORE) break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
542 if ( usercmd->cmd != REP_INSERT_CMD &&
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
543 usercmd->cmd != REP_DELETE_LINE_CMD &&
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
544 usercmd->cmd != REP_REPLACE_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
545 usercmd->stat = REP_IGNORE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
546 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
547 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
548 if (usercmd->sid != tokencmd->sid) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
549 // session id が違う場合は何しない
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
550 continue;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
551 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
552 if (usercmd->lnum < tokencmd->lnum) { /* UsersLineNumber < TokensLineNumber */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
553 if (usercmd->cmd == REP_INSERT_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
554 tokencmd->lnum++;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
555 } else if (usercmd->cmd == REP_DELETE_LINE_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
556 tokencmd->lnum--;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
557 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
558 } else if (usercmd->lnum > tokencmd->lnum) { /* UsersLineNumber > TokensLineNumber */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
559 if (tokencmd->cmd == REP_INSERT_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
560 usercmd->lnum++;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
561 } else if (tokencmd->cmd == REP_DELETE_LINE_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
562 usercmd->lnum--;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
563 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
564 } else if (usercmd->lnum == tokencmd->lnum) { /* UsersLineNumber == TokensLineNumber */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
565
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
566 #if 0
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
567 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
568 * 行番号が重なるとREPコマンドの競合が起こるので、
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
569 * どちらかが譲らないといけない。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
570 * uid が小さい方を優先(h_pricmdに)し、
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
571 * uid が大きい方(l_pricmd)を変更する。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
572 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
573
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
574 if (usercmd->eid < tokencmd->eid) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
575 h_pricmd = usercmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
576 l_pricmd = tokencmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
577 } else {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
578 h_pricmd = tokencmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
579 l_pricmd = usercmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
580 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
581 #else
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
582 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
583 無条件に、自分の方が優先
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
584 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
585 h_pricmd = usercmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
586 l_pricmd = tokencmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
587 #endif
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
588
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
589 if (h_pricmd->cmd == REP_INSERT_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
590 l_pricmd->lnum++;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
591 } else if (h_pricmd->cmd == REP_REPLACE_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
592
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
593 if (l_pricmd->cmd == REP_INSERT_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
594 h_pricmd->lnum++;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
595 } else if (l_pricmd->cmd == REP_REPLACE_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
596 /* h_pricmd が優先され,l_pricmd は削除(無視に)する */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
597 l_pricmd->stat = REP_IGNORE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
598 } else if (l_pricmd->cmd == REP_DELETE_LINE_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
599 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
600 * l_pricmd 側ではすでにdeleteされているので、
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
601 * h_pricmd を REP_REPLACE_CMD -> REP_INSERT_CMD へ変更。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
602 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
603 h_pricmd->cmd = REP_INSERT_CMD;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
604 l_pricmd->stat = REP_IGNORE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
605 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
606
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
607 } else if (h_pricmd->cmd == REP_DELETE_LINE_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
608
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
609 if (l_pricmd->cmd == REP_INSERT_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
610 h_pricmd->lnum++;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
611 } else if (l_pricmd->cmd == REP_REPLACE_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
612 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
613 * h_pricmd 側ではすでにdeleteされているので、
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
614 * l_pricmd 側を REP_REPLACE_CMD -> REP_INSERT_CMD へ変更。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
615 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
616 l_pricmd->cmd = REP_INSERT_CMD;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
617 h_pricmd->stat= REP_IGNORE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
618 } else if (l_pricmd->cmd == REP_DELETE_LINE_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
619 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
620 * 相手と削除する行が重なるので、
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
621 * 両方のコマンドを無視にする。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
622 * 相手先ではすでにこの行は削除されている。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
623 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
624 h_pricmd->stat = REP_IGNORE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
625 l_pricmd->stat = REP_IGNORE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
626 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
627 } else {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
628 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
629 } else {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
630 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
631 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
632 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
633 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
634
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
635 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
636 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
637
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
638
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
639 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
640 set_header_to_pkt(cmdlist)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
641 rep_cmdlist *cmdlist;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
642 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
643 rep_cmd *curcmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
644 for (curcmd=cmdlist->head; curcmd; curcmd=curcmd->next) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
645 set_header(curcmd->cmd, curcmd->pkt, REP_CMD_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
646 set_header(curcmd->sid, curcmd->pkt, REP_SID_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
647 set_header(curcmd->eid, curcmd->pkt, REP_EID_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
648 set_header(curcmd->seq, curcmd->pkt, REP_SEQNUM_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
649 set_header(curcmd->len, curcmd->pkt, REP_T_SIZE_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
650 set_header(curcmd->lnum, curcmd->pkt, REP_LNUM_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
651 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
652 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
653 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
654
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
655 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
656 rep_get_listened_fd()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
657 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
658 int sock;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
659 int value;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
660 struct sockaddr_in addr;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
661
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
662 if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
663 e_msg_wrp("socket(): ERROR");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
664 return(-1);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
665 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
666
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
667 /* Allow other programs to bind to the socket */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
668 value = 1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
669 if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value)) < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
670 e_msg_wrp("setsockopt() REUSEADDR failed");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
671 exit(1);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
672 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
673
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
674 bzero((char*)&addr, sizeof(addr));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
675
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
676 addr.sin_family = AF_INET;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
677 addr.sin_addr.s_addr = INADDR_ANY;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
678 addr.sin_port = htons(REP_PORT);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
679
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
680 if ((bind(sock, (struct sockaddr*)&addr, sizeof(addr))) == -1) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
681 e_msg_wrp("bind(): ERROR");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
682 return(-1);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
683 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
684
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
685 if ((listen(sock, SOCK_MAX)) < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
686 e_msg_wrp("listen(): ERROR");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
687 return(-1);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
688 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
689
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
690 return(sock);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
691 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
692
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
693 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
694 set_hostnamebysock(sock,hostname,maxlen)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
695 int sock;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
696 char *hostname;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
697 int maxlen;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
698 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
699 int sinlen;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
700 struct sockaddr_in sin;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
701 struct hostent *host;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
702 int namelen;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
703
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
704 sinlen = sizeof sin;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
705 if (getpeername(sock, (struct sockaddr *) &sin, (socklen_t *)&sinlen) < 0){
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
706 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
707 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
708
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
709 if ((host = gethostbyaddr((char *) &sin.sin_addr, sizeof(sin.sin_addr), AF_INET)) == NULL){
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
710 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
711 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
712
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
713 namelen = strlen(host->h_name);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
714 if (namelen > maxlen) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
715 e_msg_wrp("host name is too long.");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
716 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
717 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
718
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
719 strncpy(hostname,host->h_name,namelen);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
720 hostname[namelen] = '\0';
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
721 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
722 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
723
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
724 static char default_host[] = "localhost";
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
725
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
726 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
727 rep_connect(host)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
728 char *host; /* "hostname:portnumber" */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
729 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
730 int sock;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
731 struct hostent *hp;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
732 struct sockaddr_in sin;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
733 char *tmp;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
734 int port;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
735
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
736 if (host == NULL || host == '\n') {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
737 host = default_host;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
738 port = REP_PORT;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
739 } else {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
740 if ((tmp = strchr(host, ':')) == NULL ) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
741 return(-1);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
742 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
743 *tmp = '\0';
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
744 tmp++;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
745 port = atol(tmp);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
746 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
747
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
748 if ((hp = gethostbyname(host)) == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
749 e_msg_wrp("rep_open: gethostbyname: ERROR");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
750 return(-1);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
751 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
752
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
753 if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
754 e_msg_wrp("rep_open: socket : ERROR");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
755 return(-1);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
756 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
757
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
758 bzero(&sin, sizeof(sin));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
759 sin.sin_family = AF_INET;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
760 sin.sin_port = htons(port);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
761 bcopy(hp->h_addr, &sin.sin_addr, hp->h_length);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
762
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
763 if (connect(sock, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
764 e_msg_wrp("rep_open: connect: ERROR");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
765 return(-1);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
766 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
767
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
768 return(sock);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
769 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
770
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
771
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
772 static BUFTYPE *
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
773 get_buf_by_name(name)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
774 char *name;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
775 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
776 BUFTYPE *buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
777 if ((buf = find_buf_by_name_wrp(name)) == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
778 buf = make_new_buf_wrp(name);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
779 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
780
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
781 if (buf && (buf->b_ml.ml_mfp == NULL)) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
782 open_buffer_memline_wrp(buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
783 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
784
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
785 return buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
786 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
787
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
788
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
789 /* About Session */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
790
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
791 static Session *
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
792 init_session(sn)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
793 Session *sn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
794 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
795 sn->next = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
796 sn->buf = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
797 sn->sname = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
798 sn->new_cmdlist.head = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
799 sn->new_cmdlist.num = 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
800 sn->sent_cmdlist.head = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
801 sn->sent_cmdlist.num = 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
802 sn->sid = 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
803 sn->permit = FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
804 sn->prevline = -1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
805
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
806 return sn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
807 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
808
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
809 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
810 * Make a new session.
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
811 * if buf is NULL, buffer is found or made new one.
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
812 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
813 static Session *
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
814 make_session(name, buf)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
815 char *name;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
816 BUFTYPE *buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
817 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
818 Session *s;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
819
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
820 char *sname;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
821 int namelen = strlen(name)+1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
822
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
823 s = (Session*)rep_alloc(sizeof(Session));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
824 if (s == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
825 return(NULL);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
826 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
827
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
828 if ((sname = (char*)rep_alloc(namelen)) == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
829 return NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
830 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
831 strncpy(sname,name,namelen);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
832
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
833 init_session(s);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
834
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
835 if (buf == NULL) buf = get_buf_by_name(sname);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
836 s->buf = buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
837
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
838 s->sname = sname;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
839
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
840 return s;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
841 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
842
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
843 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
844 free_session(sn)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
845 Session *sn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
846 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
847
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
848 free_cmdlist(&sn->new_cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
849 free_cmdlist(&sn->sent_cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
850 free_buf_wrp(sn->buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
851
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
852 if (sn->sname) rep_free(sn->sname);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
853
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
854 init_session(sn);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
855
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
856 rep_free(sn);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
857 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
858 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
859
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
860 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
861 free_session_list(head)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
862 Session *head;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
863 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
864 Session *next;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
865 for (; head; head=next) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
866 next = head->next;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
867 head->next = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
868 free_session(head);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
869 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
870 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
871 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
872
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
873 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
874 register_session(sn)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
875 Session *sn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
876 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
877 rep_T *rep;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
878
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
879 rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
880
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
881 sn->next = rep->shead;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
882 rep->shead = sn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
883
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
884 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
885 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
886
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
887 static Session*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
888 set_cursession(sn)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
889 Session *sn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
890 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
891 BUFTYPE *oldbuf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
892 Session *oldsn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
893 rep_T *rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
894
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
895 if (sn) oldbuf = set_curbuf_wrp(sn->buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
896 rep->cursession = sn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
897
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
898 oldsn = find_session_by_buf(oldbuf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
899 return oldsn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
900 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
901
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
902 static Session*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
903 find_session_by_id(id)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
904 unsigned int id;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
905 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
906 Session *cursn = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
907 rep_T *rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
908
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
909 if (rep->slineup && rep->slineup->sid == id) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
910 return rep->slineup;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
911 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
912
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
913 for (cursn = rep->shead; cursn; cursn = cursn->next) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
914 if (cursn->sid == id) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
915 return cursn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
916 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
917 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
918
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
919 return NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
920 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
921
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
922 static Session*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
923 find_session_by_buf(buf)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
924 BUFTYPE *buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
925 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
926 Session *cursn = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
927 rep_T *rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
928
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
929 if (buf == NULL) return NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
930
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
931 if(rep->slineup->buf == buf)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
932 return rep->slineup;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
933 for (cursn = rep->shead; cursn; cursn = cursn->next) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
934 if (cursn->buf == buf) break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
935 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
936 return cursn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
937 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
938
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
939 static Session*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
940 find_session_by_name(name)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
941 char *name;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
942 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
943 BUFTYPE *buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
944 buf = find_buf_by_name_wrp(name);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
945 return find_session_by_buf(buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
946 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
947
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
948 int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
949 rep_input_reg_session() // input own session(s)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
950 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
951 char *sname;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
952
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
953 while (1) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
954 // retrun value (sname) is allocated.
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
955 sname = getstr_input_wrp("Session to offer = ");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
956 if (sname == NULL) return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
957 if (*sname=='\0') { // input pert is finished
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
958 free_wrp(sname);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
959 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
960 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
961 register_session(make_session(sname, NULL));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
962
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
963 free_wrp(sname);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
964 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
965
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
966 update_screen_now_wrp(); /* ウィンドウを再描画 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
967 return TRUE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
968 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
969
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
970
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
971 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
972 set_session_info(dest_sinfo, sname, hostname, port)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
973 char *dest_sinfo;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
974 char *sname;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
975 char *hostname;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
976 int port;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
977 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
978 int size;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
979 size = sprintf(dest_sinfo, "%s:%d:%s",hostname, port, sname);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
980 dest_sinfo[size] = '\0';
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
981 return 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
982 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
983
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
984 static char*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
985 get_fullpath(session)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
986 Session *session;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
987 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
988 BUFTYPE *buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
989 if (session == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
990 buf = get_curbuf_wrp();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
991 } else {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
992 buf = session->buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
993 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
994 return get_fullpath_wrp(buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
995 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
996
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
997 static char*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
998 get_shortname(session)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
999 Session *session;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1000 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1001 return get_shortname_wrp(session->buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1002 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1003
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1004
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1005
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1006 /* End Session */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1007
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1008 #define SINFO_MAX 255
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1009 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1010 * 自身が提供するセッションのみをセッションリストに書き出す
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1011 * あらかじめセッションリストのバッファを編集対象のバッファに
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1012 *指定しておく(set_curbuf_wrp(slineup)しておく)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1013 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1014 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1015 make_local_slineup(slineup, hostname, my_sessions)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1016 Session *slineup;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1017 char *hostname;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1018 Session *my_sessions;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1019 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1020 Session *s;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1021 BUFTYPE *oldcurbuf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1022 char sinfo[SINFO_MAX];
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1023
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1024 if (my_sessions == NULL) return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1025
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1026 for (; my_sessions; my_sessions=my_sessions->next) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1027 set_session_info(sinfo, my_sessions->sname, hostname, REP_PORT);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1028 /* 現在の編集対象のバッファ curbuf に対して書き込みを行なう */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1029 append_memline_wrp(1, sinfo);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1030 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1031
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1032 return TRUE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1033 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1034
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1035
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1036 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1037 * セッションマネージャからセッションリストを取得
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1038 * あらかじめセッションリストのバッファを編集対象のバッファに
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1039 *指定しておく(set_curbuf_wrp(buf)しておく)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1040 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1041 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1042 get_slineup_from_sm(servername, slineup, hostname, my_sessions)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1043 char *servername;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1044 Session *slineup;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1045 char *hostname;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1046 Session *my_sessions; // linked list
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1047 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1048 return TRUE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1049 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1050
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1051
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1052 char *
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1053 rep_input_param(msg, err_msg)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1054 char *msg;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1055 char *err_msg;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1056 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1057 char *input_string;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1058
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1059 if ((input_string = getstr_input_wrp(msg)) == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1060 return NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1061 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1062
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1063 if (*input_string == '\0') {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1064 if (err_msg) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1065 puts_msg_wrp(err_msg);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1066 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1067 free_wrp(input_string);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1068 return NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1069 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1070
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1071 return input_string;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1072 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1073
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1074 int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1075 rep_join()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1076 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1077 int sock;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1078 rep_T *rep;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1079
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1080 rep_cmdlist cmdlist = {NULL,0};
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1081
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1082 rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1083 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1084 if (server == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1085 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1086 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1087 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1088 if ((sock = rep_connect(NULL)) < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1089 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1090 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1091 if (rep->smfd > 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1092 close(rep->smfd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1093 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1094
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1095 rep->smfd = sock;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1096 rep->permit = TRUE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1097
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1098 add_cmd_to_list(&cmdlist, make_cmd(REP_JOIN_CMD, 0, rep->eid, rep->seqno++, 0, NULL));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1099 rep_send_cmds(sock, &cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1100
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1101 free_cmdlist(&cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1102
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1103 return TRUE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1104
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1105 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1106
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1107 int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1108 rep_select_command(session_no)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1109 char *session_no;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1110 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1111 rep_T *rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1112 rep_cmdlist cmdlist = {NULL, 0};
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1113 int sid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1114
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1115
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1116 if (rep->smfd < 0 || session_no == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1117 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1118 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1119
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1120 if (rep->waiting_session_name) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1121 rep_free(rep->waiting_session_name);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1122 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1123 sid = atol(session_no);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1124 if ((rep->waiting_session_name = get_sname_by_snum(sid)) == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1125 e_msg_wrp("Session Selection is false.");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1126 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1127 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1128
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1129 add_cmd_to_list(&cmdlist, make_cmd(REP_SELECT_CMD, sid, rep->eid, rep->seqno++, 0, session_no));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1130 rep_send_cmds(rep->smfd, &cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1131
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1132 free_cmdlist(&cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1133
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1134 return TRUE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1135 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1136
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1137 int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1138 rep_put(sname)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1139 char *sname;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1140 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1141 int sock;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1142 rep_T *rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1143 rep_cmdlist cmdlist = {NULL, 0};
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1144 int len;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1145 Session *sn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1146
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1147 if ((sock = rep_connect(NULL)) < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1148 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1149 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1150 if (rep->smfd > 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1151 close(rep->smfd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1152 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1153
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1154 rep->smfd = sock;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1155 rep->permit = TRUE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1156
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1157 if (sname == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1158 /* get current buffer name */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1159 if ((sname = get_fullpath(rep->cursession)) == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1160 sname = NO_NAME; /* the buffer has not name */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1161 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1162 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1163
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1164 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1165 if (find_session_by_name(sname) == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1166 sn = make_session(sname, get_buf_by_name(sname));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1167 register_session(sn);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1168 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1169 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1170
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1171
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1172 if (rep->waiting_session_name) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1173 rep_free(rep->waiting_session_name);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1174 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1175 len = strlen(sname) +1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1176 rep->waiting_session_name = (char *)rep_alloc(len);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1177 memcpy(rep->waiting_session_name, sname, len);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1178
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1179 add_cmd_to_list(&cmdlist, make_cmd(REP_PUT_CMD, 0, rep->eid, rep->seqno++, 0, sname));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1180
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1181 rep_send_cmds(rep->smfd, &cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1182
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1183 free_cmdlist(&cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1184
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1185 return TRUE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1186 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1187
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1188
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1189 int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1190 rep_remove()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1191 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1192 rep_T *rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1193 rep_cmd *cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1194 rep_cmdlist cmdlist = {NULL, 0};
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1195 Session *sn = rep->cursession;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1196
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1197 if (rep->smfd < 0) { /* session does not exist */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1198 EMSG("Session does not exist.");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1199 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1200 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1201
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1202 cmd = make_cmd(REP_DEREGISTER_CMD, sn->sid, rep->eid, rep->seqno, 0, NULL);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1203 add_cmd_to_list(&cmdlist, cmd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1204 rep_send_cmds(rep->smfd, &cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1205 free_cmdlist(&cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1206
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1207 return TRUE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1208 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1209
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1210 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1211 rep_make_slineup()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1212 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1213 BUFTYPE buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1214 // BUFTYPE *oldcurbuf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1215 Session *oldsn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1216
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1217 rep_T *rep;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1218 rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1219
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1220 if (rep->slineup) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1221 free_session(rep->slineup);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1222 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1223
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1224 rep->slineup = make_session(SLINEUP_NAME, make_new_buf_wrp(SLINEUP_NAME));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1225
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1226 oldsn = set_cursession(rep->slineup);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1227
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1228 /* セッション一覧リストを作成 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1229 if ((get_slineup_from_sm(rep->servername, rep->slineup, rep->hostname, rep->shead) == FALSE)) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1230 make_local_slineup(rep->slineup, rep->hostname, rep->shead);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1231 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1232
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1233 update_screen_now_wrp(); /* ウィンドウを再描画 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1234
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1235 return TRUE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1236 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1237
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1238
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1239 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1240 enter_session(session_name)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1241 char *session_name;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1242 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1243 return TRUE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1244 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1245
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1246
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1247 /* Session End */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1248
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1249 static void *
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1250 rep_alloc(size)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1251 int size; /* byte */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1252 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1253 void *allocated;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1254 if ((allocated = malloc(size)) == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1255 e_msg_wrp("no memory!");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1256 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1257
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1258 return allocated;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1259 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1260
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1261 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1262 rep_free(obj)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1263 void *obj;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1264 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1265 if (obj) free(obj);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1266 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1267 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1268
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1269
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1270 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1271 writen(sock, pkt, len)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1272 int sock;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1273 char *pkt;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1274 unsigned int len;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1275 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1276 int offset;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1277 int written;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1278
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1279 if (len == 0) return 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1280
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1281 for (offset=0, written=0; offset<len; offset += written) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1282 if ((written = write(sock, pkt + offset, len - offset)) < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1283 puts_sys_err();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1284 return written;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1285 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1286 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1287 return offset;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1288 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1289
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1290 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1291 readn(sock, pkt, len)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1292 int sock;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1293 char *pkt;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1294 unsigned int len;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1295 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1296 unsigned int r;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1297 unsigned int offset;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1298
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1299 if (len == 0) return 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1300
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1301 for (offset=0, r=0; offset<len; offset += r) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1302 if ((r = read(sock, pkt + offset, len - offset)) < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1303 puts_sys_err();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1304 return r;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1305 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1306 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1307 return offset;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1308 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1309
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1310
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1311 static char*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1312 make_packet(cmd, sid, eid, seq, lnum, text)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1313 unsigned int cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1314 unsigned int sid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1315 unsigned int eid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1316 unsigned int seq;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1317 unsigned int lnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1318 char * text;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1319 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1320 char *packet;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1321 unsigned int len = 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1322
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1323 if (text) len += strlen(text);// + 1; /* for include '\0' */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1324
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1325 if ((packet = (char *)rep_alloc(REP_HEADER_SIZE+len)) == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1326 return(NULL);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1327 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1328
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1329 set_header(cmd, packet, REP_CMD_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1330 set_header(sid, packet, REP_SID_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1331 set_header(eid, packet, REP_EID_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1332 set_header(seq, packet, REP_SEQNUM_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1333 set_header(lnum, packet, REP_LNUM_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1334 set_header(len, packet, REP_T_SIZE_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1335
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1336 if (text) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1337 memcpy(packet+REP_TEXT_OFFSET, text, len);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1338 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1339
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1340 return(packet);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1341 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1342
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1343
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1344 static rep_cmd*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1345 make_cmd(cmd, sid, eid, seq, lnum, text)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1346 unsigned int cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1347 unsigned int sid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1348 unsigned int eid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1349 unsigned int seq;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1350 unsigned int lnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1351 char *text;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1352 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1353 rep_cmd *cmd_p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1354 char *pkt;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1355 unsigned int length = 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1356
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1357 pkt = make_packet(cmd, sid, eid, seq, lnum, text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1358 if (pkt == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1359 e_msg_wrp("make_cmd: no memory: ERROR");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1360 return(NULL);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1361 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1362
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1363 cmd_p = (rep_cmd*)rep_alloc(sizeof(rep_cmd));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1364 if (cmd_p == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1365 e_msg_wrp("make_cmd: no memory: ERROR");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1366 return(NULL);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1367 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1368
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1369 if (text) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1370 length = strlen(text); //+1; // include '\0'
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1371 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1372
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1373 cmd_p->next = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1374
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1375 cmd_p->cmd = cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1376 cmd_p->sid = sid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1377 cmd_p->eid = eid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1378 cmd_p->seq = seq;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1379 cmd_p->len = length;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1380 cmd_p->lnum = lnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1381
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1382 cmd_p->stat = REP_AVAIL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1383 cmd_p->pkt = pkt;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1384
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1385 return(cmd_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1386 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1387
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1388 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1389 free_cmd(cmd)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1390 rep_cmd *cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1391 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1392 if (cmd == NULL) return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1393
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1394 if (cmd->pkt) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1395 rep_free(cmd->pkt);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1396 cmd->pkt=NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1397 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1398 rep_free(cmd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1399 cmd = 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1400 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1401 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1402
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1403 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1404 free_cmdlist(cmdlist)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1405 rep_cmdlist *cmdlist;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1406 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1407 rep_cmd *cur;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1408 rep_cmd *next;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1409
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1410 if (cmdlist->head==NULL) return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1411 for (cur=cmdlist->head; cur; cur=next) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1412 next=cur->next;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1413 free_cmd(cur);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1414 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1415 cmdlist->head = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1416 cmdlist->num = 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1417 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1418 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1419
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1420 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1421 add_cmd_to_list(cmdlist, cmd)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1422 rep_cmdlist *cmdlist;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1423 rep_cmd *cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1424 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1425 rep_cmd *p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1426 int count = 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1427
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1428 for (p=cmd; p; p=p->next) count++;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1429
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1430 if (cmdlist->head) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1431 for (p = cmdlist->head; p->next; p = p->next);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1432 p->next = cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1433 } else {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1434 cmdlist->head = cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1435 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1436 cmdlist->num += count;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1437 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1438 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1439
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1440 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1441 add_pkt_to_list(cmdlist, pkt) /* pkt is allocated */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1442 rep_cmdlist *cmdlist;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1443 char *pkt;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1444 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1445 rep_cmd *cmd_p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1446
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1447 if (pkt == NULL) return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1448
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1449 cmd_p = (rep_cmd*)rep_alloc(sizeof(rep_cmd));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1450 if (cmd_p == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1451 e_msg_wrp("add_pkt_to_list: no memory: ERROR");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1452 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1453 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1454
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1455 cmd_p->next = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1456
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1457 cmd_p->cmd = get_header(pkt, REP_CMD_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1458 cmd_p->sid = get_header(pkt, REP_SID_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1459 cmd_p->eid = get_header(pkt, REP_EID_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1460 cmd_p->seq = get_header(pkt, REP_SEQNUM_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1461 cmd_p->lnum = get_header(pkt, REP_LNUM_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1462
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1463 cmd_p->stat = REP_AVAIL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1464 cmd_p->len = strlen(pkt)+1 - REP_HEADER_SIZE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1465 cmd_p->pkt = pkt;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1466
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1467 add_cmd_to_list(cmdlist, cmd_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1468
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1469 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1470 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1471
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1472
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1473 void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1474 rep_prevline_flush()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1475 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1476 BUFTYPE *cbuf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1477 Session *cursn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1478 rep_cmd *cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1479 rep_T *rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1480 char *text;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1481
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1482 cursn = rep->cursession;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1483
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1484 if ((cursn == NULL) || (cursn->prevline == -1)) return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1485
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1486 // バッファが変更された場合には rep->cursession も合わす
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1487 if ((cbuf = get_curbuf_wrp()) != cursn->buf) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1488 cursn = find_session_by_buf(cbuf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1489 if (cursn == NULL)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1490 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1491 rep->cursession = cursn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1492 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1493
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1494 text = get_memline_wrp(cursn->buf, cursn->prevline);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1495
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1496 cmd = make_cmd(REP_REPLACE_CMD, cursn->sid, rep->eid, rep->seqno++, cursn->prevline, text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1497
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1498 add_cmd_to_list(&(cursn->new_cmdlist), cmd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1499
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1500
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1501
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1502 if (cursn->sent_cmdlist.num == 0) { // 自トークンを送信してない場合
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1503 rep_send_cur_cmdlist();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1504 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1505
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1506 cursn->prevline = -1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1507 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1508
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1509
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1510 static void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1511 check_line_change(sn, lnum)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1512 Session *sn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1513 unsigned int lnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1514 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1515 rep_cmd *cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1516 rep_T *rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1517
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1518
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1519 if (sn->prevline == lnum) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1520 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1521 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1522
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1523 if (sn->prevline == -1) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1524 sn->prevline = lnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1525 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1526 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1527 cmd = make_cmd(REP_REPLACE_CMD, sn->sid, rep->eid, rep->seqno++, sn->prevline,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1528 get_memline_wrp(sn->buf, sn->prevline));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1529 add_cmd_to_list(&(sn->new_cmdlist), cmd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1530
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1531 sn->prevline = lnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1532 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1533 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1534
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1535 int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1536 rep_register(lnum, lnume, xtra)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1537 unsigned int lnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1538 unsigned int lnume;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1539 int xtra;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1540 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1541 int i;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1542 BUFTYPE *cbuf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1543 Session *cursn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1544 rep_cmd *cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1545 rep_T *rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1546
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1547 if ((cursn = rep->cursession) == NULL) return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1548
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1549 // バッファが変更された場合には rep->cursession も合わす
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1550 if ((cbuf = get_curbuf_wrp()) != cursn->buf) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1551 cursn = find_session_by_buf(cbuf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1552 if (cursn == NULL)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1553 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1554 rep->cursession = cursn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1555 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1556
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1557 if (xtra == 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1558 for (i = 0; lnume-lnum > i; i++) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1559 check_line_change(cursn,lnum+i);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1560 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1561 } else if (xtra > 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1562 if (lnum != lnume) { /* 行の途中から改行 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1563 cmd = make_cmd( REP_REPLACE_CMD, cursn->sid, rep->eid, rep->seqno++, lnum,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1564 get_memline_wrp(cursn->buf, lnum));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1565 add_cmd_to_list(&(cursn->new_cmdlist), cmd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1566 lnum++;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1567 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1568 for (i = 0; xtra > 0; i++, xtra--) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1569 cmd = make_cmd( REP_INSERT_CMD, cursn->sid, rep->eid, rep->seqno++, lnum+i,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1570 get_memline_wrp(cursn->buf, lnum+i));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1571 add_cmd_to_list(&(cursn->new_cmdlist), cmd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1572 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1573 } else { /* xtra < 0 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1574 xtra = -xtra;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1575 for (; xtra > 0; xtra--) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1576 cmd = make_cmd(REP_DELETE_LINE_CMD, cursn->sid, rep->eid, rep->seqno++, lnum,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1577 NULL);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1578 add_cmd_to_list(&(cursn->new_cmdlist), cmd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1579 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1580 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1581
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1582 if (cursn->sent_cmdlist.num == 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1583 rep_send_cur_cmdlist();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1584 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1585
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1586 return(lnume - lnum);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1587 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1588
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1589
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1590 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1591 set_header(data, pkt, offset)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1592 unsigned int data;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1593 char *pkt;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1594 int offset;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1595 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1596 int *ipkt;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1597 int ndata = htonl(data);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1598
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1599 ipkt = (int*)pkt;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1600 ipkt[offset/4] = ndata;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1601
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1602 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1603 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1604
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1605 static unsigned int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1606 get_header(pkt, offset)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1607 char *pkt;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1608 int offset;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1609 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1610 int *ipkt;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1611 int data;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1612 unsigned int header;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1613
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1614 ipkt = (int *)pkt;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1615 data = ipkt[offset/4];
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1616 header = (unsigned int)ntohl(data);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1617
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1618 return(header);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1619 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1620
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1621
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1622 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1623 rep_exe_cmd(cmd, sid, eid, seq, lnum, textsize, text)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1624 unsigned int cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1625 unsigned int sid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1626 unsigned int eid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1627 unsigned int seq;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1628 unsigned int lnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1629 unsigned int textsize;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1630 char *text;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1631 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1632 char h_name[50];
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1633 rep_cmdlist tmplist = {NULL, 0};
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1634 rep_cmd *repcmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1635 BUFTYPE *buf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1636 rep_T *rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1637 Session *session;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1638
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1639 unsigned int buflenmax;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1640
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1641 session = find_session_by_id(sid);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1642
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1643 /*XXX 無理矢理 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1644 if (textsize == 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1645 text = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1646 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1647
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1648 switch (cmd) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1649 case REP_JOIN_ACK:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1650 /* show session lineup */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1651 if (rep->slineup) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1652 free_session(rep->slineup);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1653 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1654 rep->slineup = make_session(SLINEUP_NAME, make_new_buf_wrp(SLINEUP_NAME));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1655 append_newline_sep_text(rep->slineup, text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1656 set_cursession(rep->slineup);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1657 update_screen_now_wrp();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1658
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1659 if (rep->eid == 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1660 rep->eid = eid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1661 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1662 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1663 case REP_SELECT_ACK:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1664 // text is error message. means occur ERROR in session manager
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1665 if (text) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1666 e_msg_wrp(text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1667 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1668 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1669
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1670 // DON'T wait session from session manager
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1671 if (! rep->waiting_session_name) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1672 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1673 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1674
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1675 session = make_session(rep->waiting_session_name,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1676 make_new_buf_wrp(rep->waiting_session_name));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1677 session->sid = sid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1678 register_session(session);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1679
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1680 rep_free(rep->waiting_session_name);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1681 rep->waiting_session_name = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1682
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1683 set_cursession(session);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1684
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1685 rep_start_create_cmds();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1686
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1687 /* get window size */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1688 /* send read command */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1689 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1690 case REP_REGISTER_ACK:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1691 case REP_PUT_ACK:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1692 /* Enter Session */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1693
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1694 if (text) { // text is error message.
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1695 e_msg_wrp(text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1696 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1697 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1698
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1699 /* Use wating_session_name for assign session id */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1700 if ((session = find_session_by_name(rep->waiting_session_name)) == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1701 if (rep->waiting_session_name) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1702 rep_free(rep->waiting_session_name);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1703 rep->waiting_session_name = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1704 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1705 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1706 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1707 session->sid = sid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1708
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1709 /* set session to cursession */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1710 set_cursession(session);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1711 rep_start_create_cmds();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1712
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1713 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1714 case REP_DEREGISTER_CMD:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1715 case REP_DEREGISTER_ACK:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1716 case REP_QUIT_CMD:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1717 case REP_QUIT_ACK:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1718 case REP_GET_CMD:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1719 case REP_GET_ACK:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1720 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1721 case REP_OPEN_CMD:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1722 /* REP_OPEN_CMD is handled in list part. (may be upper function) */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1723 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1724
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1725 /* connection commands */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1726
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1727 case REP_OPEN_ACK:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1728 case REP_CLOSE_CMD:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1729 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1730 case REP_CLOSE_ACK:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1731 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1732 case REP_READ_CMD:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1733 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1734 case REP_READ_ACK:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1735 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1736 case REP_READ_FIN:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1737 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1738 /* buffer edit commands */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1739 /* session's buffer is set to current buffer */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1740 case REP_INSERT_CMD:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1741 append_memline_wrp(lnum, text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1742 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1743 case REP_DELETE_LINE_CMD:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1744 delete_memline_wrp(lnum);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1745 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1746 case REP_REPLACE_CMD:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1747 if (lnum > get_bufmaxline_wrp(session->buf)) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1748 append_memline_wrp(lnum, text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1749 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1750 replace_memline_wrp(lnum, text); /* text was allocated */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1751 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1752 default:
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1753 break;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1754 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1755
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1756 free_cmdlist(&(tmplist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1757
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1758 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1759 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1760
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1761
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1762 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1763 rep_exe_pkt(pkt)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1764 char *pkt;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1765 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1766 unsigned int cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1767 unsigned int sid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1768 unsigned int eid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1769 unsigned int seq;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1770 unsigned int lnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1771 unsigned int len;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1772 char *text;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1773
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1774 cmd = get_header(pkt, REP_CMD_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1775 sid = get_header(pkt, REP_SID_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1776 eid = get_header(pkt, REP_EID_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1777 seq = get_header(pkt, REP_SEQNUM_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1778 lnum = get_header(pkt, REP_LNUM_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1779 len = get_header(pkt, REP_T_SIZE_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1780 text = pkt + REP_TEXT_OFFSET;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1781
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1782 rep_exe_cmd(cmd, sid, eid, seq, lnum, len, text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1783
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1784 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1785 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1786
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1787 /* execute command list based cmd packet */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1788 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1789 rep_exe_pktlist(cmdlist)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1790 rep_cmdlist *cmdlist;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1791 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1792 rep_cmd *repcmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1793 BUFTYPE *orgbuf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1794 char *sname;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1795
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1796 if ((cmdlist == NULL) || (cmdlist->head == NULL)) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1797 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1798 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1799
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1800 for (repcmd = cmdlist->head; repcmd; repcmd = repcmd->next) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1801 if (repcmd->stat == REP_AVAIL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1802 rep_exe_pkt(repcmd->pkt);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1803 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1804 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1805
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1806 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1807 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1808
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1809
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1810 /* execute command list based cmd structure */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1811 /* sn must be already exists */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1812 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1813 rep_exe_cmdlist(cmdlist)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1814 rep_cmdlist *cmdlist;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1815 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1816 rep_cmd *cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1817 BUFTYPE *orgbuf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1818 unsigned short uid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1819
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1820 if ((cmdlist == NULL) || (cmdlist->head == NULL)) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1821 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1822 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1823
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1824 for (cmd = cmdlist->head; cmd; cmd = cmd->next) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1825 if (cmd->stat == REP_AVAIL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1826 rep_exe_cmd(cmd->cmd, cmd->sid, cmd->eid, cmd->seq,
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1827 cmd->lnum, cmd->len, cmd->pkt + REP_TEXT_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1828 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1829 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1830
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1831 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1832 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1833
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1834
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1835
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1836
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1837 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1838 rep_recv_cmds(fd, smcmdlist, txtcmdlist)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1839 int fd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1840 rep_cmdlist *smcmdlist;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1841 rep_cmdlist *txtcmdlist;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1842 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1843 unsigned int cmd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1844 unsigned int sid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1845 unsigned int eid;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1846 unsigned int seq;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1847 unsigned int lnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1848 unsigned int textsize;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1849
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1850 char header[REP_HEADER_SIZE];
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1851
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1852 char *text = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1853 int retval;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1854
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1855 if (fd < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1856 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1857 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1858
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1859 /* 一定時間読み取るようにしたい */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1860
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1861 /* read header part */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1862 if (readn(fd, header, REP_HEADER_SIZE) < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1863 puts_sys_err();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1864 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1865 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1866
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1867 cmd = get_header(header, REP_CMD_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1868 sid = get_header(header, REP_SID_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1869 eid = get_header(header, REP_EID_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1870 seq = get_header(header, REP_SEQNUM_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1871 lnum = get_header(header, REP_LNUM_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1872 textsize = get_header(header, REP_T_SIZE_OFFSET);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1873
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1874 if (textsize > 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1875 if ((text = (char*)rep_alloc(textsize)) == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1876 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1877 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1878 /* read text part */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1879 if (readn(fd, text, textsize) < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1880 puts_sys_err();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1881 rep_free(text);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1882 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1883 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1884 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1885
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1886 if (cmd == REP_INSERT_CMD ||
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1887 cmd == REP_DELETE_LINE_CMD ||
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1888 cmd == REP_REPLACE_CMD) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1889 add_cmd_to_list(txtcmdlist, make_cmd(cmd, sid, eid, seq, lnum, text));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1890 } else {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1891 add_cmd_to_list(smcmdlist, make_cmd(cmd, sid, eid, seq, lnum, text));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1892 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1893 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1894 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1895
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1896 void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1897 rep_send_cur_cmdlist()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1898 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1899 rep_T *rep_p = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1900
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1901 rep_send_cmds(rep_p->smfd,&(rep_p->cursession->new_cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1902
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1903 free_cmdlist(&rep_p->cursession->sent_cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1904
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1905 rep_p->cursession->sent_cmdlist.head = rep_p->cursession->new_cmdlist.head;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1906 rep_p->cursession->sent_cmdlist.num = rep_p->cursession->new_cmdlist.num;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1907
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1908 rep_p->cursession->new_cmdlist.head = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1909 rep_p->cursession->new_cmdlist.num = 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1910
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1911 return;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1912 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1913
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1914 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1915 rep_send_cmds(fd,cmdlist)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1916 int fd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1917 rep_cmdlist *cmdlist;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1918 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1919 rep_cmd *cur;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1920 unsigned int nlen;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1921
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1922 if ((fd<0) || (cmdlist == NULL)) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1923 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1924 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1925
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1926 if ((cmdlist->head == NULL) || (cmdlist->num == 0)) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1927 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1928 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1929
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1930 for (cur = cmdlist->head; cur; cur = cur->next) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1931 if (writen(fd, cur->pkt, cur->len+REP_HEADER_SIZE) < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1932 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1933 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1934 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1935 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1936 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1937
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1938 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1939 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1940 session_fd_check(sn, rfds_p, efds_p)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1941 Session *sn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1942 fd_set *rfds_p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1943 fd_set *efds_p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1944 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1945 rep_cmdlist smcmdlist = {NULL,0};
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1946 rep_cmdlist txtcmdlist = {NULL,0};
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1947
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1948 if (sn == NULL) return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1949
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1950 if (sn->smfd > 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1951 if (FD_ISSET(sn->smfd, efds_p)) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1952 if (sn->rfd != sn->sfd) close(sn->rfd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1953 sn->rfd = -1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1954 // 再接続処理をしたい
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1955 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1956 } else if (FD_ISSET(sn->rfd, rfds_p)) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1957 if (rep_recv_cmds(sn->rfd, &(smcmdlist), &(txtcmdlist)) == FALSE) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1958 if (sn->rfd != sn->sfd) close(sn->rfd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1959 sn->rfd = -1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1960 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1961 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1962
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1963 if ((cmdlist.head) && (cmdlist.head->uid == 99)) { // 単方向コマンド
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1964 rep_exe_cmdlist(sn, sn->rfd, &(cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1965 free_cmdlist(&(cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1966 } else if ((cmdlist.head) && (cmdlist.head->uid == sn->uid)) { // 自分のコマンド
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1967 free_cmdlist(&cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1968
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1969 if (rep_send_cmds(sn->sfd, &(sn->new_cmdlist)) == FALSE) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1970 if (sn->rfd != sn->sfd) close(sn->sfd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1971 sn->sfd = -1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1972 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1973 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1974
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1975 sn->sent_cmdlist.head = sn->new_cmdlist.head;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1976 sn->sent_cmdlist.num = sn->new_cmdlist.num;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1977 sn->new_cmdlist.head = NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1978 sn->new_cmdlist.num = 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1979
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1980 } else { // リングに流すコマンド
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1981 // 受け取ったトークンとユーザからのREPコマンドを比較・マージする
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1982 // 既に送信した REPコマンド列 と比較
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1983 translate(&(sn->sent_cmdlist), &(cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1984 del_ignored_cmd(&(cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1985 set_header_to_pkt(&(cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1986
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1987 if (rep_send_cmds(sn->sfd, &(cmdlist)) == FALSE) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1988 if (sn->rfd != sn->sfd) close(sn->sfd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1989 sn->sfd = -1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1990 free_cmdlist(&(cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1991 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1992 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1993
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1994 // 新規に追加された REPコマンド列 との比較
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1995 translate(&(sn->new_cmdlist), &(cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1996 del_ignored_cmd(&(cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1997 set_header_to_pkt(&(sn->new_cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1998
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
1999 // 変換したトークンREPコマンドを自分のバッファに反映する。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2000 //各パケットにはその変換は反映されていない.
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2001 rep_exe_cmdlist(sn, sn->rfd, &(cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2002
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2003 free_cmdlist(&(cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2004 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2005 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2006 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2007 if (sn->sfd > 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2008 if (FD_ISSET(sn->sfd, efds_p)) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2009 if (sn->rfd != sn->sfd) close(sn->sfd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2010 sn->sfd = -1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2011 // 再接続処理をしたい
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2012 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2013 } else if (FD_ISSET(sn->sfd, rfds_p)) { // from send client
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2014 if (rep_recv_cmds(sn->sfd, &cmdlist) == FALSE) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2015 if (sn->rfd != sn->sfd) close(sn->sfd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2016 sn->sfd = -1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2017 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2018 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2019 rep_exe_cmdlist(sn, sn->sfd, &cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2020 free_cmdlist(&cmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2021 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2022 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2023 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2024
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2025 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2026
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2027 int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2028 rep_fd_check(fd, rfds_p, efds_p)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2029 int fd; // input from keyboard or something...
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2030 fd_set *rfds_p; // readable fds
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2031 fd_set *efds_p; // include a error fd
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2032 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2033 int newfd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2034 rep_T *rep_p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2035 rep_cmdlist smcmdlist = {NULL,0};
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2036 rep_cmdlist txtcmdlist = {NULL,0};
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2037
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2038 Session *sn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2039
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2040 /* input from keyboard is most important.
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2041 * reditor has nothing to do */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2042 if (FD_ISSET(fd, rfds_p) || FD_ISSET(fd, efds_p)) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2043 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2044 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2045
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2046 rep_p = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2047
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2048 if ((rep_p->smfd > 0) && (FD_ISSET(rep_p->smfd, rfds_p))) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2049 /* we don't need this?
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2050 // 受け取ったトークンとユーザからのREPコマンドを比較・マージする
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2051 // 既に送信した REPコマンド列 と比較
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2052 translate(&(sn->sent_cmdlist), &(cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2053 del_ignored_cmd(&(cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2054 set_header_to_pkt(&(cmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2055 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2056
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2057 if (rep_recv_cmds(rep_p->smfd, &(smcmdlist), &(txtcmdlist)) == FALSE) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2058 close(rep_p->smfd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2059 rep_p->smfd = -1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2060 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2061 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2062 /* Session ごとに行う↓*/
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2063 for(sn = rep_p->shead; sn ; sn = sn->next) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2064 translate( &sn->new_cmdlist , &txtcmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2065 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2066 del_ignored_cmd(&txtcmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2067 rep_exe_pktlist(&txtcmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2068
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2069 if (rep_send_cmds(rep_p->smfd, &(txtcmdlist)) == FALSE) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2070 close(sn->smfd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2071 sn->smfd = -1;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2072 free_cmdlist(&(txtcmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2073 return FALSE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2074 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2075 free_cmdlist(&(txtcmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2076
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2077 rep_exe_pktlist( &smcmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2078 free_cmdlist(&(smcmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2079
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2080 return TRUE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2081 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2082 rep_exe_pktlist( &smcmdlist);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2083 free_cmdlist(&(smcmdlist));
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2084
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2085 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2086 session_fd_check(rep_p->slineup, rfds_p, efds_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2087
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2088 for (sn=rep_p->shead; sn; sn=sn->next) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2089 session_fd_check(sn, rfds_p, efds_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2090 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2091 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2092
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2093 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2094
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2095 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2096 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2097 session_fd_set(sn, rfds_p, efds_p, max_fds)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2098 Session *sn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2099 fd_set *rfds_p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2100 fd_set *efds_p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2101 int max_fds;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2102 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2103 if (sn == NULL) return max_fds;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2104
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2105 if (sn->rfd > 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2106 FD_SET(sn->rfd, rfds_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2107 FD_SET(sn->rfd, efds_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2108 if (max_fds < sn->rfd) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2109 max_fds = sn->rfd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2110 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2111 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2112 if (sn->sfd > 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2113 FD_SET(sn->sfd, rfds_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2114 FD_SET(sn->sfd, efds_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2115 if (max_fds < sn->sfd) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2116 max_fds = sn->sfd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2117 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2118 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2119 return max_fds;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2120 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2121 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2122
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2123
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2124 int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2125 rep_fd_set(rfds_p, efds_p, max_fds)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2126 fd_set *rfds_p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2127 fd_set *efds_p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2128 int max_fds;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2129 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2130 rep_T *rep_p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2131 Session *sn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2132 int i;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2133
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2134 rep_p = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2135
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2136 if (rep_p->smfd > 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2137 FD_SET(rep_p->smfd,rfds_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2138 FD_SET(rep_p->smfd,efds_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2139 if(max_fds < rep_p->smfd){
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2140 max_fds = rep_p->smfd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2141 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2142 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2143
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2144 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2145 max_fds = session_fd_set(rep_p->slineup, rfds_p, efds_p, max_fds);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2146
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2147 for (sn=rep_p->shead; sn; sn=sn->next) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2148 max_fds = session_fd_set(sn, rfds_p, efds_p, max_fds);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2149 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2150 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2151
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2152 return(max_fds);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2153 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2154
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2155
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2156
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2157 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2158 * read などで待つ場合に、この関数で REP 関連のデータをチェックする
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2159 * 指定した fd ( read で読みこむ) から入力があるとぬける。
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2160 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2161 int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2162 rep_select(fd)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2163 int fd;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2164 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2165 fd_set rfds_p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2166 fd_set efds_p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2167 int sk;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2168 int max_fds = MAX_FDS;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2169
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2170 struct timeval tv;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2171
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2172 if (fd < 0) return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2173
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2174 while (1) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2175 /* select の中で modify されてるので、初期化 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2176 tv.tv_sec = 0;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2177 tv.tv_usec = 100000;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2178 FD_ZERO(&rfds_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2179 FD_ZERO(&efds_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2180
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2181 FD_SET(fd,&rfds_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2182
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2183 max_fds = rep_fd_set(&rfds_p, &efds_p, max_fds);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2184
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2185 if ((sk = select(max_fds+1, &rfds_p, NULL, &efds_p, &tv)) < 0) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2186 e_msg_wrp("rep_select(): ERROR");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2187 return(FALSE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2188 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2189
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2190 rep_fd_check(fd, &rfds_p, &efds_p);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2191 return(TRUE);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2192 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2193 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2194
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2195 void
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2196 rep_end()
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2197 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2198 rep_T *rep_p;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2199 rep_p = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2200
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2201 if (rep_p->shead) free_session_list(rep_p->shead); // cursession is freed
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2202 if (rep_p->slineup) free_session(rep_p->slineup);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2203 if (rep_p->servername) free_wrp(rep_p->servername);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2204 if (rep_p->smfd > 0) close(rep_p->smfd);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2205
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2206 set_curbuf_wrp(rep_p->scratch_buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2207
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2208 rep_init();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2209 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2210
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2211
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2212 /* append newline separated text to session buf */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2213 static int
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2214 append_newline_sep_text(sn, text)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2215 Session *sn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2216 char *text;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2217 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2218 char *str;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2219 char *cur;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2220 // BUFTYPE *oldbuf;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2221 Session *oldsn;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2222
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2223 /*
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2224 *"append_memline()" is available "curbuf" only
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2225 * thus, we must set buffer to "curbuf"
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2226 */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2227 oldsn = set_cursession(sn);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2228
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2229 for (str = cur = text; cur && *cur ; str = cur) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2230 cur = strchr(str, '\n');
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2231 if (cur) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2232 *cur = '\0';
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2233 cur++;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2234 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2235
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2236 append_memline_wrp(1, str);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2237 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2238
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2239 set_cursession(oldsn);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2240
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2241 return TRUE;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2242 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2243
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2244 /* return value (file name) is allocated */
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2245 static char *
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2246 get_sname_by_snum(snum)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2247 int snum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2248 {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2249 char *tmp, *text, *sname;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2250 int i, len;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2251 int maxlnum;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2252 rep_T *rep = get_rep();
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2253
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2254 maxlnum = get_bufmaxline_wrp(rep->slineup->buf);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2255
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2256 for (i = 1; i <= maxlnum; i++) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2257 // text is "filename:hostname:sessionnumber"
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2258 text = get_memline_wrp(rep->slineup->buf, i);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2259
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2260
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2261 // get ':' separated last parameter (session number)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2262 if ((tmp = strrchr(text, ':')) == NULL) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2263 return NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2264 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2265 tmp++;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2266
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2267 if (snum == atol(tmp)) {
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2268 // get ':' separated first parameter (filename)
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2269 tmp = strchr(text, ':');
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2270 len = tmp - text;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2271 if ((sname = (char *)rep_alloc(len+1)) == NULL){
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2272 e_msg_wrp("no memory!");
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2273 return NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2274 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2275 memcpy(sname, text, len);
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2276 sname[len] = '\0';
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2277 return sname;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2278 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2279 }
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2280
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2281 return NULL;
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2282
f21b6f345e69 *** empty log message ***
axmo
parents:
diff changeset
2283 }