Commit Graph

15 Commits

Author SHA1 Message Date
Santiago Lo Coco 9561b7cac9 Fix more bugs
Co-authored-by: Ezequiel Bellver <ebellver@itba.edu.ar>
Co-authored-by: Juan Barmasch <jbarmasch@itba.edu.ar>
2022-06-21 07:57:03 -03:00
Santiago Lo Coco 7de6cbae60 Fix some bugs
Co-authored-by: Ezequiel Bellver <ebellver@itba.edu.ar>
Co-authored-by: Juan Barmasch <jbarmasch@itba.edu.ar>
2022-06-21 07:56:35 -03:00
Santiago Lo Coco b503ad1204 Finish server + client implementation (and fix bugs)
Co-authored-by: Ezequiel Bellver <ebellver@itba.edu.ar>
Co-authored-by: Juan Barmasch <jbarmasch@itba.edu.ar>
2022-06-20 20:55:57 -03:00
Santiago Lo Coco 9cac4bf50d Fix lots of bugs and add dissector
Co-authored-by: Ezequiel Bellver <ebellver@itba.edu.ar>
Co-authored-by: Juan Barmasch <jbarmasch@itba.edu.ar>
2022-06-18 16:50:57 -03:00
Santiago Lo Coco f8aa3e12e3 Fix bugs
Co-authored-by: Ezequiel Bellver <ebellver@itba.edu.ar>
Co-authored-by: Juan Barmasch <jbarmasch@itba.edu.ar>
2022-06-15 14:03:42 -03:00
Santiago Lo Coco 23ee49e49f Add socks5 authentication, UDP config, cmd (parser) and client
Co-authored-by: Ezequiel Bellver <ebellver@itba.edu.ar>
Co-authored-by: Juan Barmasch <jbarmasch@itba.edu.ar>
2022-06-14 15:57:53 -03:00
Santiago Lo Coco bbe23ecbd6 Add initial socks5nio proxy implementation
Co-authored-by: Ezequiel Bellver <ebellver@itba.edu.ar>
Co-authored-by: Juan Barmasch <jbarmasch@itba.edu.ar>
2022-06-07 18:53:58 -03:00
Santiago Lo Coco c2b410ab01 Apply patches
Co-authored-by: Ezequiel Bellver <ebellver@itba.edu.ar>
Co-authored-by: Juan Barmasch <jbarmasch@itba.edu.ar>
2022-05-31 10:09:18 -03:00
Juan F. Codagnone 8a8d30453f stm.c - pequeño motor de maquina de estados
La interfaz es muy simple, y no es un ADT.

Los estados se identifican con un número entero (típicamente proveniente de
un enum).

 - El usuario instancia un `struct state_machine'
 - Describe la maquina de estados:
     - describe el estado inicial en `initial'
     - todos los posibles estados en `states' (el orden debe coincidir con
       el identificador)
     - describe la cantidad de estados en `states'.

Provee todas las funciones necesitadas en un `struct fd_handler'
2022-05-31 09:49:53 -03:00
Juan F. Codagnone 15ca9ae0c3 selector.c - un muliplexor de entrada salida
Un selector permite manejar en un único hilo de ejecución la entrada salida
de file descriptors de forma no bloqueante.

Esconde la implementación final (select(2) / poll(2) / epoll(2) / ..)

El usuario registra para un file descriptor especificando:
 1. un handler: provee funciones callback que manejarán los eventos de
    entrada/salida
 2. un interés: que especifica si interesa leer o escribir.

Es importante que los handlers no ejecute tareas bloqueantes ya que demorará
el procesamiento del resto de los descriptores.

Si el handler requiere bloquearse por alguna razón (por ejemplo realizar
una resolución de DNS utilizando getaddrinfo(3)), tiene la posiblidad de
descargar el trabajo en un hilo notificará al selector que el resultado del
trabajo está disponible y se le presentará a los handlers durante
la iteración normal. Los handlers no se tienen que preocupar por la
concurrencia.

Dicha señalización se realiza mediante señales, y es por eso que al
iniciar la librería `selector_init' se debe configurar una señal a utilizar.

Todos métodos retornan su estado (éxito / error) de forma uniforme.
Puede utilizar `selector_error' para obtener una representación human
del estado. Si el valor es `SELECTOR_IO' puede obtener información adicional
en errno(3).

El flujo de utilización de la librería es:
 - iniciar la libreria `selector_init'
 - crear un selector: `selector_new'
 - registrar un file descriptor: `selector_register_fd'
 - esperar algún evento: `selector_iteratate'
 - destruir los recursos de la librería `selector_close'
2022-05-31 09:48:52 -03:00
Juan F. Codagnone aa1c136ad9 parser_utils.c -- factory de ciertos parsers típicos
Provee parsers reusables, como por ejemplo para verificar que
un string es igual a otro de forma case insensitive.
2022-05-31 09:43:37 -03:00
Juan F. Codagnone cfb8f2de05 parser.c -- pequeño motor para parsers/lexers.
El usuario describe estados y transiciones.
Las transiciones contienen una condición, un estado destino y acciones.

El usuario provee al parser con bytes y éste retona eventos que pueden
servir para delimitar tokens o accionar directamente.
2022-05-31 09:14:13 -03:00
Juan F. Codagnone 07f01d932f netutils.c -- pequeñas utilidades
Clasicas funciones de utilidad para imprimir de forma humana direcciones
IP, y escribir de forma bloquante asegurando que cada byte fue escrito.
2022-05-31 09:13:42 -03:00
Juan F. Codagnone b9ce264b75 buffer.c - buffer con acceso directo
Útil para I/O que requiere mantener puntero de lectura y de escritura.
2022-05-31 09:10:59 -03:00
Santiago Lo Coco a9b3a97798 Add initial files
Co-authored-by: Ezequiel Bellver <ebellver@itba.edu.ar>
Co-authored-by: Juan Barmasch <jbarmasch@itba.edu.ar>
2022-05-28 15:34:03 -03:00