Distributed File System 1
Distributed file system in C
Loading...
Searching...
No Matches
enchufe.c File Reference
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "enchufe.h"
#include "log.h"

Functions

FD nuevo (void)
 Crea un file descriptor nuevo para un enchufe.
Receptaculo receptaculo (IPv4 ip, Port port)
 Crea un receptaculo.
Enchufe enchufa (IPv4 ip, Port port)
 Crea un enchufe sin abrir la conexion.
void conecta (Enchufe enchufe)
 Crea la conexion desde tu computadora hasta donde sea que este el enchufe.
void amarra (Enchufe enchufe)
 Amarra la direccion de IP que se le dio al enchufe, al file descriptor.
void escucha (Enchufe enchufe, size_t len)
 Le deja saber al enchufe cuantas conexiones se pueden hacer.
Enchufe acepta (Enchufe enchufe)
 Bloquea el thread hasta que un cliente se conecte.
void zumba (Enchufe enchufe, Buffer buf)
 Envia un buffer de bytes a un cliente.
size_t recibe (Enchufe enchufe, Buffer buf)
 Recibe un buffer de bytes de un cliente.
void desenchufa (Enchufe enchufe)
 Esta funcion se encarga de liberar los recursos que ocupan los echufes.
Buffer Port_serialize (Port port)
 Convierte un puerto a Byte's.
Port Port_deserialize (Buffer buf)
 Convierte un Buffer a un puerte.
IPv4 parse_address (const char *str)
 Esta funcion convierte un string que representa un IPv4 en un IPv4.
Buffer IPv4_serialize (IPv4 ip)
 Convierte un IPv4 a un Buffer.
IPv4 IPv4_deserialize (Buffer buf)
 Convierte un Buffer a un IPv4.
Buffer Tag_serialize (enum Tag tag)
 Serialize a Tag to a Buffer.
enum Tag Tag_deserialize (Buffer buf)
 Deserialize a Tag from a Buffer.
Buffer Command_serialize (Command command)
 Serialize a Command to a Buffer.
Command Command_deserialize (Buffer buf)
 Deserialize a Command from a Buffer.

Function Documentation

◆ acepta()

Enchufe acepta ( Enchufe enchufe)

Bloquea el thread hasta que un cliente se conecte.

Devuelve el enchufe del cliente para poder comunicarse con el cliente. Tienes que desenchufarlo cuando termines la direccion.

Parameters
enchufeel Enchufe que quieres que acepte la conexion
Returns
un Enchufe representando la conexion al otro dispositivo

◆ amarra()

void amarra ( Enchufe enchufe)

Amarra la direccion de IP que se le dio al enchufe, al file descriptor.

Hay casos donde no vas a querer que esten amarrados, como cuando no te importa la direccion que tendra un cliente conectandose a un servidor, por eso el default es que la funcion enchufa(ip, port) no amarre el file descriptor al puerto.

Parameters
enchufeel Enchufe que deseas amarrar

◆ Command_deserialize()

Command Command_deserialize ( Buffer buf)

Deserialize a Command from a Buffer.

Parameters
bufthe Buffer containing that Command
Returns
the Command inside that Buffer

◆ Command_serialize()

Buffer Command_serialize ( Command command)

Serialize a Command to a Buffer.

Parameters
commandthe Command that you want to serialize
Returns
a Buffer representing that Command

◆ conecta()

void conecta ( Enchufe enchufe)

Crea la conexion desde tu computadora hasta donde sea que este el enchufe.

Parameters
enchufeel Enchufe que deseas abrir

◆ desenchufa()

void desenchufa ( Enchufe enchufe)

Esta funcion se encarga de liberar los recursos que ocupan los echufes.

Parameters
enchufeel Enchufe que deseas desenchufa'r

◆ enchufa()

Enchufe enchufa ( IPv4 ip,
Port port )

Crea un enchufe sin abrir la conexion.

Parameters
ipel ip de la conexion
portel puerto de la conexion
Returns
un Enchufe que representa una conexion

◆ escucha()

void escucha ( Enchufe enchufe,
size_t len )

Le deja saber al enchufe cuantas conexiones se pueden hacer.

El default es que no se puedan hacer conexiones. Asi que si estas codificando un servidor, tienes que llamar esta funcion.

Parameters
enchufeel Enchufe que deseas que escuche
lenla cantidad de conexiones que quieres que escuche

◆ IPv4_deserialize()

IPv4 IPv4_deserialize ( Buffer buf)

Convierte un Buffer a un IPv4.

Parameters
bufel Buffer que quieres convertir
Returns
el IP que esta adentro del Buffer

◆ IPv4_serialize()

Buffer IPv4_serialize ( IPv4 ip)

Convierte un IPv4 a un Buffer.

Parameters
ipel IPv4 que quieres convertir
Returns
Un Buffer con el IP adentro

◆ nuevo()

FD nuevo ( void )

Crea un file descriptor nuevo para un enchufe.

Returns
File descriptor

◆ parse_address()

IPv4 parse_address ( Str str)

Esta funcion convierte un string que representa un IPv4 en un IPv4.

Parameters
strel string que quieres que se convierta a un IPv4
Returns
el IPv4 que ese string representa

◆ Port_deserialize()

Port Port_deserialize ( Buffer buf)

Convierte un Buffer a un puerte.

Parameters
bufel Buffer que quieres que se convierta
Returns
el puerto que ese Buffer representa

◆ Port_serialize()

Buffer Port_serialize ( Port port)

Convierte un puerto a Byte's.

El usuario deberá hacerle free a la memoria

Parameters
portel puerto que quieres que se convierta
Returns
el Buffer que representa ese puerto

◆ receptaculo()

Receptaculo receptaculo ( IPv4 ip,
Port port )

Crea un receptaculo.

Parameters
ipel IPv4 de la conexion
portel puerto en el IP donde se conectara
Returns
Un receptaculo representando esa conexion

◆ recibe()

size_t recibe ( Enchufe enchufe,
Buffer out_buf )

Recibe un buffer de bytes de un cliente.

Devuelve la cantidad de bytes que se leyeron. Si devuelve 0, entonces el cliente cerro la conexion. El usuario deberá hacerle free a la memoria.

Parameters
enchufeel Enchufe que estará recibiendo data
out_bufel Buffer que se estara llenando con data
Returns
la cantidad de Byte's que se leyeron

◆ Tag_deserialize()

enum Tag Tag_deserialize ( Buffer buf)

Deserialize a Tag from a Buffer.

Parameters
bufthe Buffer containing that Tag
Returns
the Tag inside that Buffer

◆ Tag_serialize()

Buffer Tag_serialize ( enum Tag tag)

Serialize a Tag to a Buffer.

Parameters
commandthe Tag that you want to serialize
Returns
a Buffer representing that Tag

◆ zumba()

void zumba ( Enchufe enchufe,
Buffer in_buf )

Envia un buffer de bytes a un cliente.

Parameters
enchufeel enchufe por donde quieres mandar los Byte's
in_bufel Buffer de Byte's que quieres enviar