diff options
| author | Paul Buetow <paul@buetow.org> | 2013-04-06 13:14:41 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2013-04-06 13:14:41 +0200 |
| commit | 9cd3ccffd5372dfde3af478e3f832f18db4be3f1 (patch) | |
| tree | 631c295a4a4a16b57502b847626763a279bf6df7 /ychat-0.8.0/src/mods | |
| parent | 13aaf70af703748fe096e0664c305cd202637ad2 (diff) | |
tagging tags
Diffstat (limited to 'ychat-0.8.0/src/mods')
39 files changed, 1905 insertions, 0 deletions
diff --git a/ychat-0.8.0/src/mods/Makefile b/ychat-0.8.0/src/mods/Makefile new file mode 100755 index 0000000..1b0712b --- /dev/null +++ b/ychat-0.8.0/src/mods/Makefile @@ -0,0 +1,9 @@ +MAKE=`tail -n 1 ../../make.version` +all: mods +mods: + @${MAKE} -C ./commands #//<< + @${MAKE} -C ./html +clean: + @${MAKE} -C ./commands clean #//<< + @${MAKE} -C ./html clean + @if test -d ../../mods; then rm -Rf ../../mods; fi diff --git a/ychat-0.8.0/src/mods/commands/Makefile.in b/ychat-0.8.0/src/mods/commands/Makefile.in new file mode 100755 index 0000000..42884b6 --- /dev/null +++ b/ychat-0.8.0/src/mods/commands/Makefile.in @@ -0,0 +1,18 @@ +MODS=$(addprefix ../../../mods/commands/, $(SRCS:.cpp=.so)) +CC=COMPILER +INCLUDES=`cat ../../includes.add` +CFLAGS=`cat ../cflags.add` +all: mods +$(MODS): + @if ! test -d `dirname $@`; then mkdir -p `dirname $@`; fi + @$(CC) $(CFLAGS) $(INCLUDES) -shared -s -o $@ `echo $(notdir $@) | sed s/.so/.cpp/` + @echo -n "Command module `basename $@ | sed s/\.so// | sed s/yc_//` " + @du -hc $@ | tail -n 1 | sed s/total// | sed "s/ //g" +infotext: + @echo Compiling command modules +mods: infotext $(MODS) + @echo "Num of command modules: " + @ls ../../../mods/commands/*.so | wc -l +clean: + @echo Cleaning command modules + @if test -d ../../../mods/commands; then rm -Rf ../../../mods/commands; fi diff --git a/ychat-0.8.0/src/mods/commands/yc_about.cpp b/ychat-0.8.0/src/mods/commands/yc_about.cpp new file mode 100644 index 0000000..dece71d --- /dev/null +++ b/ychat-0.8.0/src/mods/commands/yc_about.cpp @@ -0,0 +1,59 @@ +#include "../../incl.h" + +/* + gcc -shared -o yc_name.so yc_name.cpp +*/ + +using namespace std; + +extern "C" +{ + int extern_function(void *v_arg) + { + + container *c=(container *)v_arg; + + user *p_user = (user*) c->elem[1]; // the corresponding user + vector<string> *params = (vector<string>*) c->elem[2]; // param array + chat* p_chat = (chat*) ((dynamic_wrap*)c->elem[3])->CHAT; + conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF; + + if ( ! params->empty() ) + { + vector<string>::iterator iter = params->begin(); + string s_searched_user( *iter ); + bool b_found; + user* p_searched_user = p_chat->get_user( s_searched_user, b_found ); + + if ( b_found ) + { + string s_msg = "<b>" + p_searched_user->get_colored_name() + "</b>" + + p_conf->get_elem("chat.msgs.userhasstatus") + "<b>" + + tool::int2string(p_searched_user->get_status()) + + "</b>, " + + p_conf->get_elem("chat.msgs.userinroom") + "<b>" + + p_searched_user->get_room()->get_name() + + "</b><br>\n" + + p_conf->get_elem("chat.msgs.lastactivity") + "<b>" + + tool::int2string((int)( p_searched_user->get_last_activity())) + + "</b><br>\n"; + p_user->msg_post( &s_msg ); + } + else + { + string s_msg = "<font color=\"#" + + p_conf->get_elem("chat.html.errorcolor") + + "\"><b>" + + s_searched_user + "</b> " + + p_conf->get_elem("chat.msgs.err.notavailable") + + "</font><br>\n"; + p_user->msg_post( &s_msg ); + + } + } + + return 0; + } + +} + diff --git a/ychat-0.8.0/src/mods/commands/yc_all.cpp b/ychat-0.8.0/src/mods/commands/yc_all.cpp new file mode 100755 index 0000000..3b5713f --- /dev/null +++ b/ychat-0.8.0/src/mods/commands/yc_all.cpp @@ -0,0 +1,49 @@ +#include <iostream> +#include "../../chat/chat.h" +/* + gcc -shared -o yc_name.so yc_name.cpp +*/ + +using namespace std; + +extern "C" +{ + int valid_color( string ); + + int extern_function(void *v_arg) + { + container *c=(container *)v_arg; + + user *p_user = (user*) c->elem[1]; // the corresponding user + vector<string> *params= (vector<string>*) c->elem[2]; // param array + timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR; + conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF; + chat* p_chat = (chat*) ((dynamic_wrap*)c->elem[3])->CHAT; + + string s_tmp = ""; + string s_msg = ""; + + + if ( ! params->empty() ) + { + vector<string>::iterator iter = params->begin(); + for ( iter = params->begin(); iter != params->end(); iter++ ) + s_tmp.append( *iter + " " ); + + s_msg = p_timr->get_time() + " <b><font color=\"#" + + p_conf->get_elem("chat.html.sysmsgcolor") + + "\"> " + + p_conf->get_elem("chat.msgs.system"); + + p_chat->string_replacer(&s_tmp); + s_msg.append( s_tmp + "</font></b><br>\n" ); + p_chat->msg_post( &s_msg ); + return 0; + } + + s_msg = p_conf->colored_error_msg("chat.msgs.err.wrongcommandusage"); + p_user->msg_post(s_msg); + return 0; + } +} + diff --git a/ychat-0.8.0/src/mods/commands/yc_away.cpp b/ychat-0.8.0/src/mods/commands/yc_away.cpp new file mode 100755 index 0000000..81a2089 --- /dev/null +++ b/ychat-0.8.0/src/mods/commands/yc_away.cpp @@ -0,0 +1,72 @@ +#include "../../incl.h" +#include "../../chat/room.h" +#include "../../chat/user.h" + +using namespace std; + +extern "C" +{ + int extern_function(void *v_arg) + { + container *c=(container *)v_arg; + + user* p_user = (user*) c->elem[1]; // the corresponding user + conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF; + timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR; + vector<string> *params = (vector<string>*) c->elem[2]; // param array + + string s_msg; + string s_away; + string s_col; + + vector<string>::iterator iter; + + string s_time = p_timr->get_time(); + + s_away.append( s_time ).append( " " ); + + s_msg = s_time + + " " + + p_user->get_colored_bold_name() + + " " + + p_conf->get_elem("chat.msgs.setmodeaway") + + "<font color=" + p_user->get_col2() + ">"; + + if ( params->size() > 0 ) + { + s_msg.append(": "); + for ( iter = params->begin(); iter != params->end(); iter++ ) + { + s_msg.append( " " + *iter ); + s_away.append( *iter + " " ); + } + } + else + { + s_msg.append("."); + } + + s_msg.append( "</font><br>\n" ); + + room* p_room = p_user->get_room(); + + // Remove ' from away message: + auto unsigned int pos; + + do + { + pos = s_away.find_first_of( "'" ); + if ( pos == string::npos ) + break; + s_away.replace( pos, 1, "\"" ); + } + while (true); + + p_user->set_away( true, s_away ); + p_room->reload_onlineframe(); + p_room->msg_post ( &s_msg ); + + return 0; + } +} + diff --git a/ychat-0.8.0/src/mods/commands/yc_col.cpp b/ychat-0.8.0/src/mods/commands/yc_col.cpp new file mode 100755 index 0000000..3e1f591 --- /dev/null +++ b/ychat-0.8.0/src/mods/commands/yc_col.cpp @@ -0,0 +1,88 @@ +#include <iostream> +#include "../../wrap.h" +#include "../../chat/room.h" +#include "../../chat/user.h" +#include "../../tool/tool.h" + +/* + gcc -shared -o yc_name.so yc_name.cpp +*/ + +using namespace std; + +extern "C" +{ + int valid_color( string ); + + int extern_function(void *v_arg) + { + container *c=(container *)v_arg; + + + user *p_user = (user*)c->elem[1]; // the corresponding user + vector<string> *params= (vector<string>*) c->elem[2]; // param array + + string s_color; + string s_color2; + + conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF; + timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR; + if ( params->empty() ) + { + s_color = p_conf->get_elem( "chat.html.user.color1" ); + s_color2 = p_conf->get_elem( "chat.html.user.color2" ); + } + else + { + s_color = (string) params->front(); + params->erase( params->begin() ); + if ( ! params->empty() ) + s_color2 = (string) params->front(); + else + s_color2 = p_conf->get_elem( "chat.html.user.color1" ); + } + + s_color = tool::to_lower( s_color ); + s_color2 = tool::to_lower( s_color2 ); + + if( valid_color(s_color) != 1 ) + { + string *answerstring=new string(s_color + " is not a valid color.<br>\n"); + p_user->msg_post( answerstring ); + } + else if( valid_color(s_color2) != 1 ) + { + string *answerstring=new string( s_color2 + " is not a valid color.<br>\n"); + p_user->msg_post( answerstring ); + } + else + { + string *answerstring=new string(p_timr->get_time() + " " + p_user->get_colored_bold_name()+ " changes color to <font color=\"#" + + s_color + "\">" + s_color + "</font> <font color=\"#" + + s_color2 + "\">" + s_color2 + "</font><br>\n"); + p_user->get_room()->msg_post( answerstring ); + p_user->set_col1(s_color); + p_user->set_col2(s_color2); + p_user->get_room()->reload_onlineframe(); + } + + return 0; + } + int valid_color( string s_color ) + { + + if(s_color.size()!=6) + return 0; + string valid="abcdef0123456789"; + for(int i=0;i<s_color.size();i++) + { + string s_char=s_color.substr(i,1); + if(valid.find(s_char)==string::npos) + return 0; + } + + return 1; + } + +} + diff --git a/ychat-0.8.0/src/mods/commands/yc_compopt.cpp b/ychat-0.8.0/src/mods/commands/yc_compopt.cpp new file mode 100755 index 0000000..cd21f6f --- /dev/null +++ b/ychat-0.8.0/src/mods/commands/yc_compopt.cpp @@ -0,0 +1,23 @@ +#include <iostream> +#include "../../msgs.h" +#include "../../chat/user.h" +/* + gcc -shared -o yc_name.so yc_name.cpp +*/ + +using namespace std; + +extern "C" +{ + int valid_color( string ); + + int extern_function(void *v_arg) + { + container *c=(container *)v_arg; + user *p_user = (user*)c->elem[1]; // the corresponding user + p_user->msg_post( tool::ychat_version() + " " + UNAME + "<br>\n" + COMPOPT + "<br>\n"); + + return 0; + } +} + diff --git a/ychat-0.8.0/src/mods/commands/yc_exec.cpp b/ychat-0.8.0/src/mods/commands/yc_exec.cpp new file mode 100755 index 0000000..119942d --- /dev/null +++ b/ychat-0.8.0/src/mods/commands/yc_exec.cpp @@ -0,0 +1,66 @@ +#include "../../incl.h" +#include "../../chat/room.h" +#include "../../chat/user.h" +#include <unistd.h> +#include <sys/wait.h> +#include <stdio.h> +#include <sys/types.h> +#include <fcntl.h> + +using namespace std; + +extern "C" +{ + int extern_function(void *v_arg) + { + container *c=(container *)v_arg; + + user* p_user = (user*) c->elem[1]; // the corresponding user + timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR; + conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF; + vector<string> *params = (vector<string>*) c->elem[2]; // param array + + string s_command; + string s_msg = p_timr->get_time(); + string s_output; + + vector<string>::iterator iter; + for ( iter = params->begin(); iter != params->end(); iter++ ) + s_command.append( " " + *iter ); + + s_command.append(" 2>error.log"); + + s_msg.append( " " + s_command + "<br>\n" ); + + p_user->msg_post( &s_msg ); + + FILE *file; + char buffer[READBUF]; + + if( (file=popen(s_command.c_str(), "r")) == NULL ) + { + s_output = "<font color=\"#" + + p_conf->get_elem("chat.html.errorcolor") + + p_conf->get_elem("chat.msgs.err.execcommand") + + "</font><br>\n"; + p_user->msg_post( &s_output ); + } + else + { + s_output.append("<hr>\n"); + while(true) + { + if(fgets(buffer, READBUF, file) == NULL) + break; + + s_output.append( string(buffer) + "<br>\n" ); + } + + p_user->msg_post( &s_output ); + pclose(file); + } + + return 0; + } +} + diff --git a/ychat-0.8.0/src/mods/commands/yc_fake.cpp b/ychat-0.8.0/src/mods/commands/yc_fake.cpp new file mode 100755 index 0000000..cfc22c0 --- /dev/null +++ b/ychat-0.8.0/src/mods/commands/yc_fake.cpp @@ -0,0 +1,30 @@ +#include "../../incl.h" +#include "../../chat/room.h" +#include "../../chat/user.h" + +using namespace std; + +extern "C" +{ + int extern_function(void *v_arg) + { + container *c=(container *)v_arg; + + user* p_user = (user*) c->elem[1]; // the corresponding user + conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF; + + bool b_fake = p_user->get_fake(); + + string s_msg = (b_fake == 1 + ? p_conf->get_elem("chat.msgs.unsetmodefake") + "<br>\n" + : p_conf->get_elem("chat.msgs.setmodefake") + "<br>\n"); + + + p_user->set_fake( !b_fake ); + p_user->get_room()->reload_onlineframe(); + p_user->msg_post ( &s_msg ); + + return 0; + } +} + diff --git a/ychat-0.8.0/src/mods/commands/yc_getroom.cpp b/ychat-0.8.0/src/mods/commands/yc_getroom.cpp new file mode 100755 index 0000000..e27c468 --- /dev/null +++ b/ychat-0.8.0/src/mods/commands/yc_getroom.cpp @@ -0,0 +1,53 @@ +#include "../../incl.h" + +/* + gcc -shared -o yc_name.so yc_name.cpp +*/ + +using namespace std; + +extern "C" +{ + int extern_function(void *v_arg) + { + + container *c=(container *)v_arg; + + user *p_user = (user*) c->elem[1]; // the corresponding user + vector<string> *params = (vector<string>*) c->elem[2]; // param array + chat* p_chat = (chat*) ((dynamic_wrap*)c->elem[3])->CHAT; + conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF; + + if ( ! params->empty() ) + { + vector<string>::iterator iter = params->begin(); + string s_searched_user( *iter ); + bool b_found; + user* p_searched_user = p_chat->get_user( s_searched_user, b_found ); + + if ( b_found ) + { + string s_msg = "<b>" + p_searched_user->get_colored_name() + "</b>" + + p_conf->get_elem("chat.msgs.userinroom") + "<b>" + + p_searched_user->get_room()->get_name() + + "</b><br>\n"; + p_user->msg_post( &s_msg ); + } + else + { + string s_msg = "<font color=\"#" + + p_conf->get_elem("chat.html.errorcolor") + + "\"><b>" + + s_searched_user + "</b> " + + p_conf->get_elem("chat.msgs.err.notavailable") + + "</font><br>\n"; + p_user->msg_post( &s_msg ); + + } + } + + return 0; + } + +} + diff --git a/ychat-0.8.0/src/mods/commands/yc_getrusage.cpp b/ychat-0.8.0/src/mods/commands/yc_getrusage.cpp new file mode 100755 index 0000000..42faa67 --- /dev/null +++ b/ychat-0.8.0/src/mods/commands/yc_getrusage.cpp @@ -0,0 +1,57 @@ +#include <stdio.h> +#include <sys/types.h> +#include <sys/time.h> +#include <sys/resource.h> +#include <iostream> +#include "../../chat/user.h" + +#ifndef RUSAGE_SELF +#define RUSAGE_SELF 0 +#endif +#ifndef RUSAGE_CHILDREN +#define RUSAGE_CHILDREN -1 +#endif + +/* + gcc -shared -o yc_name.so yc_name.cpp +*/ + +using namespace std; + +extern "C" +{ + int valid_color( string ); + int extern_function(void *v_arg) + { + container *c=(container *)v_arg; + + user *p_user = (user*) c->elem[1]; // the corresponding user + rusage* p_rusage = new rusage; + getrusage( RUSAGE_SELF, p_rusage ); + char c_msg[1024]; + + /* see man getrusage */ + + sprintf(c_msg, "getrusage:<br>\nmaxrss: %D (max resident set size)<br>\nixrss: %D (integral shared text memory size)<br>\nidrss: %D (integral unshared data size)<br>\nisrss %D (integral unshared stack size)<br>\nminflt: %D (page reclaims)<br>\nmajflt: %D (page faults)<br>\nnswap: %D (swaps)<br>\ninblock: %D (block input operations)<br>\noublock: %D (block output operations)<br>\nmsgsnd: %D (messages sent)<br>\nmsgrcv: %D (messages received)<br>\nnsignals: %D (signals received)<br>\nnvcsw: %D (voluntary context switches)<br>\nnivcsw: %D (involuntary context switches)<br>\n", + p_rusage->ru_maxrss, + p_rusage->ru_ixrss, + p_rusage->ru_idrss, + p_rusage->ru_isrss, + p_rusage->ru_minflt, + p_rusage->ru_majflt, + p_rusage->ru_nswap, + p_rusage->ru_inblock, + p_rusage->ru_oublock, + p_rusage->ru_msgsnd, + p_rusage->ru_msgrcv, + p_rusage->ru_nsignals, + p_rusage->ru_nvcsw, + p_rusage->ru_nivcsw + ); + + p_user->msg_post( new string( c_msg ) ); + + return 0; + } +} + diff --git a/ychat-0.8.0/src/mods/commands/yc_help.cpp b/ychat-0.8.0/src/mods/commands/yc_help.cpp new file mode 100755 index 0000000..cdeb1be --- /dev/null +++ b/ychat-0.8.0/src/mods/commands/yc_help.cpp @@ -0,0 +1,52 @@ +#include "../../incl.h" +#include "../../chat/user.h" + +/* + gcc -shared -o yc_name.so yc_name.cpp +*/ + +using namespace std; + +extern "C" +{ + int extern_function(void *v_arg) + { + container *c=(container *)v_arg; + + user *p_user = (user*) c->elem[1]; // the corresponding user + vector<string> *params = (vector<string>*) c->elem[2]; // param array + conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF; + string s_msg = ""; + + if (params->size() >= 1) + { + vector<string>::iterator iter = params->begin(); + + string s_help = p_conf->get_elem("chat.msgs.help." + *iter); + + if ( s_help != "" ) + { + s_msg.append("<b>" + *iter + ":</b> " + s_help + "<br>\n"); + p_user->msg_post( &s_msg ); + return 0; + } + + s_msg.append(*iter + " " + p_conf->get_elem("chat.msgs.err.notavailable")); + } + else + { + s_msg.append(p_conf->get_elem("chat.msgs.err.wrongcommandusage")); + } + + s_msg = "<font color=\"#" + + p_conf->get_elem("chat.html.errorcolor") + + "\"> " + + s_msg + + "</font><br>\n"; + + p_user->msg_post( &s_msg ); + + return 0; + } +} + diff --git a/ychat-0.8.0/src/mods/commands/yc_invisible.cpp b/ychat-0.8.0/src/mods/commands/yc_invisible.cpp new file mode 100755 index 0000000..58a8912 --- /dev/null +++ b/ychat-0.8.0/src/mods/commands/yc_invisible.cpp @@ -0,0 +1,31 @@ +#include "../../incl.h" +#include "../../chat/room.h" +#include "../../chat/user.h" + +using namespace std; + +extern "C" +{ + int extern_function(void *v_arg) + { + container *c=(container *)v_arg; + + user* p_user = (user*) c->elem[1]; // the corresponding user + conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF; + + bool b_invisible = p_user->get_invisible(); + + string s_msg = b_invisible + ? p_conf->get_elem("chat.msgs.setmodeinvisible") + + "<br>\n" + : p_conf->get_elem("chat.msgs.unsetmodeinvisible") + + "<br>\n"; + + p_user->set_invisible( !b_invisible ); + p_user->get_room()->reload_onlineframe(); + p_user->msg_post ( &s_msg ); + + return 0; + } +} + diff --git a/ychat-0.8.0/src/mods/commands/yc_j.cpp b/ychat-0.8.0/src/mods/commands/yc_j.cpp new file mode 100755 index 0000000..178a388 --- /dev/null +++ b/ychat-0.8.0/src/mods/commands/yc_j.cpp @@ -0,0 +1,104 @@ +#include "../../chat/user.h" +#include "../../chat/room.h" + +/* + gcc -shared -o yc_name.so yc_name.cpp +*/ + +using namespace std; + +extern "C" +{ + int extern_function(void *v_arg) + { + + container *c=(container *)v_arg; + + user *p_user = (user*) c->elem[1]; // the corresponding user + vector<string> *params = (vector<string> *) c->elem[2]; // param array + chat* p_chat = (chat*) ((dynamic_wrap*)c->elem[3])->CHAT; + conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF; + timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR; + gcol* p_gcol = (gcol*) ((dynamic_wrap*)c->elem[3])->GCOL; + + if ( ! params->empty() ) + { + vector<string> ::iterator iter; + + string s_room; + + for ( iter = params->begin(); iter != params->end(); iter++ ) + { + s_room.append( *iter ); + if ( iter+1 != params->end() ) + s_room.append(" "); + } + + int i_max_room_len = tool::string2int( p_conf->get_elem("chat.maxlength.roomname") ); + if ( i_max_room_len < s_room.length() ) + s_room = s_room.substr(0, i_max_room_len ); + + if ( tool::to_lower(s_room) == p_user->get_room()->get_lowercase_name() ) + { + string s_msg = "<font color=\"" + p_conf->get_elem("chat.html.errorcolor") + "\">" + + p_conf->get_elem("chat.msgs.err.alreadyinroom") + "<b>" + + p_user->get_room()->get_name() + "</b></font><br>\n"; + p_user->msg_post( &s_msg ); + } + else + { + string s_user = p_timr->get_time() + " " + p_user->get_colored_bold_name(); + string s_msg = s_user + p_conf->get_elem( "chat.msgs.userleavesroom" ) + "<b>"; + string s_msg2 = s_user + p_conf->get_elem( "chat.msgs.userentersroom" ) + "<b>"; + + bool b_flag; + room* p_room = p_chat->get_room( s_room , b_flag ); + + // if room does not exist add room to list! + if ( p_room == NULL ) + { + p_room = p_gcol->get_room_from_garbage_or_new( s_room ); + + s_msg.append( s_room + "</b><br>\n" ); + s_msg2.append( s_room + "</b><br>\n" ); + + room* p_room_old = p_user->get_room(); + + string s_name_lowercase = p_user->get_lowercase_name(); + p_user->get_room()->del_elem( s_name_lowercase ); + + p_gcol->lock_mutex(); + if ( p_room_old != NULL ) + p_room_old->msg_post( &s_msg ); + p_gcol->unlock_mutex(); + + p_room->add_user( p_user ); + p_chat->add_elem( p_room ); |
