From 46d62c818a5ecad692016e79600e518d72715214 Mon Sep 17 00:00:00 2001 From: erickson Date: Wed, 11 Jul 2007 22:13:11 +0000 Subject: [PATCH] merged in latest changes from trunk git-svn-id: svn://svn.open-ils.org/OpenSRF/branches/new-json2@1026 9efc2488-bf62-4759-914b-345cdb29e865 --- src/srfsh/Makefile | 2 +- src/srfsh/srfsh.c | 180 +++++++++++++++++++++++++++++++++++++---------------- src/srfsh/srfsh.h | 73 ---------------------- 3 files changed, 127 insertions(+), 128 deletions(-) delete mode 100644 src/srfsh/srfsh.h diff --git a/src/srfsh/Makefile b/src/srfsh/Makefile index 911904c..efea8b2 100644 --- a/src/srfsh/Makefile +++ b/src/srfsh/Makefile @@ -6,7 +6,7 @@ LDFLAGS += -DEXEC_DEFAULT all: srfsh srfsh: srfsh.o -srfsh.o: srfsh.c srfsh.h +srfsh.o: srfsh.c install: cp srfsh $(BINDIR) diff --git a/src/srfsh/srfsh.c b/src/srfsh/srfsh.c index a5e1f82..e4d760a 100644 --- a/src/srfsh/srfsh.c +++ b/src/srfsh/srfsh.c @@ -1,9 +1,80 @@ -#include "srfsh.h" +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include + +#define SRFSH_PORT 5222 +#define COMMAND_BUFSIZE 4096 + + +/* shell prompt */ +static const char* prompt = "srfsh# "; + +static char* history_file = NULL; + +//static int child_dead = 0; + +static char* login_session = NULL; + +/* true if we're pretty printing json results */ +static int pretty_print = 1; +/* true if we're bypassing 'less' */ +static int raw_print = 0; + +/* our jabber connection */ +static transport_client* client = NULL; + +/* the last result we received */ +static osrf_message* last_result = NULL; + +/* functions */ +static int parse_request( char* request ); + +/* handles router requests */ +static int handle_router( char* words[] ); + +/* utility method for print time data */ +/* static int handle_time( char* words[] ); */ + +/* handles app level requests */ +static int handle_request( char* words[], int relay ); +//static int handle_exec(char* words[], int new_shell); +static int handle_set( char* words[]); +static int handle_print( char* words[]); +static int send_request( char* server, + char* method, growing_buffer* buffer, int relay ); +static int parse_error( char* words[] ); +static int router_query_servers( const char* server ); +static int print_help( void ); + +//static int srfsh_client_connect(); +//static char* tabs(int count); +//static void sig_child_handler( int s ); +//static void sig_int_handler( int s ); + +static int load_history( void ); +static int handle_math( char* words[] ); +static int do_math( int count, int style ); +static int handle_introspect(char* words[]); +static int handle_login( char* words[]); + +static int recv_timeout = 120; +static int is_from_script = 0; +static FILE* shell_writer = NULL; +// static FILE* shell_reader = NULL; -int recv_timeout = 120; -int is_from_script = 0; -FILE* shell_writer = NULL; -FILE* shell_reader = NULL; int main( int argc, char* argv[] ) { @@ -85,9 +156,11 @@ int main( int argc, char* argv[] ) { return 0; } -void sig_child_handler( int s ) { +/* +static void sig_child_handler( int s ) { child_dead = 1; } +*/ /* void sig_int_handler( int s ) { @@ -97,7 +170,7 @@ void sig_int_handler( int s ) { } */ -int load_history() { +static int load_history( void ) { char* home = getenv("HOME"); int l = strlen(home) + 24; @@ -115,34 +188,32 @@ int load_history() { } -int parse_error( char* words[] ) { +static int parse_error( char* words[] ) { if( ! words ) return 0; - - int i = 0; - char* current; - char buffer[256]; - memset(buffer, 0, 256); - while( (current=words[i++]) ) { - strcat(buffer, current); - strcat(buffer, " "); + growing_buffer * gbuf = buffer_init( 64 ); + buffer_add( gbuf, *words ); + while( *++words ) { + buffer_add( gbuf, " " ); + buffer_add( gbuf, *words ); } - if( ! buffer || strlen(buffer) < 1 ) - printf("\n"); - - fprintf( stderr, "???: %s\n", buffer ); + fprintf( stderr, "???: %s\n", gbuf->buf ); + buffer_free( gbuf ); + return 0; } -int parse_request( char* request ) { +static int parse_request( char* request ) { if( request == NULL ) return 0; + char * original_request = strdup( request ); + int ret_val = 0; int i = 0; char* words[COMMAND_BUFSIZE]; @@ -152,7 +223,10 @@ int parse_request( char* request ) { char* cur_tok = strtok( req, " " ); if( cur_tok == NULL ) + { + free( original_request ); return 0; + } while(cur_tok != NULL) { words[i++] = cur_tok; @@ -196,9 +270,14 @@ int parse_request( char* request ) { else if (!strcmp(words[0],"login")) ret_val = handle_login(words); - else if (words[0][0] == '!') - ret_val = handle_exec( words, 1 ); - + else if (words[0][0] == '!') { + //ret_val = handle_exec( words, 1 ); + system( original_request + 1 ); + ret_val = 1; + } + + free( original_request ); + if(!ret_val) { #ifdef EXEC_DEFAULT return handle_exec( words, 0 ); @@ -212,7 +291,7 @@ int parse_request( char* request ) { } -int handle_introspect(char* words[]) { +static int handle_introspect(char* words[]) { if(words[1] && words[2]) { fprintf(stderr, "--> %s\n", words[1]); @@ -236,7 +315,7 @@ int handle_introspect(char* words[]) { } -int handle_login( char* words[]) { +static int handle_login( char* words[]) { if( words[1] && words[2]) { @@ -317,7 +396,7 @@ int handle_login( char* words[]) { return 0; } -int handle_set( char* words[]) { +static int handle_set( char* words[]) { char* variable; if( (variable=words[1]) ) { @@ -358,7 +437,7 @@ int handle_set( char* words[]) { } -int handle_print( char* words[]) { +static int handle_print( char* words[]) { char* variable; if( (variable=words[1]) ) { @@ -381,7 +460,7 @@ int handle_print( char* words[]) { return 0; } -int handle_router( char* words[] ) { +static int handle_router( char* words[] ) { if(!client) return 1; @@ -407,7 +486,8 @@ int handle_router( char* words[] ) { /* if new shell, spawn a new child and subshell to do the work, otherwise pipe the request to the currently open (piped) shell */ -int handle_exec(char* words[], int new_shell) { +/* +static int handle_exec(char* words[], int new_shell) { if(!words[0]) return 0; @@ -416,7 +496,7 @@ int handle_exec(char* words[], int new_shell) { char command[len]; memset(command,0,len); - int i; /* chop out the ! */ + int i; // chop out the ! for( i=1; i!= len; i++) { command[i-1] = words[0][i]; } @@ -451,33 +531,21 @@ int handle_exec(char* words[], int new_shell) { buffer_add( b, "\n"); - //int reader; - //int reader = dup2(STDOUT_FILENO, reader); - //int reader = dup(STDOUT_FILENO); - //close(STDOUT_FILENO); - fprintf( shell_writer, b->buf ); buffer_free(b); fflush(shell_writer); usleep(1000); - /* - char c[4096]; - bzero(c, 4096); - read( reader, c, 4095 ); - fprintf(stderr, "read %s", c); - dup2(reader, STDOUT_FILENO); - */ - } return 1; } +*/ -int handle_request( char* words[], int relay ) { +static int handle_request( char* words[], int relay ) { if(!client) return 1; @@ -662,7 +730,7 @@ int send_request( char* server, } /* -int handle_time( char* words[] ) { +static int handle_time( char* words[] ) { if( ! words[1] ) { @@ -688,7 +756,7 @@ int handle_time( char* words[] ) { -int router_query_servers( char* router_server ) { +static int router_query_servers( const char* router_server ) { if( ! router_server || strlen(router_server) == 0 ) return 0; @@ -724,8 +792,8 @@ int router_query_servers( char* router_server ) { return 1; } - -int print_help() { + +static int print_help( void ) { printf( "---------------------------------------------------------------------------------\n" @@ -733,8 +801,10 @@ int print_help() { "---------------------------------------------------------------------------------\n" "help - Display this message\n" "! [args] - Forks and runs the given command in the shell\n" - "time - Prints the current time\n" + /* + "time - Prints the current time\n" "time - Formats seconds since epoch into readable format\n" + */ "set - set a srfsh variable (e.g. set pretty_print true )\n" "print - Displays the value of a srfsh variable\n" "---------------------------------------------------------------------------------\n" @@ -778,8 +848,8 @@ int print_help() { } - -char* tabs(int count) { +/* +static char* tabs(int count) { growing_buffer* buf = buffer_init(24); int i; for(i=0;i!=count;i++) @@ -789,15 +859,17 @@ char* tabs(int count) { buffer_free( buf ); return final; } +*/ + -int handle_math( char* words[] ) { +static int handle_math( char* words[] ) { if( words[1] ) return do_math( atoi(words[1]), 0 ); return 0; } -int do_math( int count, int style ) { +static int do_math( int count, int style ) { osrf_app_session* session = osrf_app_client_session_init( "opensrf.math" ); osrf_app_session_connect(session); diff --git a/src/srfsh/srfsh.h b/src/srfsh/srfsh.h deleted file mode 100644 index 6497231..0000000 --- a/src/srfsh/srfsh.h +++ /dev/null @@ -1,73 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include -#include - - - - -#define SRFSH_PORT 5222 -#define COMMAND_BUFSIZE 4096 - - -/* shell prompt */ -char* prompt = "srfsh# "; - -char* history_file = NULL; - -int child_dead = 0; - -char* login_session = NULL; - -/* true if we're pretty printing json results */ -int pretty_print = 1; -/* true if we're bypassing 'less' */ -int raw_print = 0; - -/* our jabber connection */ -transport_client* client = NULL; - -/* the last result we received */ -osrf_message* last_result = NULL; - -/* functions */ -int parse_request( char* request ); - -/* handles router requests */ -int handle_router( char* words[] ); - -/* utility method for print time data */ -int handle_time( char* words[] ); - -/* handles app level requests */ -int handle_request( char* words[], int relay ); -int handle_exec(char* words[], int new_shell); -int handle_set( char* words[]); -int handle_print( char* words[]); -int send_request( char* server, - char* method, growing_buffer* buffer, int relay ); -int parse_error( char* words[] ); -int router_query_servers( char* server ); -int srfsh_client_connect(); -int print_help(); -char* tabs(int count); -void sig_child_handler( int s ); -void sig_int_handler( int s ); - -int load_history(); -int handle_math( char* words[] ); -int do_math( int count, int style ); -int handle_introspect(char* words[]); -int handle_login( char* words[]); -- 2.11.0