/*********************************************************/
/* Autori: */
/* Pelosi Giovanni, 346787, pelosi */
/* Pesce Agatino, 456868, pesce */
/* */
/* Progetto: Sistemi 2: biblioteca */
/* Data Pr.: 9/2/96 */
/* File: message.h */
/* */
/*********************************************************/
#ifndef _MESSAGE_H
#define _MESSAGE_H
#include "libro.h"
#include "system.h"
/*#include "socket.h"*/
typedef char Biblio_t[20];
typedef enum MessageType_tag
{
MsgTypeQuery = 'A', /* richiesta informazioni */
MsgTypeReply = 'B', /* risposta da server a client o server */
MsgTypeControl = 'C', /* connessione iniziale tra server */
MsgTypeError = 'X', /* messaggio di lunghezza errata */
MsgTypeEof = 'Z' /* fine lettura per chiusura socket */
} MessageType_t;
typedef struct MessageQuery_tag
{
char NoForward;
Libro_t Libro; /* struttura dati query/riposte */
} MessageQuery_t;
typedef struct MessageReply_tag
{
Biblio_t Biblio; /* nome biblioteca */
Libro_t Libro; /* struttura dati query/riposte */
} MessageReply_t;
typedef struct MessageControl_tag /* connessione iniziale tra server */
{
struct sockaddr_in Sin;
} MessageControl_t;
typedef union MessageBody_tag /* corpo messaggio */
{
MessageQuery_t Query;
MessageReply_t Reply;
MessageControl_t Control;
} MessageBody_t;
typedef struct Message_tag /* messaggio generico */
{
MessageType_t Type; /* tipo messaggio */
MessageBody_t Body; /* corpo messaggio */
} Message_t;
typedef char MessageText_t[1024]; /* testo messaggio completo (>= a sizeof(Message_t))*/
int PutRawLibro(char* t, Libro_t* Msg);
int GetRawLibro(Libro_t* Msg, char* t);
int PutMsgControl(int Socket, struct sockaddr_in* Sin);
int GetMsgControl(MessageControl_t* Msg ,char* p);
int PutMsgQuery(int Socket, char NoForward, Libro_t* Libro);
int GetMsgQuery(MessageQuery_t* Msg, char* t);
int PutMsgNil(int Socket);
int PutMsgReply(int Socket, Biblio_t Biblio, Libro_t* Libro);
int GetMsgReply(MessageReply_t* Msg, char* t);
int GetMsgText( Message_t* Msg, MessageText_t Text,int ReadLen);
int WriteMessage( int Socket );
int ReadMessage( int Socket, Message_t* Msg );
int ClPutMsgQuery(MessageText_t Text, char NoForward, Libro_t* Libro);
int ClGetMsgReply(MessageReply_t* Msg, char* t);
int SizeRawLibro(void);
int SizeMsgControl(void);
int SizeMsgQuery(void);
int SizeMsgReply(void);
int MessageLen(int Type);
#endif