/*
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
#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_test_NOTNEED
#define bo_sessiond_client_setvar_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){
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\n"
,status,internal_error1,writed,bdfiles1,bdfiles2
,bdusers,sessiond1,sessiond2,keysd,fsok
,publish_dbfiles,publish_fsok);
}
}
}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.testaddfile,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=%lu\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=%lu 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.testaddfile,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.testcreate_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\n",glocal.testset_access,glocal.extra,glocal.extra2,glocal.extra3,glocal.extra4);
string sessionid = bod_login (glocal.con_cli,glocal.testset_access);
if (sessionid.size() > 0){
printf ("\tfilename=%s username=%s listname=%s listmode=%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.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;
}