/* This file is part of Bolixo. Bolixo is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Bolixo is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Bolixo. If not, see . */ /* Command line client to test bod */ #include #include #include #include #include #include #include #include #include #include #include "bolixo.h" #include "bolixo.m" #include "instrument.h" using namespace std; #define bod_client_list_contacts_NOTNEED #define bod_client_stat_NOTNEED #define bod_client_markview_NOTNEED #define bod_client_list_inboxes_NOTNEED #define bod_client_list_msgs_NOTNEED #define bod_client_sendmsg_NOTNEED #define bod_client_sendmsg_project_NOTNEED #define bod_client_replymsg_NOTNEED #define bod_client_replymsg_project_NOTNEED #define bod_client_sendattach_NOTNEED #define bod_client_create_project_dir_NOTNEED #define bod_client_sendtalk_NOTNEED #define bod_client_list_talk_NOTNEED #define bod_client_set_group_desc_NOTNEED #define bod_client_set_list_desc_NOTNEED #define bod_client_contact_request_NOTNEED #define bod_client_contact_manage_NOTNEED #define bod_client_contact_list_NOTNEED #define bod_client_sendtalk_file_NOTNEED #define bod_client_config_read_NOTNEED #define bod_client_config_write_NOTNEED #define bod_client_public_checkuser_NOTNEED #define bod_client_public_listdir_NOTNEED #define bod_client_public_readfile_NOTNEED #define bod_client_public_list_talk_NOTNEED #define bod_client_form_readvar_NOTNEED #define bod_client_form_savevar_NOTNEED #define bod_client_form_deletevar_NOTNEED #define bod_client_form_deleteall_NOTNEED #define bod_client_interest_set_NOTNEED #define bod_client_interest_unset_NOTNEED #define bod_client_interest_check_NOTNEED #define bod_client_interest_list_NOTNEED #define bod_client_undelete_NOTNEED #define bod_client_systempubkey_NOTNEED #define bod_client_systemsign_NOTNEED #define bod_client_info_read_NOTNEED #define bod_client_info_write_NOTNEED #define bod_client_getpubkey_NOTNEED #define bod_client_registernode_NOTNEED #define bod_client_remotelogin_NOTNEED #define bod_client_remotepass_NOTNEED #define bod_client_nodelogin_NOTNEED #define bod_client_nodepass_NOTNEED #define bod_client_remote_interest_set_NOTNEED #define bod_client_remote_interest_unset_NOTNEED #define bod_client_sendtalk_anon_NOTNEED #define bod_client_get_notification_NOTNEED #define bod_client_set_notification_NOTNEED #define bod_client_playstep_NOTNEED #define bod_client_playstep_more_NOTNEED #define bod_client_waitevent_NOTNEED #define bod_client_set_members_NOTNEED #define bod_client_contact_remove_NOTNEED #define bod_client_list_members_NOTNEED #include "proto/bod_client.protoch" #include "proto/bod_admin.protoch" #define bo_sessiond_admin_getsessioninfo_NOTNEED #define bo_sessiond_admin_test_NOTNEED #define bo_sessiond_admin_createsession_NOTNEED #define bo_sessiond_admin_deletesessions_NOTNEED #define bo_sessiond_admin_setsession_NOTNEED #define bo_sessiond_admin_getsession_NOTNEED #define bo_sessiond_admin_setlang_NOTNEED #include "proto/bo-sessiond_admin.protoch" #define bo_sessiond_client_getsessioninfo_NOTNEED #define bo_sessiond_client_getsessioninfovars_NOTNEED #define bo_sessiond_client_getsessioninfovars_v2_NOTNEED #define bo_sessiond_client_test_NOTNEED #define bo_sessiond_client_setvar_NOTNEED #define bo_sessiond_client_waitevent_NOTNEED #define bo_sessiond_client_setnotify_NOTNEED #define bo_sessiond_client_ping_NOTNEED #include "proto/bo-sessiond_client.protoch" static string bod_createsession(CONNECT_INFO &con) { glocal string ret; (con); glocal.ret = sessionid; return glocal.ret; } static void bod_deletesession(CONNECT_INFO &con, string &sessionid) { (con,sessionid); } static bool verbose = true; static string bod_login (CONNECT_INFO &con, PARAM_STRING email, PARAM_STRING password) { glocal string ret; glocal const char *email = email.ptr; glocal string sessionid = bod_createsession(con); (con,glocal.sessionid,email,password); if (verbose || !success) printf ("\tlogin %s success=%d sessionid=%s\n",glocal.email,success,glocal.sessionid.c_str()); if (success) glocal.ret = glocal.sessionid; return glocal.ret; } static string bod_login (CONNECT_INFO &con, const char *user_suffix) { glocal string ret; if (user_suffix == NULL){ tlmp_error ("bod_login user_suffix=NULL\n"); exit (-1); }else if (strcmp(user_suffix,"admin")==0){ string email = string_f("admin@%s",getenv("HOSTNAME")); glocal.ret = bod_login(con,email,"admin"); }else{ glocal const char *user_suffix = user_suffix; string email=string("jacques-")+user_suffix+string("@bolixo.org"); string password=string("pass-")+user_suffix; glocal.ret = bod_login(con,email.c_str(),password.c_str()); } return glocal.ret; } static void bod_logout (CONNECT_INFO &con, const PARAM_STRING sessionid) { (con,sessionid); if (verbose) printf ("\tlogout\n"); } static void test_execute (const char *cmd) { if (cmd != NULL) system(cmd); } static void bod_client_copyrest (CONNECT_INFO &con, const char *sessionid, const char *handle, FILE *fin) { glocal bool stop = false; int len; char buf[REQ_CONTENT_CHUNK]; while (!glocal.stop && (len=fread(buf,1,sizeof(buf),fin))>0){ BOB_TYPE bob (buf,len,false); (con,sessionid,handle,bob,len==REQ_CONTENT_CHUNK); printf ("\tAppendfile tsuccess=%d msg=%s\n",success,msg); if (!success) glocal.stop = true; } } int main (int argc, char *argv[]) { glocal int ret = -1; glocal const char *cli_port = "9000"; glocal const char *adm_port = "9000"; glocal const char *sessport = "9200"; glocal const char *sessclientport = "9100"; glocal const char *host = "192.168.4.1"; glocal const char *client_bind = "192.168.5.5"; glocal const char *admin_bind = "192.168.5.6"; glocal const char *sess_bind = "192.168.5.3"; glocal const char *testadduser = NULL; glocal const char *testaddincomplete = NULL; glocal const char *testlogin = NULL; glocal const char *testdeleteuser = NULL; glocal const char *testlistdir = NULL; glocal const char *testmkdir = NULL; glocal const char *testrmdir = NULL; glocal const char *testaddfile = NULL; glocal const char *testaddfile_bob = NULL; glocal const char *testdelfile = NULL; glocal const char *testmodifyfile = NULL; glocal const char *testmodifyfile_bob = NULL; glocal const char *testrename = NULL; glocal const char *testcopy = NULL; glocal const char *testreadfile = NULL; glocal const char *testreadfile_bob = NULL; glocal const char *testcreate_group_list = NULL; glocal const char *testdelete_group_list = NULL; glocal const char *testprint_group_lists = NULL; glocal const char *testcreate_group = NULL; glocal const char *testdelete_group = NULL; glocal const char *testprint_groups = NULL; glocal const char *testset_group = NULL; glocal const char *testset_member = NULL; glocal const char *testset_access = NULL; glocal const char *testverifysign = NULL; glocal const char *testsetnotify=NULL; glocal const char *testdelnotify=NULL; glocal bool testsystem = false; glocal bool testcreatesessions = false; glocal const char *exec1 = NULL; glocal const char *exec2 = NULL; glocal string client_secret; glocal string admin_secret; glocal int workers = 1; glocal int nbrep = 1; glocal int nbrows = 10; glocal const char *extra = ""; glocal const char *extra2 = ""; glocal const char *extra3 = ""; glocal const char *extra4 = ""; glocal const char *extra5 = ""; glocal bool idonly = false; glocal const char *loaduserfile = NULL; glocal.ret = (argc,argv,"bolixo"); setproginfo ("trlid-client",VERSION ,"Command line client to test trlid\n" "\n" "\tlogin email password\n" "\tlogout user\n" "\tadduser name email password = confirmid\n" "\tconfirmuser id\n" "\tdeleteuser userid = confirmid\n" "\tconfirmdelete id\n" ); setarg ('h',"host","Host name of IP of bod server",glocal.host,false); setarg ('p',"cli_port","client TCP port of bod server (or unix path)",glocal.cli_port,false); setarg (' ',"adm_port","admin TCP port of bod server (or unix path)",glocal.adm_port,false); setarg (' ',"sessport","TCP port of sessiond server",glocal.sessport,false); setarg (' ',"sessclientport","TCP port of sessiond server (client)",glocal.sessclientport,false); setarg (' ',"client_secret","Secret used to sign client requests",glocal.client_secret,true); setarg (' ',"client_bind","Client IP used to reach the host",glocal.client_bind,false); setarg (' ',"admin_secret","Secret used to sign admin requests",glocal.admin_secret,true); setarg (' ',"admin_bind","Client IP used to reach the host",glocal.admin_bind,false); setarg (' ',"sess_bind","Client IP used to reach sessiond",glocal.sess_bind,false); setgrouparg ("File operations"); setarg (' ',"loadusers","Load user accounts from file",glocal.loaduserfile,false); setgrouparg ("Tests"); setarg (' ',"exec1","Execute a command in the middle of the test",glocal.exec1,false); setarg (' ',"exec2","Execute a command in the middle of the test",glocal.exec2,false); setarg (' ',"testadduser","Sequence adduser confirmuser",glocal.testadduser,false); setarg (' ',"testaddincomplete","Sequence adduser without confirm",glocal.testaddincomplete,false); setarg (' ',"testlogin","Sequence login logout",glocal.testlogin,false); setarg (' ',"testdeleteuser","Sequence login deleteuser",glocal.testdeleteuser,false); setarg (' ',"testsystem","Test components",glocal.testsystem,false); setarg (' ',"testcreatesessions","Create many sessions",glocal.testcreatesessions,false); setarg (' ',"testlistdir","List the content of a directory",glocal.testlistdir,false); setarg (' ',"testmkdir","Create a new directory",glocal.testmkdir,false); setarg (' ',"testrmdir","Remove a directory",glocal.testrmdir,false); setarg (' ',"testaddfile","Create a new file",glocal.testaddfile,false); setarg (' ',"testaddfile_bob","Create a new binary file",glocal.testaddfile_bob,false); setarg (' ',"testdelfile","Remove a file",glocal.testdelfile,false); setarg (' ',"testmodifyfile","Modify a file",glocal.testmodifyfile,false); setarg (' ',"testmodifyfile_bob","Modify a file",glocal.testmodifyfile_bob,false); setarg (' ',"testreadfile","Read a file",glocal.testreadfile,false); setarg (' ',"testreadfile_bob","Read a file",glocal.testreadfile_bob,false); setarg (' ',"testrename","Rename a file or directory",glocal.testrename,false); setarg (' ',"testcopy","Copy a file or directory",glocal.testcopy,false); setarg (' ',"testcreate_group_list","Create a list of groups",glocal.testcreate_group_list,false); setarg (' ',"testcreate_group","Create a group",glocal.testcreate_group,false); setarg (' ',"testdelete_group_list","Create a list of groups",glocal.testdelete_group_list,false); setarg (' ',"testdelete_group","Create a group",glocal.testdelete_group,false); setarg (' ',"testprint_group_lists","Print list of groups",glocal.testprint_group_lists,false); setarg (' ',"testprint_groups","Print groups",glocal.testprint_groups,false); setarg (' ',"testset_group","Add or configure a group in a list",glocal.testset_group,false); setarg (' ',"testset_member","Add or configure a member of a group",glocal.testset_member,false); setarg (' ',"testset_access","Set access to a file or directory",glocal.testset_access,false); setarg (' ',"testsetnotify","Register a notification in bo-sessiond for all session of a user",glocal.testsetnotify,false); setarg (' ',"testdelnotify","Remove a notification in bo-sessiond for one session",glocal.testdelnotify,false); setarg (' ',"testverifysign","Check the signature of a message",glocal.testverifysign,false); setgrouparg ("Test parameters"); setarg (' ',"workers","Test concurent access",glocal.workers,false); setarg (' ',"nbrep","Number of repetition per worker",glocal.nbrep,false); setarg (' ',"nbrows","Number of rows requested",glocal.nbrows,false); setarg (' ',"extra","Extra string when adding something",glocal.extra,false); setarg (' ',"extra2","Extra second string when adding something",glocal.extra2,false); setarg (' ',"extra3","Extra second string when adding something",glocal.extra3,false); setarg (' ',"extra4","Extra second string when adding something",glocal.extra4,false); setarg (' ',"extra5","Extra second string when adding something",glocal.extra5,false); setarg (' ',"idonly","Shows only ID when listing records",glocal.idonly,false); glocal int ret = -1; // Used for testing glocal CONNECT_INFO con_cli; glocal CONNECT_INFO con_adm; glocal CONNECT_INFO con_sess; glocal CONNECT_INFO con_client_sess; glocal.con_cli.secret = glocal.client_secret; glocal.con_cli.host = glocal.host; glocal.con_cli.port = glocal.cli_port; glocal.con_cli.bind = glocal.client_bind; glocal.con_adm.secret = glocal.admin_secret; glocal.con_adm.host = glocal.host; glocal.con_adm.port = glocal.adm_port; glocal.con_adm.bind = glocal.admin_bind; glocal.con_sess.secret = glocal.admin_secret; glocal.con_sess.host = glocal.host; glocal.con_sess.port = glocal.sessport; glocal.con_sess.bind = glocal.sess_bind; glocal.con_client_sess.secret = glocal.client_secret; glocal.con_client_sess.host = glocal.host; glocal.con_client_sess.port = glocal.sessclientport; glocal.con_client_sess.bind = glocal.sess_bind; if (glocal.loaduserfile != NULL){ (glocal.loaduserfile,true); vector tb; int n = str_splitline(line,' ',tb); if (n == 3){ glocal string name = tb[0]; string &email = tb[1]; string &pass = tb[2]; const char *lang = n==3 ? tlmp_getlang() : tb[3].c_str(); string sessionid = bod_createsession(glocal.con_cli); if (sessionid.size() > 0){ (glocal.con_cli,sessionid,glocal.name,email,pass,lang); //printf ("\tid=%s msg=%s\n",confirmid,msg); if (confirmid[0] == '\0'){ printf ("\tEmpty confirmid msg=%s\n",msg); }else{ (glocal.con_cli,confirmid,"eng"); printf ("\t%-15s %s\n",glocal.name.c_str(),msg); } bod_deletesession(glocal.con_sess,sessionid); } } return 0; }else if (glocal.testadduser){ string name=string("jacques-")+glocal.testadduser; string email=string("jacques-")+glocal.testadduser+string("@bolixo.org"); string password=string("pass-")+glocal.testadduser; if (strcmp(glocal.testadduser,"admin")==0){ name="admin"; string email = string_f("admin@%s",getenv("HOSTNAME")); password="admin"; } printf ("testadduser email=%s\n",email.c_str()); string sessionid = bod_createsession(glocal.con_cli); if (sessionid.size() > 0){ (glocal.con_cli,sessionid,name,email,password,tlmp_getlang()); //printf ("\tid=%s msg=%s\n",confirmid,msg); if (confirmid[0] == '\0'){ printf ("\tEmpty confirmid: msg=%s\n",msg); }else{ (glocal.con_cli,confirmid,"eng"); if (!success) printf ("\tsuccess=%d %s\n",success,msg); } bod_deletesession(glocal.con_sess,sessionid); } }else if (glocal.testaddincomplete){ string name=string("jacques-")+glocal.testaddincomplete; string email=string("jacques-")+glocal.testaddincomplete+string("@bolixo.org"); string password=string("pass-")+glocal.testaddincomplete; printf ("testaddincomplete email=%s\n",email.c_str()); string sessionid = bod_createsession(glocal.con_cli); if (sessionid.size() > 0){ (glocal.con_cli,sessionid,name,email,password,tlmp_getlang()); if (confirmid[0] == '\0'){ printf ("\tEmpty confirmid: msg=%s\n",msg); }else{ printf ("\tid=%s msg=%s\n",confirmid,msg); } bod_deletesession(glocal.con_sess,sessionid); } }else if (glocal.testlogin){ glocal string sessionid = bod_createsession(glocal.con_cli); string email=string("jacques-")+glocal.testlogin+string("@bolixo.org"); string password=string("pass-")+glocal.testlogin; (glocal.con_cli,glocal.sessionid,email,password); printf ("testlogin success=%d\n",success); test_execute (glocal.exec1); if (success){ (glocal.con_cli,glocal.sessionid); printf ("\tlogout ok\n"); } }else if (glocal.testdeleteuser){ // We log twice with the same account and then delete the account (A user is allowed to do so) glocal string email=string("jacques-")+glocal.testdeleteuser+string("@bolixo.org"); glocal string password=string("pass-")+glocal.testdeleteuser; glocal string sessionid1 = bod_createsession(glocal.con_cli); if (strcmp(glocal.testdeleteuser,"admin")==0){ glocal.email=string_f("admin@%s",getenv("HOSTNAME")); glocal.password="admin"; } // We start with a login to get a session id (glocal.con_cli,glocal.sessionid1,glocal.email,glocal.password); printf ("login1 success=%d sessionid=%s\n",success,glocal.sessionid1.c_str()); glocal string sessionid2 = bod_createsession(glocal.con_cli); (glocal.con_cli,glocal.sessionid2,glocal.email,glocal.password); printf ("login2 success=%d sessionid=%s\n",success,glocal.sessionid2.c_str()); if (success){ test_execute (glocal.exec1); (glocal.con_cli,glocal.sessionid2); printf ("deleteuser email=%s deleteid=%s\n",email,confirmid); (glocal.con_cli,confirmid); printf ("delete done success=%d msg=%s\n",success,msg); test_execute (glocal.exec2); } }else if (glocal.testsystem){ for (int i=0; i(glocal.con_adm); if (internal_error){ printf ("Can't talk to bod server\n"); }else{ const char *status = " "; if (internal_error1 || !writed || !bdfiles1 || !bdfiles2 || !bdusers || !sessiond1 || !sessiond2 || !keysd || !fsok || !publish_dbfiles || !publish_fsok || !documentd || admin_sess_valid != 2){ status = "***"; } printf ("%s internal_error1=%d writed=%d bdfiles1=%d bdfiles2=%d" " bdusers=%d sessiond1=%d sessiond2=%d keysd=%d fsok=%d" " publish_dbfiles=%d publish_fsok=%d documentd=%d admin_sess_valid=%u\n" ,status,internal_error1,writed,bdfiles1,bdfiles2 ,bdusers,sessiond1,sessiond2,keysd,fsok ,publish_dbfiles,publish_fsok,documentd,admin_sess_valid); } } }else if (glocal.testcreatesessions){ printf ("testcreatesessions nbrep=%d\n",glocal.nbrep); for (int i=0; i 0){ string name = glocal.extra; string text = string_f("text-%s %s",glocal.testaddfile,glocal.extra2); printf ("\tname=%s\n",name.c_str()); (glocal.con_cli,sessionid,name,text); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testaddfile_bob){ printf ("addfile_bob %s extra=%s extra2=%s\n",glocal.testaddfile_bob,glocal.extra,glocal.extra2); glocal string sessionid = bod_login (glocal.con_cli,glocal.testaddfile_bob); if (glocal.sessionid.size() > 0){ string name = glocal.extra; if (glocal.extra2[0] == '/'){ // We are sending a file glocal FILE *fin = fopen (glocal.extra2,"r"); if (glocal.fin == NULL){ tlmp_error ("Can't read file %s (%s)\n",glocal.extra2,strerror(errno)); }else{ char buf[REQ_CONTENT_CHUNK]; int len; len=fread (buf,1,sizeof(buf),glocal.fin); BOB_TYPE bob (buf,len,false); (glocal.con_cli,glocal.sessionid,name,bob,len==REQ_CONTENT_CHUNK,""); printf ("\tsuccess=%d handle=%s msg=%s\n",success,handle,msg); if (success){ bod_client_copyrest (glocal.con_cli,glocal.sessionid.c_str(),handle,glocal.fin); } fclose (glocal.fin); } }else{ string text; for (int i=0; i<20; i++) text += string_f("text-%s %s\n",glocal.testaddfile_bob,glocal.extra2); glocal BOB_TYPE bob; glocal.bob.setbuffer (text.c_str(),text.size(),false); printf ("\tname=%s\n",name.c_str()); (glocal.con_cli,glocal.sessionid,name,glocal.bob,false,""); printf ("\tsuccess=%d handle=%s msg=%s\n",success,handle,msg); for (int i=0; i<100; i++){ (glocal.con_cli,glocal.sessionid,handle,glocal.bob,false); printf ("\tsuccess=%d msg=%s\n",success,msg); } } bod_logout (glocal.con_cli,glocal.sessionid); } }else if (glocal.testmodifyfile_bob){ printf ("modifyfile_bob %s extra=%s extra2=%s\n",glocal.testmodifyfile_bob,glocal.extra,glocal.extra2); glocal string sessionid = bod_login (glocal.con_cli,glocal.testmodifyfile_bob); if (glocal.sessionid.size() > 0){ string name = glocal.extra; if (glocal.extra2[0] == '/'){ // We are sending a file glocal FILE *fin = fopen (glocal.extra2,"r"); if (glocal.fin == NULL){ tlmp_error ("Can't read file %s (%s)\n",glocal.extra2,strerror(errno)); }else{ char buf[REQ_CONTENT_CHUNK]; int len; len=fread (buf,1,REQ_CONTENT_CHUNK,glocal.fin); BOB_TYPE bob (buf,len,false); (glocal.con_cli,glocal.sessionid,name,bob,len==REQ_CONTENT_CHUNK,""); printf ("\tsuccess=%d handle=%s msg=%s\n",success,handle,msg); if (success){ bod_client_copyrest (glocal.con_cli,glocal.sessionid.c_str(),handle,glocal.fin); } fclose (glocal.fin); } }else{ string text; for (int i=0; i<20; i++) text += string_f("text-%s %s\n",glocal.testaddfile_bob,glocal.extra2); glocal BOB_TYPE bob; glocal.bob.setbuffer (text.c_str(),text.size(),false); printf ("\tname=%s\n",name.c_str()); (glocal.con_cli,glocal.sessionid,name,glocal.bob,false,""); printf ("\tsuccess=%d handle=%s msg=%s\n",success,handle,msg); for (int i=0; i<100; i++){ (glocal.con_cli,glocal.sessionid,handle,glocal.bob,false); printf ("\tsuccess=%d msg=%s\n",success,msg); } } bod_logout (glocal.con_cli,glocal.sessionid); } }else if (glocal.testdelfile){ printf ("delfile %s extra=%s extra2=%s\n",glocal.testdelfile,glocal.extra,glocal.extra2); string sessionid = bod_login (glocal.con_cli,glocal.testdelfile); if (sessionid.size() > 0){ string name = glocal.extra; printf ("\tname=%s\n",name.c_str()); (glocal.con_cli,sessionid,name); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testrename){ printf ("rename %s extra=%s extra2=%s\n",glocal.testrename,glocal.extra,glocal.extra2); string sessionid = bod_login (glocal.con_cli,glocal.testrename); if (sessionid.size() > 0){ const char *oldname = glocal.extra; const char *newname = glocal.extra2; printf ("\toldname=%s newname=%s\n",oldname,newname); (glocal.con_cli,sessionid,oldname,newname); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testcopy){ printf ("copy %s extra=%s extra2=%s\n",glocal.testcopy,glocal.extra,glocal.extra2); string sessionid = bod_login (glocal.con_cli,glocal.testcopy); if (sessionid.size() > 0){ const char *srcname = glocal.extra; const char *dstname = glocal.extra2; printf ("\tsrcname=%s dstname=%s\n",srcname,dstname); (glocal.con_cli,sessionid,srcname,"",dstname); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testmodifyfile){ printf ("modifyfile %s extra=%s\n",glocal.testmodifyfile,glocal.extra); string sessionid = bod_login (glocal.con_cli,glocal.testmodifyfile); if (sessionid.size() > 0){ string name = glocal.extra; string text = string_f("mod text-%s %s",glocal.testmodifyfile,glocal.extra2); (glocal.con_cli,sessionid,name,text); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testreadfile){ printf ("readfile %s extra=%s\n",glocal.testreadfile,glocal.extra); string sessionid = bod_login (glocal.con_cli,glocal.testreadfile); if (sessionid.size() > 0){ string name = glocal.extra; (glocal.con_cli,sessionid,name,""); printf ("\tsuccess=%d msg=%s content=%s\n",success,msg,content); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testreadfile_bob){ printf ("readfile %s extra=%s\n",glocal.testreadfile_bob,glocal.extra); glocal string sessionid = bod_login (glocal.con_cli,glocal.testreadfile_bob); if (glocal.sessionid.size() > 0){ string name = glocal.extra; (glocal.con_cli,glocal.sessionid,name,"",false); printf ("\tsuccess=%d msg=%s more=%d handle=%s size=%zu\n" ,success,msg,more,handle,content.getsize()); if (success){ glocal const BOB_TYPE *content = &content; glocal bool more = more; glocal string handle = handle; ("/tmp/readfile_bob.data",false); glocal FILE *fout = fout; fwrite (glocal.content->getbuffer(),1,glocal.content->getsize(),fout); while (glocal.more){ (glocal.con_cli,glocal.sessionid,glocal.handle); printf ("\tsuccess=%d more=%d size=%zu msg=%s\n",success,more,content.getsize(),msg); glocal.more = more; if (success) fwrite (content.getbuffer(),1,content.getsize(),glocal.fout); } return 0; } bod_logout (glocal.con_cli,glocal.sessionid); } }else if (glocal.testlistdir){ printf ("listdir %s extra=%s extra2=%s\n",glocal.testlistdir,glocal.extra,glocal.extra2); string sessionid = bod_login (glocal.con_cli,glocal.testlistdir); if (sessionid.size() > 0){ printf ("\tname=%s\n",glocal.extra); (glocal.con_cli,sessionid,glocal.extra,"",false,0,100); printf ("\tsuccess=%d msg=%s\n",success,msg); for (auto &f:files){ printf ("\t%c %s %s\n",f.type,f.modified,f.name); } bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testmkdir){ printf ("mkdir %s extra=%s extra2=%s\n",glocal.testmkdir,glocal.extra,glocal.extra2); string sessionid = bod_login (glocal.con_cli,glocal.testmkdir); if (sessionid.size() > 0){ printf ("\tname=%s\n",glocal.extra); (glocal.con_cli,sessionid,glocal.extra); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testrmdir){ printf ("rmdir %s extra=%s extra2=%s\n",glocal.testrmdir,glocal.extra,glocal.extra2); string sessionid = bod_login (glocal.con_cli,glocal.testrmdir); if (sessionid.size() > 0){ printf ("\tname=%s\n",glocal.extra); (glocal.con_cli,sessionid,glocal.extra); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testcreate_group_list != NULL){ printf ("create_group_list %s extra=%s extra2=%s\n",glocal.testcreate_group_list,glocal.extra,glocal.extra2); string sessionid = bod_login (glocal.con_cli,glocal.testcreate_group_list); if (sessionid.size() > 0){ printf ("\tlistname=%s owner=%s\n",glocal.extra,glocal.extra2); (glocal.con_cli,sessionid,glocal.extra,glocal.extra2); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testdelete_group_list != NULL){ printf ("delete_group_list %s extra=%s extra2=%s\n",glocal.testdelete_group_list,glocal.extra,glocal.extra2); string sessionid = bod_login (glocal.con_cli,glocal.testdelete_group_list); if (sessionid.size() > 0){ printf ("\tlistname=%s owner=%s\n",glocal.extra,glocal.extra2); (glocal.con_cli,sessionid,glocal.extra,glocal.extra2); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testprint_group_lists != NULL){ printf ("print_group_lists %s extra=%s\n",glocal.testprint_group_lists,glocal.extra); string sessionid = bod_login (glocal.con_cli,glocal.testprint_group_lists); if (sessionid.size() > 0){ printf ("\towner=%s\n",glocal.extra); (glocal.con_cli,sessionid,glocal.extra); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testcreate_group != NULL){ printf ("create_group %s extra=%s extra2=%s\n",glocal.testcreate_group,glocal.extra,glocal.extra2); string sessionid = bod_login (glocal.con_cli,glocal.testcreate_group); if (sessionid.size() > 0){ printf ("\tgroupname=%s owner=%s\n",glocal.extra,glocal.extra2); (glocal.con_cli,sessionid,glocal.extra,glocal.extra2); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testdelete_group != NULL){ printf ("delete_group %s extra=%s extra2=%s\n",glocal.testdelete_group,glocal.extra,glocal.extra2); string sessionid = bod_login (glocal.con_cli,glocal.testcreate_group); if (sessionid.size() > 0){ printf ("\tgroupname=%s owner=%s\n",glocal.extra,glocal.extra2); (glocal.con_cli,sessionid,glocal.extra,glocal.extra2); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testprint_groups != NULL){ printf ("list_groups %s extra=%s\n",glocal.testprint_groups,glocal.extra); string sessionid = bod_login (glocal.con_cli,glocal.testprint_groups); if (sessionid.size() > 0){ printf ("\towner=%s\n",glocal.extra); (glocal.con_cli,sessionid,glocal.extra,true); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testset_group != NULL){ printf ("set_group %s extra=%s extra2=%s extra3=%s extra4=%s\n",glocal.testset_group ,glocal.extra,glocal.extra2,glocal.extra3,glocal.extra4); string sessionid = bod_login (glocal.con_cli,glocal.testset_group); if (sessionid.size() > 0){ printf ("\tlistname=%s groupname=%s defaultaccess=%s owner=%s\n",glocal.extra,glocal.extra2,glocal.extra3,glocal.extra4); (glocal.con_cli,sessionid,glocal.extra,glocal.extra2,glocal.extra3,glocal.extra4); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testset_member != NULL){ printf ("set_member %s extra=%s extra2=%s extra3=%s extra4=%s\n",glocal.testset_member ,glocal.extra,glocal.extra2,glocal.extra3,glocal.extra4); string sessionid = bod_login (glocal.con_cli,glocal.testset_member); if (sessionid.size() > 0){ printf ("\tgroupname=%s user=%s defaultaccess=%s role=%s owner=%s\n",glocal.extra,glocal.extra2,glocal.extra3,glocal.extra4,glocal.extra5); (glocal.con_cli,sessionid,glocal.extra,glocal.extra2,glocal.extra3,glocal.extra4,glocal.extra5); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testset_access != NULL){ printf ("set_access %s extra=%s extra2=%s extra3=%s extra4=%s extra5=%s\n",glocal.testset_access,glocal.extra,glocal.extra2,glocal.extra3,glocal.extra4,glocal.extra5); string sessionid = bod_login (glocal.con_cli,glocal.testset_access); if (sessionid.size() > 0){ printf ("\tfilename=%s username=%s listowner=%s listname=%s listmode=%s\n",glocal.extra,glocal.extra2,glocal.extra3,glocal.extra4,glocal.extra5); (glocal.con_cli,sessionid,glocal.extra,glocal.extra2,glocal.extra3,glocal.extra4,glocal.extra5,""); printf ("\tsuccess=%d msg=%s\n",success,msg); bod_logout (glocal.con_cli,sessionid); } }else if (glocal.testverifysign != NULL){ printf ("verifysign user=%s extra=%s\n",glocal.testverifysign,glocal.extra); (glocal.con_cli,glocal.testverifysign,glocal.extra); printf ("\tstatus=%d msg=%s\n",status,msg); }else if (glocal.testsetnotify != NULL){ if (glocal.extra[0] == '\0'){ tlmp_error ("You must specify the userid using --extra\n"); exit (-1); } unsigned userid = atoi(glocal.extra); printf ("setnotify name=%s userid={%u}\n",glocal.testsetnotify,userid); vector userids={userid}; (glocal.con_sess,userids,glocal.testsetnotify,""); }else if (glocal.testdelnotify != NULL){ printf ("delnotify session=%s name=%s\n",glocal.extra,glocal.testdelnotify); (glocal.con_client_sess,glocal.extra,glocal.testdelnotify); printf ("success=%d msg=%s\n",success,msg); }else{ tlmp_error ("No test option selected\n"); glocal.tlmpprogram.usage(); } return glocal.ret; return glocal.ret; }