# HG changeset patch # User kono # Date 1220163899 -32400 # Node ID 1e44fe6dcfaa56ba9066a72b7eb4021d8074aca1 # Parent c8b79e6953b5b01af09971ea55571ecb4ed50dc8 *** empty log message *** diff -r c8b79e6953b5 -r 1e44fe6dcfaa src/reditor.c --- a/src/reditor.c Sun Aug 31 15:10:53 2008 +0900 +++ b/src/reditor.c Sun Aug 31 15:24:59 2008 +0900 @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -16,8 +15,6 @@ /* Wrapper for Vim */ static void e_msg_wrp(char *msg); -static void e_msg2_wrp(char *msg1, char *msg2); -static void puts_msg_wrpt(char *msg); static void free_wrp(void *p); static BUFTYPE* make_new_buf_wrp(char *name); static void free_buf_wrp(BUFTYPE *buf); @@ -28,24 +25,16 @@ static char* get_memline_wrp(BUFTYPE *buf, long lnum); static int append_memline_wrp(long lnum, char *text); static int delete_memline_wrp(long lnum); -static int replace_memline_wrp(long lnum, char *text); static void update_screen_now_wrp(); -static void update_screen_later_wrp(BUFTYPE *buf); static long get_bufmaxline_wrp(BUFTYPE* buf); static char* getstr_input_wrp(char *msg); static char *get_fullpath_wrp(BUFTYPE *buf); -static char *get_shortname_wrp(BUFTYPE *buf); /* Wrapper END */ static rep_T* get_rep(); static int del_ignored_cmd(rep_cmdlist *cmdlist); -static int translate(rep_cmdlist *userlist, rep_cmdlist *tokenlist); -static void set_header_to_pkt(rep_cmdlist *cmdlist); -static int rep_get_listened_fd(); -static int set_hostnamebysock(int sock, char *hostname, int maxlen); -static int rep_accept(); static int rep_connect(char *host); static void* rep_alloc(int size); @@ -60,17 +49,8 @@ static Session* set_cursession(Session *sn); static Session* find_session_by_buf(BUFTYPE *buf); static Session* find_session_by_name(char *name); -static int set_session_info(char *dest_sinfo, char *sname, char *hostname, int port); static char* get_fullpath(Session *session); -static char* get_shortname(Session *session); -static int make_local_slineup(Session *slineup, - char *hostname, - Session *my_sessions); -static int get_slineup_from_sm(char *servername, - Session *slineup, - char *hostname, - Session *my_sessions); static char* get_sname_by_snum(int snum); static int writen(int fd, char *textbuf, unsigned int len); @@ -80,7 +60,6 @@ unsigned int seq, unsigned int lnum, char *text); -static char* make_open_packet(char *file_name); static rep_cmd* make_cmd(unsigned int cmd, unsigned int sid, unsigned int eid, @@ -90,7 +69,6 @@ static int free_cmd(rep_cmd *cmd); static int free_cmdlist(rep_cmdlist *cmdlist); static void add_cmd_to_list(rep_cmdlist *cmdlist, rep_cmd *cmd); -static int add_pkt_to_list(rep_cmdlist *cmdlist, char *pkt); static void check_line_change(Session *sn, unsigned int lnum); @@ -106,13 +84,10 @@ char *text); static int rep_exe_pkt(char *pkt); static int rep_exe_pktlist(rep_cmdlist *cmdlist); -static int rep_exe_cmdlist(rep_cmdlist *cmdlist); static int rep_recv_cmds(int fd, rep_cmdlist *smcmdlist,rep_cmdlist *txtcmdlist); static int rep_send_cmds(int fd, rep_cmdlist *cmdlist); -static int session_fd_check(Session *sn, fd_set *rfds_p, fd_set *efds_p); -static int session_fd_set(Session *sn, fd_set *rfds_p, fd_set *efds_p, int max_fds); static int append_newline_sep_text(Session *sn, char *text); /* g_rep has an all information of Remote Editor */ @@ -132,14 +107,6 @@ EMSG(msg); } -static void -e_msg2_wrp(msg1, msg2) - char * msg1; - char * msg2; -{ - EMSG2(msg1,msg2); -} - /* 通常のメッセージを出力 */ static void puts_msg_wrp(msg) @@ -180,11 +147,9 @@ char * name; { char *sfname = NULL; // sfname is used name's address - BUFTYPE *buf; - BUFTYPE *orgbuf; + + BUFTYPE *buf = NULL; //??? - /* make a full file name. name is changed to absolute path. - * name's address is assigned to sfname. */ fname_expand(buf, (char_u**)&name, (char_u**)&sfname); buf = buflist_findname((char_u*)name); @@ -197,10 +162,6 @@ BUFTYPE *buf; { BUFTYPE *oldbuf; - /* - oldbuf = set_curbuf_wrp(buf); - set_curbuf_wrp(oldbuf); - */ oldbuf = curbuf; curbuf = buf; open_buffer(FALSE, NULL); @@ -283,25 +244,6 @@ return r; } -/* 編集中のバッファの行の置換 */ -static int -replace_memline_wrp(lnum, text) - long lnum; - char * text; -{ - int r; - int permit; - rep_T *rep; - rep = get_rep(); - permit = rep->permit; - rep->permit = FALSE; - - r = ml_replace(lnum, (char_u*)text, TRUE); - - rep->permit = permit; - return r; -} - /* バッファの編集後の後処理 */ static void update_screen_now_wrp() @@ -311,14 +253,6 @@ return; } -static void -update_screen_later_wrp(buf) - BUFTYPE *buf; -{ - check_cursor(); - return redraw_buf_later(buf, CLEAR); -} - /* 編集中のバッファの行数を返す */ static long get_bufmaxline_wrp(buf) @@ -350,13 +284,6 @@ return (char*)buf->b_ffname; } -/* get short name of buffer */ -static char * -get_shortname_wrp(buf) - BUFTYPE *buf; -{ - return (char*)buf->b_sfname; -} /* Wrapper END */ @@ -472,255 +399,6 @@ } -/***** translate(UserList, ToknList) ***** - 入力はトークンとユーザ入力からのREPコマンドのリストで、 - それらを比較・変換して、二つのREPコマンドリストを生成する。 - - ------------- - UserList ->| | -> UserList' - | translate | - ToknList ->| | -> ToknList' - ------------- - - Session ID が異なるときは、可換なので、何もしない。 - - ToknList + UserList' をトークンとして次のリモートエディタに渡し、 - ToknList' は自分のバッファに反映させる。 - - 比較時に行番号が重なったときの処理は以下の表。 - なるべくテキストが残るようにしている。 - x\y は、TOKEN を x, USER を y するという意味。 - 0 -- なにもしない - +1 -- 行番号を +1 - i -- コマンド id を 'i' にする。 - X -- コマンドを削除(無視に)する。 - - USER - | i | r | d - ---|-------------------- - T i | 0\+1 | 0\+1 | 0\+1 - O ---|-------------------- - K r | +1\0 | 0\X | i\X - E ---|-------------------- - N d | +1\0 | X\i | X\X - - 無視にされた(stat に REP_IGNORE が入っている)REPコマンドは、 - 全ての比較が終了したときにリストから削除される。 -*/ -static int -translate(userlist, tokenlist) /* userのREPコマンドリスト, tokenのREPコマンドリスト */ - rep_cmdlist *userlist; - rep_cmdlist *tokenlist; -{ - rep_cmd *usercmd; - rep_cmd *tokencmd; - rep_cmd *unext; - rep_cmd *tnext; - - rep_cmd *h_pricmd; // high priority command - rep_cmd *l_pricmd; // low priority command - - for (usercmd=userlist->head; usercmd; usercmd=unext) { - unext = usercmd->next; - - /* 削除される(予定)のREPコマンドの比較は無視 */ - if (usercmd->stat == REP_IGNORE) continue; - - for (tokencmd=tokenlist->head; tokencmd; tokencmd=tnext) { - tnext=tokencmd->next; - - /* 削除される(予定)のREPコマンドの比較は無視 */ - if (tokencmd->stat == REP_IGNORE) continue; - /* XXX 消してもいい??*/ - if ( tokencmd->cmd != REP_INSERT_CMD && - tokencmd->cmd != REP_DELETE_LINE_CMD && - tokencmd->cmd != REP_REPLACE_CMD) { - tokencmd->stat = REP_IGNORE; - continue; - } - if (usercmd->stat == REP_IGNORE) break; - if ( usercmd->cmd != REP_INSERT_CMD && - usercmd->cmd != REP_DELETE_LINE_CMD && - usercmd->cmd != REP_REPLACE_CMD) { - usercmd->stat = REP_IGNORE; - break; - } - if (usercmd->sid != tokencmd->sid) { - // session id が違う場合は何しない - continue; - } - if (usercmd->lnum < tokencmd->lnum) { /* UsersLineNumber < TokensLineNumber */ - if (usercmd->cmd == REP_INSERT_CMD) { - tokencmd->lnum++; - } else if (usercmd->cmd == REP_DELETE_LINE_CMD) { - tokencmd->lnum--; - } - } else if (usercmd->lnum > tokencmd->lnum) { /* UsersLineNumber > TokensLineNumber */ - if (tokencmd->cmd == REP_INSERT_CMD) { - usercmd->lnum++; - } else if (tokencmd->cmd == REP_DELETE_LINE_CMD) { - usercmd->lnum--; - } - } else if (usercmd->lnum == tokencmd->lnum) { /* UsersLineNumber == TokensLineNumber */ - -#if 0 - /* - * 行番号が重なるとREPコマンドの競合が起こるので、 - * どちらかが譲らないといけない。 - * uid が小さい方を優先(h_pricmdに)し、 - * uid が大きい方(l_pricmd)を変更する。 - */ - - if (usercmd->eid < tokencmd->eid) { - h_pricmd = usercmd; - l_pricmd = tokencmd; - } else { - h_pricmd = tokencmd; - l_pricmd = usercmd; - } -#else - /* - 無条件に、自分の方が優先 - */ - h_pricmd = usercmd; - l_pricmd = tokencmd; -#endif - - if (h_pricmd->cmd == REP_INSERT_CMD) { - l_pricmd->lnum++; - } else if (h_pricmd->cmd == REP_REPLACE_CMD) { - - if (l_pricmd->cmd == REP_INSERT_CMD) { - h_pricmd->lnum++; - } else if (l_pricmd->cmd == REP_REPLACE_CMD) { - /* h_pricmd が優先され,l_pricmd は削除(無視に)する */ - l_pricmd->stat = REP_IGNORE; - } else if (l_pricmd->cmd == REP_DELETE_LINE_CMD) { - /* - * l_pricmd 側ではすでにdeleteされているので、 - * h_pricmd を REP_REPLACE_CMD -> REP_INSERT_CMD へ変更。 - */ - h_pricmd->cmd = REP_INSERT_CMD; - l_pricmd->stat = REP_IGNORE; - } - - } else if (h_pricmd->cmd == REP_DELETE_LINE_CMD) { - - if (l_pricmd->cmd == REP_INSERT_CMD) { - h_pricmd->lnum++; - } else if (l_pricmd->cmd == REP_REPLACE_CMD) { - /* - * h_pricmd 側ではすでにdeleteされているので、 - * l_pricmd 側を REP_REPLACE_CMD -> REP_INSERT_CMD へ変更。 - */ - l_pricmd->cmd = REP_INSERT_CMD; - h_pricmd->stat= REP_IGNORE; - } else if (l_pricmd->cmd == REP_DELETE_LINE_CMD) { - /* - * 相手と削除する行が重なるので、 - * 両方のコマンドを無視にする。 - * 相手先ではすでにこの行は削除されている。 - */ - h_pricmd->stat = REP_IGNORE; - l_pricmd->stat = REP_IGNORE; - break; - } else { - } - } else { - } - } - } - } - - return(TRUE); -} - - -static void -set_header_to_pkt(cmdlist) - rep_cmdlist *cmdlist; -{ - rep_cmd *curcmd; - for (curcmd=cmdlist->head; curcmd; curcmd=curcmd->next) { - set_header(curcmd->cmd, curcmd->pkt, REP_CMD_OFFSET); - set_header(curcmd->sid, curcmd->pkt, REP_SID_OFFSET); - set_header(curcmd->eid, curcmd->pkt, REP_EID_OFFSET); - set_header(curcmd->seq, curcmd->pkt, REP_SEQNUM_OFFSET); - set_header(curcmd->len, curcmd->pkt, REP_T_SIZE_OFFSET); - set_header(curcmd->lnum, curcmd->pkt, REP_LNUM_OFFSET); - } - return; -} - -static int -rep_get_listened_fd() -{ - int sock; - int value; - struct sockaddr_in addr; - - if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { - e_msg_wrp("socket(): ERROR"); - return(-1); - } - - /* Allow other programs to bind to the socket */ - value = 1; - if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value)) < 0) { - e_msg_wrp("setsockopt() REUSEADDR failed"); - exit(1); - } - - bzero((char*)&addr, sizeof(addr)); - - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = INADDR_ANY; - addr.sin_port = htons(REP_PORT); - - if ((bind(sock, (struct sockaddr*)&addr, sizeof(addr))) == -1) { - e_msg_wrp("bind(): ERROR"); - return(-1); - } - - if ((listen(sock, SOCK_MAX)) < 0) { - e_msg_wrp("listen(): ERROR"); - return(-1); - } - - return(sock); -} - -static int -set_hostnamebysock(sock,hostname,maxlen) - int sock; - char *hostname; - int maxlen; -{ - int sinlen; - struct sockaddr_in sin; - struct hostent *host; - int namelen; - - sinlen = sizeof sin; - if (getpeername(sock, (struct sockaddr *) &sin, (socklen_t *)&sinlen) < 0){ - return(FALSE); - } - - if ((host = gethostbyaddr((char *) &sin.sin_addr, sizeof(sin.sin_addr), AF_INET)) == NULL){ - return(FALSE); - } - - namelen = strlen(host->h_name); - if (namelen > maxlen) { - e_msg_wrp("host name is too long."); - return(FALSE); - } - - strncpy(hostname,host->h_name,namelen); - hostname[namelen] = '\0'; - return(TRUE); -} - static char default_host[] = "localhost"; static int @@ -733,7 +411,7 @@ char *tmp; int port; - if (host == NULL || host == '\n') { + if (host == NULL || *host == '\n') { host = default_host; port = REP_PORT; } else { @@ -888,7 +566,7 @@ set_cursession(sn) Session *sn; { - BUFTYPE *oldbuf; + BUFTYPE *oldbuf = NULL; Session *oldsn; rep_T *rep = get_rep(); @@ -968,19 +646,6 @@ } -static int -set_session_info(dest_sinfo, sname, hostname, port) - char *dest_sinfo; - char *sname; - char *hostname; - int port; -{ - int size; - size = sprintf(dest_sinfo, "%s:%d:%s",hostname, port, sname); - dest_sinfo[size] = '\0'; - return 0; -} - static char* get_fullpath(session) Session *session; @@ -994,59 +659,10 @@ return get_fullpath_wrp(buf); } -static char* -get_shortname(session) - Session *session; -{ - return get_shortname_wrp(session->buf); -} - - /* End Session */ -#define SINFO_MAX 255 -/* - * 自身が提供するセッションのみをセッションリストに書き出す - * あらかじめセッションリストのバッファを編集対象のバッファに - *指定しておく(set_curbuf_wrp(slineup)しておく) - */ -static int -make_local_slineup(slineup, hostname, my_sessions) - Session *slineup; - char *hostname; - Session *my_sessions; -{ - Session *s; - BUFTYPE *oldcurbuf; - char sinfo[SINFO_MAX]; - if (my_sessions == NULL) return FALSE; - - for (; my_sessions; my_sessions=my_sessions->next) { - set_session_info(sinfo, my_sessions->sname, hostname, REP_PORT); - /* 現在の編集対象のバッファ curbuf に対して書き込みを行なう */ - append_memline_wrp(1, sinfo); - } - - return TRUE; -} - - -/* - * セッションマネージャからセッションリストを取得 - * あらかじめセッションリストのバッファを編集対象のバッファに - *指定しておく(set_curbuf_wrp(buf)しておく) - */ -static int -get_slineup_from_sm(servername, slineup, hostname, my_sessions) - char *servername; - Session *slineup; - char *hostname; - Session *my_sessions; // linked list -{ - return TRUE; -} char * @@ -1142,7 +758,6 @@ rep_T *rep = get_rep(); rep_cmdlist cmdlist = {NULL, 0}; int len; - Session *sn; if ((sock = rep_connect(NULL)) < 0) { return FALSE; @@ -1161,14 +776,6 @@ } } - /* - if (find_session_by_name(sname) == NULL) { - sn = make_session(sname, get_buf_by_name(sname)); - register_session(sn); - } - */ - - if (rep->waiting_session_name) { rep_free(rep->waiting_session_name); } @@ -1207,41 +814,6 @@ return TRUE; } -static int -rep_make_slineup() -{ - BUFTYPE buf; -// BUFTYPE *oldcurbuf; - Session *oldsn; - - rep_T *rep; - rep = get_rep(); - - if (rep->slineup) { - free_session(rep->slineup); - } - - rep->slineup = make_session(SLINEUP_NAME, make_new_buf_wrp(SLINEUP_NAME)); - - oldsn = set_cursession(rep->slineup); - - /* セッション一覧リストを作成 */ - if ((get_slineup_from_sm(rep->servername, rep->slineup, rep->hostname, rep->shead) == FALSE)) { - make_local_slineup(rep->slineup, rep->hostname, rep->shead); - } - - update_screen_now_wrp(); /* ウィンドウを再描画 */ - - return TRUE; -} - - -static int -enter_session(session_name) - char *session_name; -{ - return TRUE; -} /* Session End */ @@ -1437,38 +1009,6 @@ return; } -static int -add_pkt_to_list(cmdlist, pkt) /* pkt is allocated */ - rep_cmdlist *cmdlist; - char *pkt; -{ - rep_cmd *cmd_p; - - if (pkt == NULL) return(FALSE); - - cmd_p = (rep_cmd*)rep_alloc(sizeof(rep_cmd)); - if (cmd_p == NULL) { - e_msg_wrp("add_pkt_to_list: no memory: ERROR"); - return(FALSE); - } - - cmd_p->next = NULL; - - cmd_p->cmd = get_header(pkt, REP_CMD_OFFSET); - cmd_p->sid = get_header(pkt, REP_SID_OFFSET); - cmd_p->eid = get_header(pkt, REP_EID_OFFSET); - cmd_p->seq = get_header(pkt, REP_SEQNUM_OFFSET); - cmd_p->lnum = get_header(pkt, REP_LNUM_OFFSET); - - cmd_p->stat = REP_AVAIL; - cmd_p->len = strlen(pkt)+1 - REP_HEADER_SIZE; - cmd_p->pkt = pkt; - - add_cmd_to_list(cmdlist, cmd_p); - - return(TRUE); -} - void rep_prevline_flush() @@ -1478,6 +1018,7 @@ rep_cmd *cmd; rep_T *rep = get_rep(); char *text; + char *prev_text = NULL; cursn = rep->cursession; @@ -1496,7 +1037,7 @@ //cmd = make_cmd(REP_REPLACE_CMD, cursn->sid, rep->eid, rep->seqno++, cursn->prevline, text); // TODO : 変更前のテキストを UNDO バッファから取得する - cmd = make_cmd(REP_DELETE_CMD, cursn->sid, rep->eid, rep->seqno++, cursn->prevline, prev_text); + cmd = make_cmd(REP_DELETE_LINE_CMD, cursn->sid, rep->eid, rep->seqno++, cursn->prevline, prev_text); cmd->next = make_cmd(REP_INSERT_CMD, cursn->sid, rep->eid, rep->seqno++, cursn->prevline, text); add_cmd_to_list(&(cursn->new_cmdlist), cmd); @@ -1633,18 +1174,12 @@ unsigned int textsize; char *text; { - char h_name[50]; rep_cmdlist tmplist = {NULL, 0}; - rep_cmd *repcmd; - BUFTYPE *buf; rep_T *rep = get_rep(); Session *session; - unsigned int buflenmax; - session = find_session_by_id(sid); - /*XXX 無理矢理 */ if (textsize == 0) { text = NULL; } @@ -1664,36 +1199,6 @@ rep->eid = eid; } break; -/* - case REP_SELECT_ACK: - // text is error message. means occur ERROR in session manager - if (text) { - e_msg_wrp(text); - return FALSE; - } - - // DON'T wait session from session manager - if (! rep->waiting_session_name) { - return FALSE; - } - - session = make_session(rep->waiting_session_name, - make_new_buf_wrp(rep->waiting_session_name)); - session->sid = sid; - register_session(session); - - rep_free(rep->waiting_session_name); - rep->waiting_session_name = NULL; - - set_cursession(session); - - rep_start_create_cmds(); - - // get window size - // send read command - break; - case REP_REGISTER_ACK: -*/ case REP_PUT_ACK: /* Enter Session */ @@ -1717,46 +1222,12 @@ rep_start_create_cmds(); break; -/* - case REP_DEREGISTER_CMD: - case REP_DEREGISTER_ACK: - case REP_QUIT_CMD: - case REP_QUIT_ACK: - case REP_GET_CMD: - case REP_GET_ACK: - break; - case REP_OPEN_CMD: - // REP_OPEN_CMD is handled in list part. (may be upper function) - break; - - case REP_OPEN_ACK: - case REP_CLOSE_CMD: - break; - case REP_CLOSE_ACK: - break; - case REP_READ_CMD: - break; - case REP_READ_ACK: - break; - case REP_READ_FIN: - break; - // buffer edit commands - // session's buffer is set to current buffer -*/ case REP_INSERT_CMD: append_memline_wrp(lnum, text); break; case REP_DELETE_LINE_CMD: delete_memline_wrp(lnum); break; -/* - case REP_REPLACE_CMD: - if (lnum > get_bufmaxline_wrp(session->buf)) { - append_memline_wrp(lnum, text); - } - replace_memline_wrp(lnum, text); // text was allocated - break; -*/ default: break; } @@ -1798,8 +1269,6 @@ rep_cmdlist *cmdlist; { rep_cmd *repcmd; - BUFTYPE *orgbuf; - char *sname; if ((cmdlist == NULL) || (cmdlist->head == NULL)) { return(FALSE); @@ -1815,32 +1284,6 @@ } -/* execute command list based cmd structure */ -/* sn must be already exists */ -static int -rep_exe_cmdlist(cmdlist) - rep_cmdlist *cmdlist; -{ - rep_cmd *cmd; - BUFTYPE *orgbuf; - unsigned short uid; - - if ((cmdlist == NULL) || (cmdlist->head == NULL)) { - return(FALSE); - } - - for (cmd = cmdlist->head; cmd; cmd = cmd->next) { - if (cmd->stat == REP_AVAIL) { - rep_exe_cmd(cmd->cmd, cmd->sid, cmd->eid, cmd->seq, - cmd->lnum, cmd->len, cmd->pkt + REP_TEXT_OFFSET); - } - } - - return(TRUE); -} - - - static int rep_recv_cmds(fd, smcmdlist, txtcmdlist) @@ -1858,7 +1301,6 @@ char header[REP_HEADER_SIZE]; char *text = NULL; - int retval; if (fd < 0) { return(FALSE); @@ -1925,7 +1367,6 @@ rep_cmdlist *cmdlist; { rep_cmd *cur; - unsigned int nlen; if ((fd<0) || (cmdlist == NULL)) { return(FALSE); @@ -1943,94 +1384,6 @@ return(TRUE); } -/* -static int -session_fd_check(sn, rfds_p, efds_p) - Session *sn; - fd_set *rfds_p; - fd_set *efds_p; -{ - rep_cmdlist smcmdlist = {NULL,0}; - rep_cmdlist txtcmdlist = {NULL,0}; - - if (sn == NULL) return FALSE; - - if (sn->smfd > 0) { - if (FD_ISSET(sn->smfd, efds_p)) { - if (sn->rfd != sn->sfd) close(sn->rfd); - sn->rfd = -1; - // 再接続処理をしたい - return FALSE; - } else if (FD_ISSET(sn->rfd, rfds_p)) { - if (rep_recv_cmds(sn->rfd, &(smcmdlist), &(txtcmdlist)) == FALSE) { - if (sn->rfd != sn->sfd) close(sn->rfd); - sn->rfd = -1; - return(FALSE); - } - - if ((cmdlist.head) && (cmdlist.head->uid == 99)) { // 単方向コマンド - rep_exe_cmdlist(sn, sn->rfd, &(cmdlist)); - free_cmdlist(&(cmdlist)); - } else if ((cmdlist.head) && (cmdlist.head->uid == sn->uid)) { // 自分のコマンド - free_cmdlist(&cmdlist); - - if (rep_send_cmds(sn->sfd, &(sn->new_cmdlist)) == FALSE) { - if (sn->rfd != sn->sfd) close(sn->sfd); - sn->sfd = -1; - return FALSE; - } - - sn->sent_cmdlist.head = sn->new_cmdlist.head; - sn->sent_cmdlist.num = sn->new_cmdlist.num; - sn->new_cmdlist.head = NULL; - sn->new_cmdlist.num = 0; - - } else { // リングに流すコマンド - // 受け取ったトークンとユーザからのREPコマンドを比較・マージする - // 既に送信した REPコマンド列 と比較 - translate(&(sn->sent_cmdlist), &(cmdlist)); - del_ignored_cmd(&(cmdlist)); - set_header_to_pkt(&(cmdlist)); - - if (rep_send_cmds(sn->sfd, &(cmdlist)) == FALSE) { - if (sn->rfd != sn->sfd) close(sn->sfd); - sn->sfd = -1; - free_cmdlist(&(cmdlist)); - return FALSE; - } - - // 新規に追加された REPコマンド列 との比較 - translate(&(sn->new_cmdlist), &(cmdlist)); - del_ignored_cmd(&(cmdlist)); - set_header_to_pkt(&(sn->new_cmdlist)); - - // 変換したトークンREPコマンドを自分のバッファに反映する。 - //各パケットにはその変換は反映されていない. - rep_exe_cmdlist(sn, sn->rfd, &(cmdlist)); - - free_cmdlist(&(cmdlist)); - } - } - } - if (sn->sfd > 0) { - if (FD_ISSET(sn->sfd, efds_p)) { - if (sn->rfd != sn->sfd) close(sn->sfd); - sn->sfd = -1; - // 再接続処理をしたい - return FALSE; - } else if (FD_ISSET(sn->sfd, rfds_p)) { // from send client - if (rep_recv_cmds(sn->sfd, &cmdlist) == FALSE) { - if (sn->rfd != sn->sfd) close(sn->sfd); - sn->sfd = -1; - return(FALSE); - } - rep_exe_cmdlist(sn, sn->sfd, &cmdlist); - free_cmdlist(&cmdlist); - } - } -} - - */ int rep_fd_check(fd, rfds_p, efds_p) @@ -2038,12 +1391,11 @@ fd_set *rfds_p; // readable fds fd_set *efds_p; // include a error fd { - int newfd; rep_T *rep_p; rep_cmdlist smcmdlist = {NULL,0}; rep_cmdlist txtcmdlist = {NULL,0}; - Session *sn; + Session *sn = NULL; /* input from keyboard is most important. * reditor has nothing to do */ @@ -2068,11 +1420,6 @@ return FALSE; } /* Session ごとに行う↓*/ - /* - for(sn = rep_p->shead; sn ; sn = sn->next) { - translate( &sn->new_cmdlist , &txtcmdlist); - } - */ del_ignored_cmd(&txtcmdlist); rep_exe_pktlist(&txtcmdlist); @@ -2091,44 +1438,11 @@ } rep_exe_pktlist( &smcmdlist); free_cmdlist(&(smcmdlist)); - -/* - session_fd_check(rep_p->slineup, rfds_p, efds_p); - for (sn=rep_p->shead; sn; sn=sn->next) { - session_fd_check(sn, rfds_p, efds_p); - } -*/ + return TRUE; } -/* -static int -session_fd_set(sn, rfds_p, efds_p, max_fds) - Session *sn; - fd_set *rfds_p; - fd_set *efds_p; - int max_fds; -{ - if (sn == NULL) return max_fds; - - if (sn->rfd > 0) { - FD_SET(sn->rfd, rfds_p); - FD_SET(sn->rfd, efds_p); - if (max_fds < sn->rfd) { - max_fds = sn->rfd; - } - } - if (sn->sfd > 0) { - FD_SET(sn->sfd, rfds_p); - FD_SET(sn->sfd, efds_p); - if (max_fds < sn->sfd) { - max_fds = sn->sfd; - } - } - return max_fds; -} -*/ int @@ -2138,8 +1452,6 @@ int max_fds; { rep_T *rep_p; - Session *sn; - int i; rep_p = get_rep(); @@ -2151,14 +1463,6 @@ } } -/* - max_fds = session_fd_set(rep_p->slineup, rfds_p, efds_p, max_fds); - - for (sn=rep_p->shead; sn; sn=sn->next) { - max_fds = session_fd_set(sn, rfds_p, efds_p, max_fds); - } -*/ - return(max_fds); } @@ -2227,7 +1531,6 @@ { char *str; char *cur; -// BUFTYPE *oldbuf; Session *oldsn; /*