AntonioVillanueva

Hola navegador utilizando la libreria Libmicrohttpd y curl

Dec 17th, 2018
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.29 KB | None | 0 0
  1. /* libmicrohttpd ejemplo de un holanavegador al  escribir ip:8888  en el navegador
  2.  * print_out_key ofrece un analisis de la conexion en el terminal del servidor
  3.  * https://www.gnu.org/software/libmicrohttpd/
  4. cc hellobrowser.c -o hellobrowser -I$PATH_TO_LIBMHD_INCLUDES -L$PATH_TO_LIBMHD_LIBS -lmicrohttpd
  5. */
  6. #include <sys/types.h>
  7. #ifndef _WIN32
  8. #include <sys/select.h>
  9. #include <sys/socket.h>
  10. #else
  11. #include <winsock2.h>
  12. #endif
  13. #include <string.h>
  14. #include <microhttpd.h>
  15. #include <stdio.h>
  16.  
  17. //Puesto donde apunta el navegador
  18. #define PORT 8888
  19. /*******************************************************************************************************************************/
  20. //Analisis de la conexion web  por terminal en el servidor
  21. int print_out_key(void *cls,enum MHD_ValueKind kind,const char *key,const char *value){
  22.     printf ("%s : %s \n",key,value);
  23.     return MHD_YES;
  24. }
  25. /*******************************************************************************************************************************/
  26. int pagina_respuesta(struct MHD_Connection *connection,const char *pagina){
  27.     return MHD_YES;
  28. }
  29.  
  30. /*******************************************************************************************************************************/
  31. //Funcion respuesta al navegador ,tarea principal del servidor web
  32. static int
  33. answer_to_connection (void *cls, struct MHD_Connection *connection,const char *url, const char *method,const char *version, const char *upload_data,
  34. size_t *upload_data_size, void **con_cls)
  35. {
  36.    
  37.     MHD_get_connection_values(connection,MHD_HEADER_KIND,&print_out_key,NULL);//Analisis de la conexion web por terminal en servidor , no necesario
  38.     //La pagina web en cuestion
  39.     const char *page = "<html><body>Hola , navegador   test  de la  libreria libmicrohttpd!</body></html>";
  40.    
  41.     //Crea la respuesta con nuestros datos anteriores , de la pagina
  42.     struct MHD_Response *response;
  43.     int ret;
  44.     response =MHD_create_response_from_buffer (strlen (page), (void *) page,MHD_RESPMEM_PERSISTENT);
  45.  
  46.    
  47.     //Finalmente, el paquete se destruye y se devuelve el valor de retorno de  cola MHD YES o MHD NO in caso de ok o fallo
  48.     //Cada respuesta HTTP se acompana del codigo de estado "OK" aqui
  49.     ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  50.     MHD_destroy_response (response);
  51.     return ret;
  52. }
  53.  
  54.  
  55. /*******************************************************************************************************************************/
  56. int main (int argc, char *argv[]){
  57.     //Arrancamos el demonio servidor actual que escucha en el puerto PORT
  58.     struct MHD_Daemon *daemon;
  59.    
  60.     /*
  61.      *1e.parametro es una de los tres modos de operacion , aquifunciona en un hilo, "thread" paralelo  y gestiona todas las conexiones
  62.     * de entrada en el msimo "thread"
  63.     * Se permite la conexion a todos los clientes sin tener en cuenta su localizacion o nombre 3er y 4° parametro NULL
  64.     * El parametro 5   &answer_to_connection es la direccion de la funcion que queremos arrancar
  65.     */
  66.  
  67.     daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL, &answer_to_connection, argc==1 ? NULL : argv[1], MHD_OPTION_END);  
  68.  
  69.     if (NULL == daemon) {return 1;}
  70.    
  71.     (void) getchar ();//Mientras que el servidor funciona en su propio "thread" espera una tecla para salir stop_daemon
  72.    
  73.     MHD_stop_daemon (daemon);
  74.     return 0;
  75. }
Add Comment
Please, Sign In to add comment