59 lines
2.8 KiB
C
59 lines
2.8 KiB
C
#ifndef SERVER_H
|
|
#define SERVER_H
|
|
|
|
#define _POSIX_C_SOURCE 200809L
|
|
|
|
#include <stdio.h>
|
|
#include <sys/socket.h>
|
|
#include <arpa/inet.h>
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include "errors.h"
|
|
#include <netinet/in.h>
|
|
#include "challenges.h"
|
|
|
|
#define MAX_LEN 100
|
|
#define PORT 8080
|
|
#define ADDRESS "127.0.0.1"
|
|
#define MAX_PEND_REQ 3
|
|
#define MAX_CHALLENGES 11
|
|
#define TIME_SLEEP 2
|
|
|
|
challenge_t challenges[] = {
|
|
{"Bienvenidos al TP3 y felicitaciones, ya resolvieron el primer acertijo.\n\n\
|
|
En este TP deberán finalizar el juego que ya comenzaron resolviendo los desafíos \
|
|
de cada nivel.\n\nAdemás tendrán que investigar otras preguntas para responder \
|
|
durante la defensa.\n\nEl desafío final consiste en crear un programa que se \
|
|
comporte igual que yo, es decir, que provea los mismos desafíos y que sea necesario \
|
|
hacer lo mismo para resolverlos. No basta con esperar la respuesta.\n\nAdemás, \
|
|
deberán implementar otro programa para comunicarse conmigo.\n\nDeberán estar atentos \
|
|
a los easter eggs.\n\nPara verificar que sus respuestas tienen el formato correcto \
|
|
respondan a este desafío con la palabra 'entendido\\n'", "¿Cómo descubrieron el protocolo, \
|
|
la dirección y el puerto para conectarse?", "entendido\n", NULL},
|
|
{"The Wire S1E5\n\n5295 888 6288", "¿Qué diferencias hay entre TCP y UDP y en qué casos \
|
|
conviene usar cada uno?", "itba\n", NULL},
|
|
{"https://ibb.co/tc0Hb6w", "¿El puerto que usaron para conectarse al server es el mismo \
|
|
que usan para mandar las respuestas? ¿Por qué?", "M4GFKZ289aku\n", NULL},
|
|
{"EBADF...", "¿Qué útil abstracción es utilizada para comunicarse con sockets? ¿se puede \
|
|
utilizar read(2) y write(2) para operar?", "fk3wfLCm3QvS\n", writeChallenge},
|
|
{"respuesta = strings:269", "¿Cómo garantiza TCP que los paquetes llegan en orden y no se \
|
|
pierden?", "too_easy\n", NULL},
|
|
{".data .bss .comment ? .shstrtab .symtab .strtab", "Un servidor suele crear un nuevo proceso \
|
|
o thread para atender las conexiones entrantes. ¿Qué conviene más?", ".RUN_ME\n", NULL},
|
|
{"Filter: ", "¿Cómo se puede implementar un servidor que atienda muchas conexiones sin usar \
|
|
procesos ni threads?", "K5n2UFfpFMUN\n", filterChallenge},
|
|
{"¿?", "¿Qué aplicaciones se pueden utilizar para ver el tráfico por la red?",
|
|
"BUmyYq5XxXGt\n", questionChallenge},
|
|
{"Latexme\n\nSi\n \\mathrm{d}y = u^v{\\cdot}(v'{\\cdot}\\ln{(u)}+v{\\cdot}\\frac{u'}{u})\n \
|
|
entonces y =", "sockets es un mecanismo de IPC. ¿Qué es más eficiente entre sockets y pipes?",
|
|
"u^v\n", NULL},
|
|
{"quine\n\n", "¿Cuáles son las características del protocolo SCTP?", "chin_chu_lan_cha\n", quineChallenge},
|
|
{"b gdbme y encontrá el valor mágico", "", "gdb_rules\n", gdbChallenge},
|
|
};
|
|
|
|
char too_easy = 'a';
|
|
|
|
void startChallenge();
|
|
|
|
#endif |