1 #include "opensrf/transport_client.h"
3 #define SRFSH_SERVER "elroy"
4 #define SRFSH_PORT 5222
5 #define SRFSH_USER "admin"
6 #define COMMAND_BUFSIZE 12
9 char* prompt = "srfsh# ";
10 transport_client* client = NULL;
12 int parse_request( char* request );
13 int handle_router( char* words[] );
14 int parse_error( char* words[] );
15 int router_query_servers( char* server );
16 int srfsh_client_connect();
19 int main( int argc, char* argv[] ) {
23 memset(request, 0, 256);
26 client = client_init( SRFSH_SERVER , SRFSH_PORT );
27 if( ! client_connect( client, SRFSH_USER, "asdfjkjk", "srfsh", 5 ) ) {
28 fprintf(stderr, "Unable to connect to jabber server 'elroy' as 'admin'\n");
29 fprintf(stderr, "Most queries will be futile...\n" );
33 while( fgets( request, 255, stdin) ) {
36 request[strlen(request)-1] = '\0';
38 if( !strcmp(request, "exit") || !strcmp(request,"quit")) {
39 client_disconnect( client );
40 client_free( client );
45 if( !strcmp(request, "help") || !strcmp(request,"?"))
48 parse_request( request );
51 memset(request, 0, 300);
54 fprintf(stderr, "Exiting...\n[Ignore Segfault]\n");
59 int parse_error( char* words[] ) {
67 memset(buffer, 0, 256);
68 while( (current=words[i++]) ) {
69 strcat(buffer, current);
72 if( ! buffer || strlen(buffer) < 1 )
75 fprintf( stderr, "Command Incomplete or Not Recognized: %s\n", buffer );
81 int parse_request( char* request ) {
88 char* words[COMMAND_BUFSIZE];
89 memset(words,0,COMMAND_BUFSIZE);
91 char* cur_tok = strtok( request, " " );
96 while(cur_tok != NULL) {
98 cur_tok = strtok( NULL, " " );
101 // not sure why (strtok?), but this is necessary
102 memset( words + i, 0, COMMAND_BUFSIZE - i );
104 /* pass off to the top level command */
105 if( !strcmp(words[0],"router") )
106 ret_val = handle_router( words );
109 return parse_error( words );
116 int handle_router( char* words[] ) {
124 if( !strcmp(words[1],"query") ) {
126 if( words[2] && !strcmp(words[2],"servers") ) {
127 for(i=3; i < COMMAND_BUFSIZE - 3 && words[i]; i++ ) {
128 router_query_servers( words[i] );
141 int router_query_servers( char* router_server ) {
143 if( ! router_server || strlen(router_server) == 0 )
148 sprintf(rbuf,"router@%s/router", router_server );
150 transport_message* send =
151 message_init( "servers", NULL, NULL, rbuf, NULL );
152 message_set_router_info( send, NULL, NULL, NULL, "query", 0 );
154 client_send_message( client, send );
155 message_free( send );
157 transport_message* recv = client_recv( client, -1 );
159 fprintf(stderr, "NULL message received from router\n");
162 "---------------------------------------------------------------------------------\n"
163 "Received from 'server' query on %s\n"
164 "---------------------------------------------------------------------------------\n"
165 "original reg time | latest reg time | last used time | class | server\n"
166 "---------------------------------------------------------------------------------\n"
168 "---------------------------------------------------------------------------------\n"
169 , router_server, recv->body );
171 message_free( recv );
179 "---------------------------------------------------------------------------------\n"
181 "---------------------------------------------------------------------------------\n"
182 "router query servers <server1 [, server2, ...]>\n"
183 "router register <class>\n"
184 "---------------------------------------------------------------------------------\n"