merged in latest changes from trunk
authorerickson <erickson@9efc2488-bf62-4759-914b-345cdb29e865>
Wed, 11 Jul 2007 22:13:11 +0000 (22:13 +0000)
committererickson <erickson@9efc2488-bf62-4759-914b-345cdb29e865>
Wed, 11 Jul 2007 22:13:11 +0000 (22:13 +0000)
git-svn-id: svn://svn.open-ils.org/OpenSRF/branches/new-json2@1026 9efc2488-bf62-4759-914b-345cdb29e865

src/srfsh/Makefile
src/srfsh/srfsh.c
src/srfsh/srfsh.h [deleted file]

index 911904c..efea8b2 100644 (file)
@@ -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)
index a5e1f82..e4d760a 100644 (file)
@@ -1,9 +1,80 @@
-#include "srfsh.h"
+#include <opensrf/transport_client.h>
+#include <opensrf/osrf_message.h>
+#include <opensrf/osrf_app_session.h>
+#include <time.h>
+#include <sys/timeb.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include <opensrf/utils.h>
+#include <opensrf/log.h>
+
+#include <signal.h>
+
+#include <stdio.h>
+#include <readline/readline.h>
+#include <readline/history.h>
+
+#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"
                        "!<command> [args] - Forks and runs the given command in the shell\n"
-                       "time                   - Prints the current time\n"                                    
+               /*
+                       "time                   - Prints the current time\n"
                        "time <timestamp>       - Formats seconds since epoch into readable format\n"   
+               */
                        "set <variable> <value> - set a srfsh variable (e.g. set pretty_print true )\n"
                        "print <variable>               - 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 (file)
index 6497231..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#include <opensrf/transport_client.h>
-#include <opensrf/osrf_message.h>
-#include <opensrf/osrf_app_session.h>
-#include <time.h>
-#include <sys/timeb.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include <opensrf/utils.h>
-#include <opensrf/log.h>
-
-#include <signal.h>
-
-#include <stdio.h>
-#include <readline/readline.h>
-#include <readline/history.h>
-
-
-
-
-#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[]);