diff options
author | kcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2005-02-08 17:03:56 +0800 |
---|---|---|
committer | kcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2005-02-08 17:03:56 +0800 |
commit | bb7b49e02231af87b549beedc68b6f1e266b399b (patch) | |
tree | 2451b1a9ba30b0d94863635929ff4ea72f7616cc | |
parent | 1c1224bc654d1e9e97eac2b175e6c2a53a300795 (diff) | |
download | pttbbs-bb7b49e02231af87b549beedc68b6f1e266b399b.tar pttbbs-bb7b49e02231af87b549beedc68b6f1e266b399b.tar.gz pttbbs-bb7b49e02231af87b549beedc68b6f1e266b399b.tar.bz2 pttbbs-bb7b49e02231af87b549beedc68b6f1e266b399b.tar.lz pttbbs-bb7b49e02231af87b549beedc68b6f1e266b399b.tar.xz pttbbs-bb7b49e02231af87b549beedc68b6f1e266b399b.tar.zst pttbbs-bb7b49e02231af87b549beedc68b6f1e266b399b.zip |
code clean up. rewrite few lines.
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2480 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | util/xchatd.c | 909 |
1 files changed, 257 insertions, 652 deletions
diff --git a/util/xchatd.c b/util/xchatd.c index ebf0a225..3902bb79 100644 --- a/util/xchatd.c +++ b/util/xchatd.c @@ -3,7 +3,6 @@ #include "xchatd.h" #define SERVER_USAGE -#define WATCH_DOG #undef MONITOR /* �ʷ� chatroom ���ʥH�ѨM�ȯ� */ #undef DEBUG /* �{���������� */ @@ -11,15 +10,6 @@ #define MONITOR #endif -static int gline; - -#ifdef WATCH_DOG -#define MYDOG gline = __LINE__ -#else -#define MYDOG /* NOOP */ -#endif - - #define CHAT_PIDFILE "log/chat.pid" #define CHAT_LOGFILE "log/chat.log" @@ -76,7 +66,6 @@ struct ChatUser { struct ChatUser *unext; int sock; /* user socket */ - int talksock; /* talk socket */ ChatRoom *room; UserList *ignore; int userno; @@ -124,7 +113,6 @@ static ChatUser *mainuser; static fd_set mainfds; static int maxfds; /* number of sockets to select on */ static int totaluser; /* current number of connections */ -static struct timeval zerotv; /* timeval for selecting */ static char chatbuf[256]; /* general purpose buffer */ static int common_client_command; @@ -166,12 +154,12 @@ usr_fpath(char *buf, char *userid, char *fname) /* chkpasswd for check passwd */ /* ----------------------------------------------------- */ char *crypt(const char*, const char*); -static char pwbuf[PASSLEN]; int chkpasswd(const char *passwd, const char *test) { char *pw; + char pwbuf[PASSLEN]; strlcpy(pwbuf, test, PASSLEN); pw = crypt(pwbuf, passwd); @@ -263,8 +251,6 @@ static int valid_chatid(register char *id) { for(len = 0; (ch = *id); id++) { /* Thor: check for endless */ - MYDOG; - if(ch == '/' || ch == '*' || ch == ':') return 0; if(++len > 8) @@ -301,8 +287,6 @@ str_match(unsigned char *s1, unsigned char *s2) for (;;) { /* Thor: check for endless */ - MYDOG; - c2 = *s2; c1 = *s1; if (!c1) @@ -337,8 +321,6 @@ cuser_by_userid(char *userid) for (cu = mainuser; cu; cu = cu->unext) { - MYDOG; - if (str_equal(userid, cu->userid)) break; } @@ -353,8 +335,6 @@ cuser_by_chatid(char *chatid) for (cu = mainuser; cu; cu = cu->unext) { - MYDOG; - if (str_equal(chatid, cu->chatid)) break; } @@ -373,8 +353,6 @@ fuzzy_cuser_by_chatid(char *chatid) for (cu = mainuser; cu; cu = cu->unext) { - MYDOG; - mode = str_match(chatid, cu->chatid); if (mode == 0) return cu; @@ -411,12 +389,9 @@ list_free(UserList *list) while (list) { - MYDOG; - tmp = list->next; free(list); - MYDOG; list = tmp; } } @@ -427,8 +402,6 @@ list_add(UserList **list, ChatUser *user) { UserList *node; - MYDOG; - if((node = (UserList *) malloc(sizeof(UserList)))) { /* Thor: ����Ŷ����� */ strcpy(node->userid, user->userid); @@ -436,7 +409,6 @@ list_add(UserList **list, ChatUser *user) node->next = *list; *list = node; } - MYDOG; } @@ -446,14 +418,10 @@ list_delete(UserList **list, char *userid) UserList *node; while((node = *list)) { - MYDOG; - if (str_equal(node->userid, userid)) { *list = node->next; - MYDOG; free(node); - MYDOG; return 1; } list = &node->next; /* Thor: list�n��۫e�i */ @@ -468,8 +436,6 @@ list_belong(UserList *list, int userno) { while (list) { - MYDOG; - if (userno == list->userno) return 1; list = list->next; @@ -486,6 +452,7 @@ list_belong(UserList *list, int userno) static void Xdo_send(int nfds, fd_set *wset, char *msg) { + struct timeval zerotv; /* timeval for selecting */ int sr; /* Thor: for future reservation bug */ @@ -494,12 +461,8 @@ Xdo_send(int nfds, fd_set *wset, char *msg) zerotv.tv_usec = 16384; /* Ptt: �令16384 �קK������for loop�Ycpu time 16384 ���C��64�� */ - MYDOG; - sr = select(nfds + 1, NULL, wset, NULL, &zerotv); - MYDOG; - /* FIXME �Y select() timeout, �Φ��� write ready �����S��. �h�i��|�|�� msg? */ if (sr > 0) { @@ -508,13 +471,9 @@ Xdo_send(int nfds, fd_set *wset, char *msg) len = strlen(msg) + 1; while (nfds >= 0) { - MYDOG; - if (FD_ISSET(nfds, wset)) { - MYDOG; send(nfds, msg, len, 0);/* Thor: �p�Gbuffer���F, ���| block */ - MYDOG; if (--sr <= 0) return; } @@ -530,7 +489,7 @@ send_to_room(ChatRoom *room, char *msg, int userno, int number) ChatUser *cu; fd_set wset, *wptr; int sock, max; - static char sendbuf[256]; + char sendbuf[256]; int clitype; /* ���� bbs client �� common client �⦸�B�z */ for (clitype = (number == MSG_MESSAGE || !number) ? 0 : 1; clitype < 2; clitype++) @@ -541,8 +500,6 @@ send_to_room(ChatRoom *room, char *msg, int userno, int number) for (cu = mainuser; cu; cu = cu->unext) { - MYDOG; - if (room == cu->room || room == ROOM_ALL) { if (cu->clitype == clitype && (!userno || !list_belong(cu->ignore, userno))) @@ -583,7 +540,7 @@ send_to_user(ChatUser *user, char *msg, int userno, int number) { fd_set wset, *wptr; int sock; - static char sendbuf[256]; + char sendbuf[256]; sock = user->sock; FD_ZERO(wptr = &wset); @@ -643,17 +600,22 @@ exit_room(ChatUser *user, int mode, char *msg) { ChatRoom *room; - if((room = user->room)) { - user->room = NULL; - user->uflag &= ~PERM_ROOMOP; + if(user->room == NULL) + return; - if (--room->occupants > 0) - { - char *chatid; + room = user->room; + user->room = NULL; + user->uflag &= ~PERM_ROOMOP; - chatid = user->chatid; - switch (mode) - { + room->occupants--; + + if (room->occupants > 0) + { + char *chatid; + + chatid = user->chatid; + switch (mode) + { case EXIT_LOGOUT: sprintf(chatbuf, "�� %s ���}�F ...", chatid); @@ -674,45 +636,35 @@ exit_room(ChatUser *user, int mode, char *msg) sprintf(chatbuf, "�� �����I%s �Q��X�h�F", chatid); break; - } - if (!CLOAK(user)) /* Thor: ��ѫ������N */ - send_to_room(room, chatbuf, 0, MSG_MESSAGE); - - if (list_belong(room->invite, user->userno)) { - list_delete(&(room->invite), user->userid); - } - - sprintf(chatbuf, "- %s", user->userid); - send_to_room(room, chatbuf, 0, MSG_USERNOTIFY); - room_changed(room); + } + if (!CLOAK(user)) /* Thor: ��ѫ������N */ + send_to_room(room, chatbuf, 0, MSG_MESSAGE); - return; + if (list_belong(room->invite, user->userno)) { + list_delete(&(room->invite), user->userid); } - else if (room != &mainroom) - { /* Thor: �H�Ƭ�0��,���Omainroom�~free */ - register ChatRoom *next; + sprintf(chatbuf, "- %s", user->userid); + send_to_room(room, chatbuf, 0, MSG_USERNOTIFY); + room_changed(room); -#ifdef DEBUG - debug_room(); -#endif + return; + } - sprintf(chatbuf, "- %s", room->name); - send_to_room(ROOM_ALL, chatbuf, 0, MSG_ROOMNOTIFY); + /* Now, room->occupants==0 */ + if (room != &mainroom) + { /* Thor: �H�Ƭ�0��,���Omainroom�~free */ + register ChatRoom *next; - room->prev->next = room->next; - if((next = room->next)) - next->prev = room->prev; - list_free(room->invite); + sprintf(chatbuf, "- %s", room->name); + send_to_room(ROOM_ALL, chatbuf, 0, MSG_ROOMNOTIFY); - MYDOG; - free(room); - MYDOG; + room->prev->next = room->next; + if((next = room->next)) + next->prev = room->prev; + list_free(room->invite); -#ifdef DEBUG - debug_room(); -#endif - } + free(room); } } @@ -731,7 +683,7 @@ char * Ctime(time4_t *clock) { struct tm *t = localtime4(clock); - static char week[] = "��@�G�T�|����"; + const char *week = "��@�G�T�|����"; snprintf(datemsg, sizeof(datemsg), "%d�~%2d��%2d��%3d:%02d:%02d �P��%.2s", t->tm_year - 11, t->tm_mon + 1, t->tm_mday, @@ -759,18 +711,20 @@ chat_query(ChatUser *cu, char *msg) usr_fpath(chatbuf, xuser.userid, "plans"); fp = fopen(chatbuf, "rt"); - i = 0; - while (fp && fgets(str, sizeof(str), fp)) - { - if (!strlen(str)) - continue; - - str[strlen(str) - 1] = 0; - send_to_user(cu, str, 0, MSG_MESSAGE); - if (++i >= MAX_QUERYLINES) - break; + if(fp) { + i = 0; + while (fgets(str, sizeof(str), fp)) { + int len=strlen(str); + if (len==0) + continue; + + str[len - 1] = 0; + send_to_user(cu, str, 0, MSG_MESSAGE); + if (++i >= MAX_QUERYLINES) + break; + } + fclose(fp); } - fclose(fp); } else { @@ -819,7 +773,7 @@ chat_topic(ChatUser *cu, char *msg) room = cu->room; assert(room); - topic = room->topic; /* Thor: room ���i�� NULL��?? */ + topic = room->topic; strlcpy(topic, msg, sizeof(room->topic)); if (cu->clitype) @@ -888,7 +842,7 @@ chat_nick(ChatUser *cu, char *msg) static void chat_list_rooms(ChatUser *cuser, char *msg) { - ChatRoom *cr, *room; + ChatRoom *cr; if (RESTRICTED(cuser)) { @@ -901,14 +855,8 @@ chat_list_rooms(ChatUser *cuser, char *msg) else send_to_user(cuser, "[7m �ͤѫǦW�� �x�H�Ƣx���D [m", 0, MSG_MESSAGE); - room = cuser->room; - cr = &mainroom; - do - { - MYDOG; - - - if (!SECRET(cr) || CHATSYSOP(cuser) || (cr == room && ROOMOP(cuser))) + for(cr = &mainroom; cr; cr = cr->next) { + if (!SECRET(cr) || CHATSYSOP(cuser) || (cr == cuser->room && ROOMOP(cuser))) { if (common_client_command) { @@ -928,7 +876,7 @@ chat_list_rooms(ChatUser *cuser, char *msg) } } - } while((cr = cr->next)); + } if (common_client_command) send_to_user(cuser, "", 0, MSG_ROOMLISTEND); @@ -958,8 +906,6 @@ chat_do_user_list(ChatUser *cu, char *msg, ChatRoom *theroom) for (user = mainuser; user; user = user->unext) { - MYDOG; - room = user->room; if ((theroom != ROOM_ALL) && (theroom != room)) @@ -1057,7 +1003,6 @@ chat_map_chatids(ChatUser *cu, ChatRoom *whichroom) /* Thor: �٨S���@���P���� */ ChatRoom *myroom, *room; ChatUser *user; - /* myroom = cu->room; */ myroom = whichroom; send_to_user(cu, "[7m ��ѥN�� �ϥΪ̥N�� �x ��ѥN�� �ϥΪ̥N�� �x ��ѥN�� �ϥΪ̥N�� [m", 0, MSG_MESSAGE); @@ -1066,32 +1011,25 @@ chat_map_chatids(ChatUser *cu, ChatRoom *whichroom) /* Thor: �٨S���@���P���� */ for (user = mainuser; user; user = user->unext) { - MYDOG; - room = user->room; - MYDOG; if (whichroom != ROOM_ALL && whichroom != room) continue; - MYDOG; if (myroom != room) { if (RESTRICTED(cu) || /* Thor: �n��check room �O���O�Ū� */ (room && SECRET(room) && !CHATSYSOP(cu))) continue; } - MYDOG; if (CLOAK(user)) /* Thor:�����N */ continue; sprintf(chatbuf + (c * 24), " %-8s%c%-12s%s", user->chatid, ROOMOP(user) ? '*' : ' ', user->userid, (c < 2 ? "�x" : " ")); - MYDOG; if (++c == 3) { send_to_user(cu, chatbuf, 0, MSG_MESSAGE); c = 0; } - MYDOG; } if (c > 0) send_to_user(cu, chatbuf, 0, MSG_MESSAGE); @@ -1381,10 +1319,7 @@ enter_room(ChatUser *cuser, char *rname, char *msg) logit(cuser->userid, "create new room"); #endif - MYDOG; - room = (ChatRoom *) malloc(sizeof(ChatRoom)); - MYDOG; if (room == NULL) { send_to_user(cuser, "�� �L�k�A�s�P�]�[�F", 0, MSG_MESSAGE); @@ -1392,7 +1327,7 @@ enter_room(ChatUser *cuser, char *rname, char *msg) } memset(room, 0, sizeof(ChatRoom)); - memcpy(room->name, rname, IDLEN - 1); + strlcpy(room->name, rname, IDLEN); strcpy(room->topic, "�o�O�@�ӷs�Ѧa"); snprintf(chatbuf, sizeof(chatbuf), "+ %s 1 0 %s", room->name, room->topic); @@ -1438,17 +1373,10 @@ logout_user(ChatUser *cuser) int sock; ChatUser *xuser, *prev; -#ifdef DEBUG - logit("before", "logout"); - debug_user(); -#endif - sock = cuser->sock; shutdown(sock, 2); close(sock); - MYDOG; - FD_CLR(sock, &mainfds); #if 0 /* Thor: �]�\���t�o�@�� */ @@ -1458,10 +1386,6 @@ logout_user(ChatUser *cuser) list_free(cuser->ignore); -#ifdef DEBUG - debug_user(); -#endif - xuser = mainuser; if (xuser == cuser) { @@ -1481,8 +1405,6 @@ logout_user(ChatUser *cuser) } while (xuser); } - MYDOG; - #ifdef DEBUG sprintf(chatbuf, "%p", cuser); logit("free cuser", chatbuf); @@ -1490,24 +1412,6 @@ logout_user(ChatUser *cuser) free(cuser); -#ifdef DEBUG - logit("after", "logout"); - debug_user(); -#endif - -#if 0 - next = cuser->next; - prev = cuser->prev; - prev->next = next; - if (next) - next->prev = prev; - - if (cuser) - free(cuser); - MYDOG; - -#endif - totaluser--; } @@ -1520,11 +1424,7 @@ print_user_counts(ChatUser *cuser) userc = suserc = roomc = 0; - room = &mainroom; - do - { - MYDOG; - + for(room = &mainroom; room; room = room->next) { num = room->occupants; if (SECRET(room)) { @@ -1537,7 +1437,7 @@ print_user_counts(ChatUser *cuser) userc += num; roomc++; } - } while((room = room->next)); + } number = (cuser->clitype) ? MSG_MOTD : MSG_MESSAGE; @@ -1557,7 +1457,7 @@ login_user(ChatUser *cu, char *msg) { int utent; - char *level; + char *passwd; char *userid; char *chatid; struct sockaddr_in from; @@ -1566,7 +1466,7 @@ login_user(ChatUser *cu, char *msg) ACCT acct; - char buf[20]; + int level; /* * Thor.0819: SECURED_CHATROOM : /! userid chatid passwd , userno @@ -1586,13 +1486,13 @@ login_user(ChatUser *cu, char *msg) logit("ENTER", userid); #endif /* Thor.0730: parse space before passwd */ - level = msg; + passwd = msg; /* Thor.0813: ���L�@�Ů�Y�i, �]���ϥ��p�Gchatid���Ů�, �K�X�]���� */ /* �N��K�X��, �]���|����:p */ /* �i�O�p�G�K�X�Ĥ@�Ӧr�O�Ů�, �����Ӧh�Ů�|�i����... */ - if (*level == ' ') - level++; + if (*passwd == ' ') + passwd++; /* Thor.0729: load acct */ if (!*userid || (acct_load(&acct, userid) < 0)) @@ -1609,10 +1509,9 @@ login_user(ChatUser *cu, char *msg) return -1; } - else if(strncmp(level, acct.passwd, PASSLEN) && - !chkpasswd(acct.passwd, level)) + else if(strncmp(passwd, acct.passwd, PASSLEN) && + !chkpasswd(acct.passwd, passwd)) { - #ifdef DEBUG logit("fake", chatid); #endif @@ -1623,21 +1522,17 @@ login_user(ChatUser *cu, char *msg) send_to_user(cu, CHAT_LOGIN_INVALID, 0, 0); return -1; } - else - { - /* Thor.0729: if ok, read level. */ - sprintf(buf, "%d", acct.userlevel); - level = buf; - /* Thor.0819: read userno for client/server bbs */ - utent = searchuser(acct.userid); - } + + /* Thor.0729: if ok, read level. */ + level = acct.userlevel; + /* Thor.0819: read userno for client/server bbs */ + utent = searchuser(acct.userid); + assert(utent); /* Thor.0819: for client/server bbs */ /* for (xuser = mainuser; xuser; xuser = xuser->unext) { - MYDOG; - if (xuser->userno == utent) { @@ -1654,7 +1549,6 @@ login_user(ChatUser *cu, char *msg) */ if (!valid_chatid(chatid)) { - #ifdef DEBUG logit("enter", chatid); #endif @@ -1666,10 +1560,6 @@ login_user(ChatUser *cu, char *msg) return 0; } -#ifdef DEBUG - debug_user(); -#endif - if (cuser_by_chatid(chatid) != NULL) { /* chatid in use */ @@ -1686,28 +1576,22 @@ login_user(ChatUser *cu, char *msg) } cu->userno = utent; - cu->uflag = atoi(level) & ~(PERM_ROOMOP | PERM_CLOAK | PERM_HANDUP | PERM_SAY); + cu->uflag = level & ~(PERM_ROOMOP | PERM_CLOAK | PERM_HANDUP | PERM_SAY); /* Thor: �i�ӥ��M��ROOMOP(�PPERM_CHAT), CLOAK */ strcpy(cu->userid, userid); - memcpy(cu->chatid, chatid, 8); - cu->chatid[8] = '\0'; + strlcpy(cu->chatid, chatid, sizeof(cu->chatid)); /* Xshadow: ���o client ���ӷ� */ fromlen = sizeof(from); if (!getpeername(cu->sock, (struct sockaddr *) & from, &fromlen)) { if ((hp = gethostbyaddr((char *) &from.sin_addr, sizeof(struct in_addr), from.sin_family))) - { strcpy(cu->lasthost, hp->h_name); - } else strcpy(cu->lasthost, (char *) inet_ntoa(from.sin_addr)); - } else - { strcpy(cu->lasthost, "[�~�Ӫ�]"); - } if (cu->clitype) send_to_user(cu, "���Q", 0, MSG_LOGINOK); @@ -1760,12 +1644,7 @@ chat_ignore(ChatUser *cu, char *msg) if (xuser == NULL) { - sprintf(chatbuf, msg_no_such_id, ignoree); - -#if 0 - sprintf(chatbuf, "�� �ͤѫDz{�b�S�� [%s] �o���H��", ignoree); -#endif } else if (xuser == cu || CHATSYSOP(xuser) || (ROOMOP(xuser) && (xuser->room == cu->room))) @@ -1986,7 +1865,7 @@ chat_invite(ChatUser *cu, char *msg) return; } - room = cu->room; /* FIXME Thor: �O�_�n check room �O�_ NULL ? */ + room = cu->room; assert(room); list = &(room->invite); @@ -2136,11 +2015,6 @@ static ChatAction party_data[] = }; static int -chicken_action(ChatUser *cu, char *cmd, char *party) -{ - return 0; -} -static int party_action(ChatUser *cu, char *cmd, char *party) { ChatAction *cap; @@ -2148,52 +2022,47 @@ party_action(ChatUser *cu, char *cmd, char *party) for (cap = party_data; (verb = cap->verb); cap++) { - MYDOG; - - if (str_equal(cmd, verb)) + if (!str_equal(cmd, verb)) + continue; + if (*party == '\0') + party = "�j�a"; + else { - if (*party == '\0') + ChatUser *xuser; + + xuser = fuzzy_cuser_by_chatid(party); + if (xuser == NULL) + { /* Thor.0724: �� userid�]���q */ + xuser = cuser_by_userid(party); + } + + if (xuser == NULL) + { + sprintf(chatbuf, msg_no_such_id, party); + send_to_user(cu, chatbuf, 0, MSG_MESSAGE); + return 0; + } + else if (xuser == FUZZY_USER) + { + sprintf(chatbuf, "�� �Ы�����ѥN��"); + send_to_user(cu, chatbuf, 0, MSG_MESSAGE); + return 0; + } + else if (cu->room != xuser->room || CLOAK(xuser)) { - party = "�j�a"; + sprintf(chatbuf, msg_not_here, party); + send_to_user(cu, chatbuf, 0, MSG_MESSAGE); + return 0; } else { - ChatUser *xuser; - - xuser = fuzzy_cuser_by_chatid(party); - if (xuser == NULL) - { /* Thor.0724: �� userid�]���q */ - xuser = cuser_by_userid(party); - } - - if (xuser == NULL) - { - sprintf(chatbuf, msg_no_such_id, party); - send_to_user(cu, chatbuf, 0, MSG_MESSAGE); - return 0; - } - else if (xuser == FUZZY_USER) - { - sprintf(chatbuf, "�� �Ы�����ѥN��"); - send_to_user(cu, chatbuf, 0, MSG_MESSAGE); - return 0; - } - else if (cu->room != xuser->room || CLOAK(xuser)) - { - sprintf(chatbuf, msg_not_here, party); - send_to_user(cu, chatbuf, 0, MSG_MESSAGE); - return 0; - } - else - { - party = xuser->chatid; - } + party = xuser->chatid; } - sprintf(chatbuf, "[1;32m%s [31m%s[33m %s [31m%s[m", - cu->chatid, cap->part1_msg, party, cap->part2_msg); - send_to_room(cu->room, chatbuf, cu->userno, MSG_MESSAGE); - return 0; /* Thor: cu->room �O�_�� NULL? */ } + sprintf(chatbuf, "[1;32m%s [31m%s[33m %s [31m%s[m", + cu->chatid, cap->part1_msg, party, cap->part2_msg); + send_to_room(cu->room, chatbuf, cu->userno, MSG_MESSAGE); + return 0; } return 1; } @@ -2206,93 +2075,36 @@ party_action(ChatUser *cu, char *cmd, char *party) static ChatAction speak_data[] = { - - { - "ask", "�߰�", "��", NULL - }, - { - "chant", "�q�|", "���n�q�|", NULL - }, - { - "cheer", "�ܪ�", "�ܪ�", NULL - }, - { - "chuckle", "����", "����", NULL - }, - { - "curse", "�t�F", "�t�F", NULL - }, + { "ask", "�߰�", "��", NULL }, + { "chant", "�q�|", "���n�q�|", NULL }, + { "cheer", "�ܪ�", "�ܪ�", NULL }, + { "chuckle", "����", "����", NULL }, + { "curse", "�t�F", "�t�F", NULL }, /* {"curse", "�G�|", NULL}, */ - { - "demand", "�n�D", "�n�D", NULL - }, - { - "frown", "�K���Y", "�٬�", NULL - }, - { - "groan", "�D�u", "�D�u", NULL - }, - { - "grumble", "�o�c��", "�o�c��", NULL - }, - { - "guitar", "�u��", "��u�ۦN�L�A��۵�", NULL - }, + { "demand", "�n�D", "�n�D", NULL }, + { "frown", "�K���Y", "�٬�", NULL }, + { "groan", "�D�u", "�D�u", NULL }, + { "grumble", "�o�c��", "�o�c��", NULL }, + { "guitar", "�u��", "��u�ۦN�L�A��۵�", NULL }, /* {"helpme", "�I��","�j�n�I��",NULL}, */ - { - "hum", "���", "���ۻy", NULL - }, - { - "moan", "���", "���", NULL - }, - { - "notice", "�j��", "�j��", NULL - }, - { - "order", "�R�O", "�R�O", NULL - }, - { - "ponder", "�H��", "�H��", NULL - }, - { - "pout", "���L", "���ۼL��", NULL - }, - { - "pray", "��ë", "��ë", NULL - }, - { - "request", "���D", "���D", NULL - }, - { - "shout", "�j�|", "�j�|", NULL - }, - { - "sing", "�ۺq", "�ۺq", NULL - }, - { - "smile", "�L��", "�L��", NULL - }, - { - "smirk", "����", "����", NULL - }, - { - "swear", "�o�}", "�o�}", NULL - }, - { - "tease", "�J��", "�J��", NULL - }, - { - "whimper", "��|", "��|����", NULL - }, - { - "yawn", "����", "�䥴�����仡", NULL - }, - { - "yell", "�j��", "�j��", NULL - }, - { - NULL, NULL, NULL, NULL - } + { "hum", "���", "���ۻy", NULL }, + { "moan", "���", "���", NULL }, + { "notice", "�j��", "�j��", NULL }, + { "order", "�R�O", "�R�O", NULL }, + { "ponder", "�H��", "�H��", NULL }, + { "pout", "���L", "���ۼL��", NULL }, + { "pray", "��ë", "��ë", NULL }, + { "request", "���D", "���D", NULL }, + { "shout", "�j�|", "�j�|", NULL }, + { "sing", "�ۺq", "�ۺq", NULL }, + { "smile", "�L��", "�L��", NULL }, + { "smirk", "����", "����", NULL }, + { "swear", "�o�}", "�o�}", NULL }, + { "tease", "�J��", "�J��", NULL }, + { "whimper", "��|", "��|����", NULL }, + { "yawn", "����", "�䥴�����仡", NULL }, + { "yell", "�j��", "�j��", NULL }, + { NULL, NULL, NULL, NULL } }; @@ -2304,15 +2116,12 @@ speak_action(ChatUser *cu, char *cmd, char *msg) for (cap = speak_data; (verb = cap->verb); cap++) { - MYDOG; - - if (str_equal(cmd, verb)) - { - sprintf(chatbuf, "[1;32m%s [31m%s�G[33m %s[m", - cu->chatid, cap->part1_msg, msg); - send_to_room(cu->room, chatbuf, cu->userno, MSG_MESSAGE); - return 0; /* Thor: cu->room �O�_�� NULL? */ - } + if (!str_equal(cmd, verb)) + continue; + sprintf(chatbuf, "[1;32m%s [31m%s�G[33m %s[m", + cu->chatid, cap->part1_msg, msg); + send_to_room(cu->room, chatbuf, cu->userno, MSG_MESSAGE); + return 0; } return 1; } @@ -2325,170 +2134,69 @@ speak_action(ChatUser *cu, char *cmd, char *msg) static ChatAction condition_data[] = { - { - "applaud", "���", "��....", NULL - }, - { - "ayo", "�����", "�����~~~", NULL - }, - { - "back", "���^��", "�^�ӧ����~��ľ�", NULL - }, - { - "blood", "�b�夤", "�˦b��y����", NULL - }, - { - "blush", "�y��", "�y�����F", NULL - }, - { - "broke", "�߸H", "���߯}�H���@���@����", NULL - }, /* Thor.0731:���[���n�D */ + { "applaud", "���", "��....", NULL }, + { "ayo", "�����", "�����~~~", NULL }, + { "back", "���^��", "�^�ӧ����~��ľ�", NULL }, + { "blood", "�b�夤", "�˦b��y����", NULL }, + { "blush", "�y��", "�y�����F", NULL }, + { "broke", "�߸H", "���߯}�H���@���@����", NULL }, /* {"bokan", "Bo Kan! Bo Kan!", NULL}, */ - { - "careles", "�S�H�z", "���㳣�S���H�z�� :~~~~", NULL - }, - { - "chew", "�ߥʤl", "�ܱy�����߰_�ʤl�ӤF", NULL - }, - { - "climb", "���s", "�ۤv�C�C���W�s�ӡK�K", NULL - }, - { - "cold", "�P�_�F", "�P�_�F,���������ڥX�h�� :~~~(", NULL - }, - { - "cough", "�y��", "�y�F�X�n", NULL - }, - { - "die", "����", "��������", NULL - }, - { - "faint", "����", "��������", NULL - }, - { - "flop", "������", "��쭻����... �ƭˡI", NULL - }, - { - "fly", "���ƵM", "���ƵM", NULL - }, - { - "frown", "�٬�", "�٬�", NULL - }, - { - "gold", "�����P", "�۵ۡG�y���|�������|���� �X�����! �o�a�x�A�����P�A���a�˾H�ӡI�z", NULL - }, - { - "gulu", "�{�l�j", "���{�l�o�X�B�P~~~�B�P~~~���n��", NULL - }, - { - "haha", "�z����", "�z������.....^o^", NULL - }, + { "careles", "�S�H�z", "���㳣�S���H�z�� :~~~~", NULL }, + { "chew", "�ߥʤl", "�ܱy�����߰_�ʤl�ӤF", NULL }, + { "climb", "���s", "�ۤv�C�C���W�s�ӡK�K", NULL }, + { "cold", "�P�_�F", "�P�_�F,���������ڥX�h�� :~~~(", NULL }, + { "cough", "�y��", "�y�F�X�n", NULL }, + { "die", "����", "��������", NULL }, + { "faint", "����", "��������", NULL }, + { "flop", "������", "��쭻����... �ƭˡI", NULL }, + { "fly", "���ƵM", "���ƵM", NULL }, + { "frown", "�٬�", "�٬�", NULL }, + { "gold", "�����P", "�۵ۡG�y���|�������|���� �X�����! �o�a�x�A�����P�A���a�˾H�ӡI�z", NULL }, + { "gulu", "�{�l�j", "���{�l�o�X�B�P~~~�B�P~~~���n��", NULL }, + { "haha", "�z����", "�z������.....^o^", NULL }, /* {"haha", "�j��","�z����������������~~~~!!!!!", NULL}, */ - { - "helpme", "�D��", "�j��~~~�ϩR��~~~~", NULL - }, - { - "hoho", "������", "���������Ӥ���", NULL - }, - { - "happy", "����", "�����o�b�a�W���u", NULL - }, + { "helpme", "�D��", "�j��~~~�ϩR��~~~~", NULL }, + { "hoho", "������", "���������Ӥ���", NULL }, + { "happy", "����", "�����o�b�a�W���u", NULL }, /* {"happy", "����", "��ϡI *^_^*", NULL}, */ /* {"happy", "", "r-o-O-m....ť�F�u�n�I", NULL}, */ /* {"hurricane", "�֢�---��B��--�٢���I�I�I", NULL}, */ - { - "idle", "�b���F", "�b���F", NULL - }, - { - "jacky", "�̮�", "�l�l�몺�̨Ӯ̥h", NULL - }, + { "idle", "�b���F", "�b���F", NULL }, + { "jacky", "�̮�", "�l�l�몺�̨Ӯ̥h", NULL }, #if 0 /* Thor.0729: ������N */ - { - "lag", "�����C", "lllllllaaaaaaaaaaaagggggggggggggg.................", NULL - }, + { "lag", "�����C", "lllllllaaaaaaaaaaaagggggggggggggg.................", NULL }, #endif - { - "luck", "���B", "�z�I�֮�աI", NULL - }, - { - "macarn", "�@�ػR", "�}�l���_�F��a��a��e��a�����", NULL - }, - { - "miou", "�p�p", "�p�p�f�]�f�]������", NULL - }, - { - "mouth", "��L", "��L��!!", NULL - }, - { - "nani", "���|", "�G�`���ڮ�??", NULL - }, - { - "nose", "�y���", "�y���", NULL - }, - { - "puke", "�æR", "�æR��", NULL - }, + { "luck", "���B", "�z�I�֮�աI", NULL }, + { "macarn", "�@�ػR", "�}�l���_�F��a��a��e��a�����", NULL }, + { "miou", "�p�p", "�p�p�f�]�f�]������", NULL }, + { "mouth", "��L", "��L��!!", NULL }, + { "nani", "���|", "�G�`���ڮ�??", NULL }, + { "nose", "�y���", "�y���", NULL }, + { "puke", "�æR", "�æR��", NULL }, /* {"puke", "�u���ߡA��ť�F���Q�R", NULL}, */ - { - "rest", "��", "�𮧤��A�Фť��Z", NULL - }, - { - "reverse", "½�{", "½�{", NULL - }, - { - "room", "�}�ж�", "r-o-O-m-r-O-��-Mmm-rR��........", NULL - }, - { - "shake", "�n�Y", "�n�F�n�Y", NULL - }, - { - "sleep", "�ε�", "�w�b��L�W�εۤF�A�f���y�i��L�A�y�������I", NULL - }, + { "rest", "��", "�𮧤��A�Фť��Z", NULL }, + { "reverse", "½�{", "½�{", NULL }, + { "room", "�}�ж�", "r-o-O-m-r-O-��-Mmm-rR��........", NULL }, + { "shake", "�n�Y", "�n�F�n�Y", NULL }, + { "sleep", "�ε�", "�w�b��L�W�εۤF�A�f���y�i��L�A�y�������I", NULL }, /* {"sleep", "Zzzzzzzzzz�A�u�L��A���ֺεۤF", NULL}, */ - { - "so", "�N��l", "�N��l!!", NULL - }, - { - "sorry", "�D�p", "���!!�ڹ藍�_�j�a,�ڹ藍�_��a���|~~~~~~���~~~~~", NULL - }, - { - "story", "���j", "�}�l���j�F", NULL - }, - { - "strut", "�n�\\��", "�j�n�j�\\�a��", NULL - }, - { - "suicide", "�۱�", "�۱�", NULL - }, - { - "tea", "�w��", "�w�F���n��", NULL - }, - { - "think", "���", "�n���Y�Q�F�@�U", NULL - }, - { - "tongue", "�R��", "�R�F�R���Y", NULL - }, - { - "wall", "����", "�]�h����", NULL - }, - { - "wawa", "�z�z", "�z�z�z~~~~~!!!!! ~~~>_<~~~", NULL - }, + { "so", "�N��l", "�N��l!!", NULL }, + { "sorry", "�D�p", "���!!�ڹ藍�_�j�a,�ڹ藍�_��a���|~~~~~~���~~~~~", NULL }, + { "story", "���j", "�}�l���j�F", NULL }, + { "strut", "�n�\\��", "�j�n�j�\\�a��", NULL }, + { "suicide", "�۱�", "�۱�", NULL }, + { "tea", "�w��", "�w�F���n��", NULL }, + { "think", "���", "�n���Y�Q�F�@�U", NULL }, + { "tongue", "�R��", "�R�F�R���Y", NULL }, + { "wall", "����", "�]�h����", NULL }, + { "wawa", "�z�z", "�z�z�z~~~~~!!!!! ~~~>_<~~~", NULL }, /* {"wawa","�z�z�z......>_<",NULL}, */ - { - "www", "�L�L", "�L�L�L!!!", NULL - }, - { - "zzz", "���I", "�I�P~~~~ZZzZz�C��ZZzzZzzzZZ...", NULL - }, - - { - NULL, NULL, NULL, NULL - } + { "www", "�L�L", "�L�L�L!!!", NULL }, + { "zzz", "���I", "�I�P~~~~ZZzZz�C��ZZzzZzzzZZ...", NULL }, + { NULL, NULL, NULL, NULL } }; @@ -2500,14 +2208,12 @@ condition_action(ChatUser *cu, char *cmd) for (cap = condition_data; (verb = cap->verb); cap++) { - MYDOG; - if (str_equal(cmd, verb)) { sprintf(chatbuf, "[1;32m%s [31m%s[m", cu->chatid, cap->part1_msg); send_to_room(cu->room, chatbuf, cu->userno, MSG_MESSAGE); - return 1; /* Thor: cu->room �O�_�� NULL? */ + return 1; } } return 0; @@ -2591,7 +2297,6 @@ view_action_verb(ChatUser *cu, char cmd) /* Thor.0726: �s�[�ʵ�������� */ for (i = 0; (p = dscrb[i]); i++) { sprintf(data, " [//]help %d - MUD-like ����ʵ� �� %d ��", i + 1, i + 1); - MYDOG; send_to_user(cu, data, 0, MSG_MESSAGE); send_to_user(cu, p, 0, MSG_MESSAGE); send_to_user(cu, " ", 0, MSG_MESSAGE); /* Thor.0726: ����, �ݭn " " @@ -2600,26 +2305,23 @@ view_action_verb(ChatUser *cu, char cmd) /* Thor.0726: �s�[�ʵ�������� */ } else { - i = cmd - '1'; - - send_to_user(cu, dscrb[i], 0, MSG_MESSAGE); + send_to_user(cu, dscrb[cmd-'1'], 0, MSG_MESSAGE); expn = chatbuf + 100; /* Thor.0726: ���Ӥ��|overlap�a? */ *data = '\0'; *expn = '\0'; - cap = catbl[i]; + cap = catbl[cmd-'1']; for (i = 0; (p = cap[i].verb); i++) { - MYDOG; q = cap[i].chinese; strcat(data, p); strcat(expn, q); - if (((i + 1) % VERB_NO) == 0) + if (((i + 1) % VERB_NO) == 0 || cap[i+1].verb==NULL) { send_to_user(cu, data, 0, MSG_MESSAGE); send_to_user(cu, expn, 0, MSG_MESSAGE); /* Thor.0726: ��ܤ������ */ @@ -2632,20 +2334,10 @@ view_action_verb(ChatUser *cu, char cmd) /* Thor.0726: �s�[�ʵ�������� */ strncat(expn, " ", MAX_VERB_LEN - strlen(q)); } } - if (i % VERB_NO) - { - send_to_user(cu, data, 0, MSG_MESSAGE); - send_to_user(cu, expn, 0, MSG_MESSAGE); /* Thor.0726: ��ܤ������ */ - } } /* send_to_user(cu, " ",0); *//* Thor.0726: ����, �ݭn " " ��? */ } -void view_chicken_help(ChatUser *cu) /* Ptt: �����{�� ��help */ -{ - -} - /* ----------------------------------------------------- */ /* chat user service routines */ /* ----------------------------------------------------- */ @@ -2695,41 +2387,38 @@ command_execute(ChatUser *cu) { char *cmd, *msg; ChatCmd *cmdrec; - int match, ch; + int match; msg = cu->ibuf; - match = *msg; /* Validation routine */ if (cu->room == NULL) { /* MUST give special /! or /-! command if not in the room yet */ - - if (match == '/' && ((ch = msg[1]) == '!' || (ch == '-' && msg[2] == '!'))) - { - cu->clitype = (ch == '-') ? 1 : 0; - return (login_user(cu, msg + 2 + cu->clitype)); + if(strncmp(msg, "/!", 2)==0) { + cu->clitype = 0; + return login_user(cu, msg+2); } - else - return -1; + if(strncmp(msg, "/-!", 3)==0) { + cu->clitype = 1; + return login_user(cu, msg+3); + } + return -1; } - /* If not a /-command, it goes to the room. */ + if(msg[0] == '\0') + return 0; - if (match != '/') + /* If not a "/"-command, it goes to the room. */ + if (msg[0] != '/') { - if (match) - { - char buf[16]; + char buf[16]; - sprintf(buf, "%s:", cu->chatid); - sprintf(chatbuf, "%-10s%s", buf, msg); - if (!CLOAK(cu)) /* Thor: ��ѫ������N */ - send_to_room(cu->room, chatbuf, cu->userno, MSG_MESSAGE); - /* Thor: �n check cu->room NULL��? */ - - } + sprintf(buf, "%s:", cu->chatid); + sprintf(chatbuf, "%-10s%s", buf, msg); + if (!CLOAK(cu)) /* Thor: ��ѫ������N */ + send_to_room(cu->room, chatbuf, cu->userno, MSG_MESSAGE); return 0; } @@ -2754,16 +2443,6 @@ command_execute(ChatUser *cu) else match = condition_action(cu, cmd); } - else if(*cmd == '.') - { - cmd++; - if (!*cmd || str_equal(cmd, "help")) - { - view_chicken_help(cu); - match = 1; - } - else match = chicken_action(cu, cmd, msg); - } else { char *str; @@ -2777,8 +2456,6 @@ command_execute(ChatUser *cu) } for(cmdrec = chatcmdlist; (str = cmdrec->cmdstr); cmdrec++) { - MYDOG; - switch (cmdrec->exact) { case 1: /* exactly equal */ @@ -2820,7 +2497,7 @@ cuser_serve(ChatUser *cu) { register int ch, len, isize; register char *str, *cmd; - static char buf[80]; + char buf[80]; str = buf; len = recv(cu->sock, str, sizeof(buf) - 1, 0); @@ -2848,32 +2525,24 @@ cuser_serve(ChatUser *cu) #endif isize = cu->isize; - cmd = cu->ibuf + isize; - while (len--) - { - MYDOG; - + cmd = cu->ibuf; + while (len--) { ch = *str++; - if (ch == '\r' || !ch) + if (ch == '\r' || ch == '\0') continue; if (ch == '\n') { - *cmd = '\0'; - + cmd[isize]='\0'; isize = 0; - cmd = cu->ibuf; if (command_execute(cu) < 0) return -1; continue; } - if (isize < 79) - { - *cmd++ = ch; - isize++; - } + if (isize < sizeof(cu->ibuf)-1) + cmd[isize++] = ch; } cu->isize = isize; return 0; @@ -3018,18 +2687,17 @@ free_resource(int fd) register ChatUser *user; register int sock, num; + /* ���s�p�� maxfd */ num = 0; for (user = mainuser; user; user = user->unext) { - MYDOG; - num++; sock = user->sock; if (fd < sock) fd = sock; } - sprintf(chatbuf, "%d, %d user (%d -> %d)", ++loop, num, maxfds, fd); + sprintf(chatbuf, "%d, %d user (maxfds %d -> %d)", ++loop, num, maxfds, fd+1); logit("LOOP", chatbuf); maxfds = fd + 1; @@ -3061,7 +2729,7 @@ server_usage() "signals received: %ld\n" "voluntary context switches: %ld\n" "involuntary context switches: %ld\n" - "gline: %d\n\n", + "\n", (double) ru.ru_utime.tv_sec + (double) ru.ru_utime.tv_usec / 1000000.0, (double) ru.ru_stime.tv_sec + (double) ru.ru_stime.tv_usec / 1000000.0, @@ -3076,8 +2744,7 @@ server_usage() ru.ru_msgrcv, ru.ru_nsignals, ru.ru_nvcsw, - ru.ru_nivcsw, - gline); + ru.ru_nivcsw); write(flog, buf, strlen(buf)); } @@ -3099,7 +2766,6 @@ reaper() while (waitpid(-1, &state, WNOHANG | WUNTRACED) > 0) { - MYDOG; } } @@ -3121,8 +2787,8 @@ main() log_init(); - Signal(SIGBUS, SIG_IGN); - Signal(SIGSEGV, SIG_IGN); +// Signal(SIGBUS, SIG_IGN); +// Signal(SIGSEGV, SIG_IGN); Signal(SIGPIPE, SIG_IGN); Signal(SIGURG, SIG_IGN); @@ -3146,12 +2812,6 @@ main() /* main loop */ /* ----------------------------------- */ -#if 0 - /* Thor: �blisten ��~�^client, �C���i�ӴN�|���\ */ - if (fork()) - exit(0); -#endif - FD_ZERO(&mainfds); FD_SET(msock, &mainfds); rptr = &rset; @@ -3173,8 +2833,6 @@ main() free_resource(msock); } - MYDOG; - memcpy(rptr, &mainfds, sizeof(fd_set)); memcpy(xptr, &mainfds, sizeof(fd_set)); @@ -3183,110 +2841,57 @@ main() tv.tv_sec = CHAT_INTERVAL; tv.tv_usec = 0; - MYDOG; - nfds = select(maxfds, rptr, NULL, xptr, &tv); - MYDOG; /* free idle user & chatroom's resource when no traffic */ - if (nfds == 0) - { continue; - } /* check error condition */ - if (nfds < 0) - { - csock = errno; continue; - } /* accept new connection */ + if (FD_ISSET(msock, rptr)) { + csock = accept(msock, NULL, NULL); - if (FD_ISSET(msock, rptr)) - { - for (;;) - { - MYDOG; /* Thor: check for endless */ - csock = accept(msock, NULL, NULL); - - if (csock >= 0) - { - MYDOG; - if((cu = (ChatUser *) malloc(sizeof(ChatUser)))) - { - memset(cu, 0, sizeof(ChatUser)); - cu->sock = csock; - - cu->unext = mainuser; - mainuser = cu; - -#if 0 - if (mainuser.next) - mainuser.next->prev = cu; - cu->next = mainuser.next; - mainuser.next = cu; - cu->prev = &mainuser; -#endif - - totaluser++; - FD_SET(csock, &mainfds); - if (csock >= maxfds) - maxfds = csock + 1; + if(csock < 0) { + if(errno != EINTR) { + // TODO + } + } else { + cu = (ChatUser *) malloc(sizeof(ChatUser)); + if(cu == NULL) { + close(csock); + logit("accept", "malloc fail"); + } else { + memset(cu, 0, sizeof(ChatUser)); + cu->sock = csock; + cu->unext = mainuser; + mainuser = cu; + + totaluser++; + FD_SET(csock, &mainfds); + if (csock >= maxfds) + maxfds = csock + 1; #ifdef DEBUG - logit("accept", "OK"); + logit("accept", "OK"); #endif - } - else - { - close(csock); - logit("accept", "malloc fail"); - } - MYDOG; - - break; - } - - csock = errno; - if (csock != EINTR) - { - break; } } - - FD_CLR(msock, rptr); - - if (--nfds <= 0) - continue; } - for (cu = mainuser; cu; cu = cu->unext) - { - MYDOG; - + for (cu = mainuser; cu && nfds>0; cu = cu->unext) { csock = cu->sock; - - if (FD_ISSET(csock, xptr)) - { + if (FD_ISSET(csock, xptr)) { logout_user(cu); - FD_CLR(csock, xptr); - } - else if (FD_ISSET(csock, rptr)) - { + nfds--; + } else if (FD_ISSET(csock, rptr)) { if (cuser_serve(cu) < 0) logout_user(cu); + nfds--; } - else - { - continue; - } - - FD_CLR(csock, rptr); - if (--nfds <= 0) - break; } /* end of main loop */ |