int main( int argc, char **argv ) { mvcp_parser parser = NULL; mvcp_response response = NULL; char temp[ 1024 ]; int index = 1; atexit( cleanup ); if ( argc > 2 && !strcmp( argv[ 1 ], "-s" ) ) { printf( "Melted Client Instance\n" ); parser = mvcp_parser_init_remote( argv[ 2 ], 5250 ); response = mvcp_parser_connect( parser ); index = 3; } else { printf( "Melted Standalone Instance\n" ); parser = melted_parser_init_local( ); response = mvcp_parser_connect( parser ); } if ( response != NULL ) { /* process files on command lines before going into console mode */ for ( ; index < argc; index ++ ) { mvcp_response_close( response ); response = mvcp_parser_run( parser, argv[ index ] ); report( response ); } while ( response != NULL && prompt( temp, 1024 ) ) { mvcp_util_trim( mvcp_util_chomp( temp ) ); if ( !strcasecmp( temp, "BYE" ) ) { break; } else if ( strcmp( temp, "" ) ) { mvcp_response_close( response ); response = mvcp_parser_execute( parser, temp ); report( response ); } } } else { fprintf( stderr, "Unable to connect to a melted instance.\n" ); } printf( "\n" ); mvcp_parser_close( parser ); return 0; }
static void *mvcp_remote_status_thread( void *arg ) { mvcp_remote remote = arg; char temp[ 10240 ]; int length = 0; int offset = 0; mvcp_tokeniser tokeniser = mvcp_tokeniser_init( ); mvcp_notifier notifier = mvcp_parser_get_notifier( remote->parser ); mvcp_status_t status; int index = 0; mvcp_socket_write_data( remote->status, "STATUS\r\n", 8 ); temp[ 0 ] = '\0'; while ( !remote->terminated && ( length = mvcp_socket_read_data( remote->status, temp + offset, sizeof( temp ) - 1 ) ) >= 0 ) { if ( length < 0 ) break; temp[ length ] = '\0'; if ( strchr( temp, '\n' ) == NULL ) { offset = length; continue; } offset = 0; mvcp_tokeniser_parse_new( tokeniser, temp, "\n" ); for ( index = 0; index < mvcp_tokeniser_count( tokeniser ); index ++ ) { char *line = mvcp_tokeniser_get_string( tokeniser, index ); if ( line[ strlen( line ) - 1 ] == '\r' ) { mvcp_util_chomp( line ); mvcp_status_parse( &status, line ); mvcp_notifier_put( notifier, &status ); } else { strcpy( temp, line ); offset = strlen( temp ); } } } mvcp_notifier_disconnected( notifier ); mvcp_tokeniser_close( tokeniser ); remote->terminated = 1; return NULL; }