/* el_init(): * Initialize editline and set default parameters. */ public EditLine * el_init(const char *prog, FILE *fin, FILE *fout, FILE *ferr) { EditLine *el = (EditLine *) el_malloc(sizeof(EditLine)); if (el == NULL) return (NULL); memset(el, 0, sizeof(EditLine)); el->el_infile = fin; el->el_outfile = fout; el->el_errfile = ferr; el->el_infd = fileno(fin); if ((el->el_prog = el_strdup(prog)) == NULL) { el_free(el); return NULL; } /* * Initialize all the modules. Order is important!!! */ el->el_flags = 0; if (term_init(el) == -1) { el_free(el->el_prog); el_free(el); return NULL; } (void) key_init(el); (void) map_init(el); if (tty_init(el) == -1) el->el_flags |= NO_TTY; (void) ch_init(el); (void) search_init(el); (void) hist_init(el); (void) prompt_init(el); (void) sig_init(el); (void) read_init(el); return (el); }
int main (int argc, char *argv[]) { char my_ip[STRING_IP_SIZE]; int my_port = MY_PORT; char host_ip[STRING_IP_SIZE]; int host_port; char *resource = NULL, *response; socket_t *socket_tcp; unsigned short command_op, op, len; struct prompt_t prompt; int client_error = 0; /* Obtener los argumentos */ if ( retrieve_arguments(argc, argv, &host_port, host_ip, &resource) ) { printf("(cliente) el uso debe ser --> cliente -l SLR -p PSLR -r REC\n"); return -1; } /* Obtiene la ip del host local */ if( get_my_ip(my_ip) ) { printf("(cliente) no se puede obtener ip local.\n"); return -1; } /* Localizacion del recurso en el SLR */ if ( (locate_resource_from_slr( my_port, my_ip, &host_port, host_ip, resource )) ) { printf("(cliente) no se ha localizado el recurso en el slr.\n"); return -1; } // strncpy(host_ip, "192.168.1.34", 15); // host_port = 7000; printf("(cliente) recurso localizado en servidor SPR [con IP: %s y puerto remoto: %d].\n", host_ip, host_port); socket_tcp = socket_create(my_port, my_ip, host_port, host_ip, SOCK_STREAM); if ( socket_connect(socket_tcp ) ) { printf("(cliente) connect error.\n"); return -1; } /* Establece el timeout de respuestas */ socket_setrcvtimeout(socket_tcp, TIMEOUT); printf ("(cliente) conexion establecida con servidor SPR [con IP: %s y puerto remoto: %d].\n", host_ip, host_port); printf ("(cliente) enviando solicitud de conexion.\n"); if ( conection_request( socket_tcp ) ) { printf("(cliente) solicitud de conexion rechazada.\n"); return -1; } prompt_init(); do { prompt_read_command(&prompt); command_op = cmdtous(prompt.command); if ( command_op == OP_UNKNOW ) { printf ("(cliente) orden desconocida.\n"); continue; } if( !(client_error = operation_request(socket_tcp, command_op, prompt.parameters)) ) { op = OP_RESPONSE( socket_readushort(socket_tcp) ); if ( socket_tcp->expire_timeout ) break; len = socket_readushort(socket_tcp); if ( socket_tcp->expire_timeout ) break; response = socket_readnchar(socket_tcp, len); if ( socket_tcp->expire_timeout ) break; if (op != command_op && op != ERROR) { printf ("(cliente) recibida respuesta desconocida.\n"); client_error = 1; } else prompt_print(NULL, response); free(response); } } while( command_op != OP_SALIR && !client_error ); prompt_destroy(); /* Cierra el socket */ socket_destroy(socket_tcp); printf ("(cliente) conexion cerrada con servidor SPR.\n"); return(0); }