SDTP 0.2
Simple Data Transfer Protocol
Classes | Macros | Functions | Variables
servidor_sdtp.c File Reference

Implementacao do Servidor SDTP. More...

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <pthread.h>
#include "sdtp.h"
Include dependency graph for servidor_sdtp.c:

Classes

struct  socket_sdtp
 

Macros

#define SDTP_WAIT_SYN   0x00
 Aguardando syn do 3-way handshake.
 
#define SDTP_WAIT_ACK   0x01
 Aguardando ack do 3-way handshake.
 
#define SDTP_ESTABLISHED   0x02
 Conexao estabelecida.
 
#define SDTP_CLOSED   0x03
 Conexao finalizada.
 
#define SDTP_ERROR_NONE   0x00
 Sem erro.
 
#define SDTP_ERROR_LOST_IN   0x01
 Perda de pacote na recepcao.
 
#define SDTP_ERROR_LOST_OUT   0x02
 Perda de pacote no envio.
 
#define SDTP_ERROR_SUM_IN   0x03
 Checksum errado no pacote recebido.
 
#define SDTP_ERROR_SUM_OUT   0x04
 Checksum errado no pacote enviado.
 
#define WINDOW()   (rand() % MSS)+1
 

Functions

struct socket_sdtpget_socket_sdtp (struct sockaddr_in *addr)
 
void remove_socket_sdtp (struct socket_sdtp *s)
 
void print_socket_list ()
 
char simerror ()
 
void corrupt (char *buf, int len)
 
int handle_socket_sdtp (struct socket_sdtp *s, struct sdtphdr *p)
 
int main (int argc, char *argv[])
 

Variables

struct socket_sdtphead = NULL
 
int numsockets = 0
 
uint16_t datasum = 0
 
char global_error
 

Detailed Description

Implementacao do Servidor SDTP.

Author
Joao Borges
Todo:
Implementar armazenamento do DEBUG do servidor em arquivos de LOG, permitindo que ele possa rodar em background sem problemas

Macro Definition Documentation

◆ WINDOW

#define WINDOW ( )    (rand() % MSS)+1

Define o calculo para geracao de um valor (nao nulo) para a janela

Function Documentation

◆ corrupt()

void corrupt ( char *  buf,
int  len 
)

Corrompe alguns bytes de buf, entre os bytes 0 e len passado

Parameters
bufPonteiro para a posicao inicial do buffer a ser corrompido
lenTamanho em bytes do buffer a ser corrompido

◆ get_socket_sdtp()

struct socket_sdtp * get_socket_sdtp ( struct sockaddr_in *  addr)

Retorna o ponteiro para um socket sdtp, de acordo com a tupla (ip, porta) recebida.

Se nao encontrar um socket sdtp para a tupla, cria um novo socket sdtp e o retorna.

Parameters
addrUm ponteiro para os dados recebidos do cliente.
Returns
Um ponteiro para um socket sdtp.

◆ handle_socket_sdtp()

int handle_socket_sdtp ( struct socket_sdtp s,
struct sdtphdr p 
)

Funcao responsavel por fazer o tratamento no pacote recebido.

Returns
1 quando for necessario reponder um pacote ao cliente, que sera realizado no main()
0 quando nao for necessario resposta, seja por causa de um erro real ou simulado

◆ main()

int main ( int  argc,
char *  argv[] 
)

Funcao principal do servidor

Nesta ocorre o looping infinito do servidor:

  • Recebendo pacotes de clientes
  • Passando para o tratador
  • Recebendo a resposta do tratador
  • Devolvendo ou nao uma resposta ao cliente

◆ print_socket_list()

void print_socket_list ( )

Imprime a lista de conexoes (sockets) ativas

◆ remove_socket_sdtp()

void remove_socket_sdtp ( struct socket_sdtp s)

Remove o socket SDTP ativo, liberando o seu espaco

Apos remover o socket SDTP, reorganiza a fila de conexoes ativas.

Parameters
sPonteiro para o socket que se deseja remover

◆ simerror()

char simerror ( )

Gerador de um erro aleatorio, para cada pacote recebido

O erro sera gerado conforme as probabilidades definidas para os Possiveis Erros Simulados.

Gera um erro simulado com as seguintes probabilidades (%)

  • SDTP_ERROR_NONE (0x00): 70
  • SDTP_ERROR_LOST_IN (0x01): 10
  • SDTP_ERROR_LOST_OUT (0x02): 05
  • SDTP_ERROR_SUM_IN (0x03): 05
  • SDTP_ERROR_SUM_OUT (0x04): 10

Exemplo da estrategia de geracao do erro, retornando o indice do vetor de probabilidades, conforme seja encontrado o valor gerado:

   0                        70        80      85      90       99
   [------------------------[---------[-------[-------[---------]
               NONE           LOSTin   LOSTout  SUMin   SUMout
See also
Possiveis erros simulados
Todo:
: Definir os valores das probabilidades de acordo com a realidade
Returns
Um erro a ser simulado.

Variable Documentation

◆ datasum

uint16_t datasum = 0

Armazena o checksum dos dados do arquivo lorem_ipsum.txt

Este valor sera comparado ao final da transmissao do cliente, para verificar a validade dos dados enviados.

◆ global_error

char global_error

Armazena o valor do erro simulado para cada recepcao de pacote

◆ head

struct socket_sdtp* head = NULL

Ponteiro para o inicio da lista de conexoes (estruturas) ativas

◆ numsockets

int numsockets = 0

Quantidade de sockets estabelecidos