libmsg/lib/msg.h

517 lines
27 KiB
C
Raw Normal View History

2000-07-28 17:34:22 +02:00
#ifndef _LIBMSG
#define _LIBMSG
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/time.h>
#include <ver.h>
#include <node.h>
#include <shmem.h>
#include <datastr.h>
/* Code retour des fonctions constituant l'API */
typedef long MSGT_Status;
#define MSGS_OK DSS_OK /* La fonction s'est correctement ex<65>cut<75>e et a produit un r<>sultat */
#define MSGS_KO DSS_KO /* La fonction s'est correctement ex<65>cut<75>e mais n'a pas produit de r<>sultat */
#define MSGS_YES MSGS_OK /* R<>sultat bool<6F>en positif */
#define MSGS_NO MSGS_KO /* R<>sultat bool<6F>en n<>gatif */
#define MSGS_ERRMEM DSS_ERRMEM /* Probl<62>me d'allocation m<>moire */
#define MSGS_ERRAPI DSS_ERRAPI /* Utilisation incorrecte des API */
#define MSGS_ERRSHM DSS_ERRSHM /* Probl<62>me relatif aux segments de m<>moire partag<61>e */
#define MSGS_ERRSEM DSS_ERRSEM /* Probl<62>me relatif <20> l'utilisation des s<>maphores */
#define MSGS_ERRSIG DSS_ERRSIG /* Op<4F>ration sur s<>maphore interrompue par un signal */
#define MSGS_ERRDLL DSS_ERRDLL /* Probl<62>me de chargement dynamique de librairie */
#define MSGS_ERRNOWAIT -7 /* Op<4F>ration sur s<>maphore impossible et le mode d'op<6F>ration est sans attente */
#define MSG_ERROR(s) ((s) < 0) /* Tous les codes retour n<>gatifs correspondent <20> des erreurs */
/* Codes retour sp<73>cifiques pour la r<>ception de messages */
#define MSGS_NO_MSG 5
#define MSGS_BAD_TYPE 6
/* Indicateurs */
typedef int MSGT_Flags;
/* Flags de debug sur l'ouverture de la librairie */
#define MSGD_DEBUG_NONE SMD_DEBUG_NONE /* pour n'afficher aucun message g<>n<EFBFBD>r<EFBFBD> par les diverses librairies */
#define MSGD_DEBUG SMD_DEBUG /* pour afficher les messages g<>n<EFBFBD>r<EFBFBD>s par la librairie */
#define MSGD_DEBUG_ALL SMD_DEBUG_ALL /* pour afficher les messages g<>n<EFBFBD>r<EFBFBD>s par toutes les librairies sous-jacentes */
#define MSGD_DEBUG_MSK (MSGD_DEBUG & MSGD_DEBUG_ALL)
/* Flags d'ouverture et de fermeture des diff<66>rentes ressources de la librairie */
#define MSGD_OPEN SMD_OPEN
#define MSGD_CREATE SMD_CREATE
#define MSGD_MSK_OPEN(a) (MSGD_OPEN & (a))
#define MSGD_MSK_CREATE(a) (MSGD_CREATE & (a))
#define MSGD_CLOSE SMD_CLOSE
#define MSGD_DESTROY SMD_DESTROY
/* Flags de r<>ception de message */
#define MSGD_NO_WAIT 1 /* R<>ception sans attente si aucun message */
#define MSGD_WAIT 2 /* R<>ception avec attente */
/* Flags de verrouillage d'un port de messages */
#define MSGD_READ 1 /* verrou partag<61> */
#define MSGD_WRITE 2 /* verrou exclusif */
#define MSGD_MSK_READ(a) (MSGD_READ & (a))
#define MSGD_MSK_WRITE(a) (MSGD_WRITE & (a))
#define MSGD_UNLIMITED 0
/* Notion de port de messages */
typedef struct {
char Name [50]; /* Nom du port de messages */
size_t Size; /* Taille limite du port en nombre de messages */
int ListenSemID; /* s<>maphore permettant l'<27>coute du port */
int LockSemID; /* s<>maphore permettant le verrouillage du port */
NDT_Root * SemList; /* Liste des s<>maphores des listes de ports qui sont <20> l'<27>coute du port */
NDT_Root * MsgQueue; /* File d'attente des messages */
} MSGT_Port;
/* Quelques ports de message pr<70>d<EFBFBD>finis */
#define MSGD_DEFAULT_PORT_NAME "DEFAULT_PORT"
#define MSGD_SYSTEM_PORT_NAME "SYSTEM_PORT"
#define MSGD_SUPERVISOR_PORT_NAME "SUPERVISOR_PORT"
/* Notion de liste de ports de messages */
typedef struct {
NDT_Root * Root; /* Liste de ports de messages */
int ListenSemID; /* Identifiant du s<>maphore pour l'<27>coute de la liste de ports */
} MSGT_PortList;
/* Notion de messages */
typedef struct {
char From [50]; /* Nom du port d'<27>coute de l'initiateur du message */
char Via [50]; /* Nom du port d'<27>coute du dernier envoyeur du message */
char To [50]; /* Nom du port du dernier envoi du message */
unsigned int Type; /* Type du message */
int Priority; /* Priorit<69> du message */
size_t Size; /* Taille des donn<6E>es du message */
void * Data; /* Donn<6E>es du message */
char * Swap; /* Nom du fichier de swap dans lequel est stock<63> le message */
} MSGT_Message;
#define MSGD_NO_TYPE 0
/*
Types de message :
Les types de message vont de 1 <EFBFBD> 255 et sont partag<EFBFBD>s en 2 plages :
- messages syst<EFBFBD>mes pr<EFBFBD>d<EFBFBD>finis de 1 <EFBFBD> 32
- messages utilisateur de 33 <EFBFBD> 255
*/
#define MSGD_NO_TYPE 0
#define MSGD_NB_SYSTEM_MESSAGE 32
#define MSGD_IS_SYSTEM(t) ((t) != MSGD_NO_TYPE && (t) < MSGD_NB_SYSTEM_MESSAGE)
#define MSGD_IS_SYSTEM_REQUEST(t) ((t) != MSGD_NO_TYPE && (t) < MSGD_NB_SYSTEM_MESSAGE && (t) % 2 == 1)
#define MSGD_IS_SYSTEM_REPLY(t) ((t) != MSGD_NO_TYPE && (t) < MSGD_NB_SYSTEM_MESSAGE && (t) % 2 == 0)
#define MSGD_SYSTEM_PING_REQUEST 1
#define MSGD_SYSTEM_PING_REPLY 2
#define MSGD_SYSTEM_STOP_REQUEST 3
#define MSGD_SYSTEM_STOP_REPLY 4
#define MSGD_SYSTEM_CONTINUE_REQUEST 5
#define MSGD_SYSTEM_CONT_REPLY 6
#define MSGD_SYSTEM_RESTART_REQUEST 7
#define MSGD_SYSTEM_RESTART_REPLY 8
#define MSGD_SYSTEM_SHUTDOWN_REQUEST 9
#define MSGD_SYSTEM_SHUTDOWN_REPLY 10
#define MSGD_SYSTEM_STATUS_REQUEST 11
#define MSGD_SYSTEM_STATUS_REPLY 12
#define MSGD_SYSTEM_INFO_REQUEST 13
#define MSGD_SYSTEM_INFO_REPLY 14
#define MSGD_SYSTEM_TRACEON_REQUEST 15
#define MSGD_SYSTEM_TRACEON_REPLY 16
#define MSGD_SYSTEM_TRACEOFF_REQUEST 17
#define MSGD_SYSTEM_TRACEOFF_REPLY 18
/* Type de message syst<73>me g<>n<EFBFBD>rique (utile pour ne r<>ceptionner que les messages syst<73>me) */
#define MSGD_SYSTEM_GENERIC MSGD_NB_SYSTEM_MESSAGE
/* Quelques types de messages utilisateur pr<70>d<EFBFBD>finis */
#define MSGD_USER_TYPE1 MSGD_NB_SYSTEM_MESSAGE + 1
#define MSGD_USER_TYPE2 MSGD_NB_SYSTEM_MESSAGE + 2
#define MSGD_DEFAULT_TYPE MSGD_USER_TYPE1
/*
Priorit<EFBFBD>s des messages :
Les priorit<EFBFBD>s vont de -128 (la plus elev<EFBFBD>e) <EFBFBD> 127 (plus basse) divis<EFBFBD>es en 2 plages :
- Priorit<EFBFBD>s des messages syst<EFBFBD>me : [-128, -65] U [+65, +127]
- Priorit<EFBFBD>s des messages utilisateur : [-64, +64]
*/
#define MSGD_SYSTEM_HIGH_PRIORITY -128
#define MSGD_SYSTEM_LOW_PRIORITY 127
#define MSGD_USER_HIGH_PRIORITY -64
#define MSGD_USER_NORMAL_PRIORITY 0
#define MSGD_USER_LOW_PRIORITY 64
#define MSGD_DEFAULT_PRIORITY MSGD_USER_NORMAL_PRIORITY
/* Types de configuration */
typedef int MSGT_Config;
#define MSGD_CONFIG_SIZE 1 /* Configuration de la taille d'un port de messages */
#define MSGD_CONFIG_MSGQUEUE 2 /* Choix du type de structure pour la queue de message d'un port de messages */
#define MSGD_CONFIG_TYPE 3 /* Configuration du type d'un message */
#define MSGD_CONFIG_PRIORITY 4 /* Configuration de la priorit<69> d'un message */
char MSG_Error_Msg [512];
/* Base de la librairie LIBMSG */
SMT_Heap * MSG_Base_Heap;
SMT_Heap * MSG_Message_Heap;
typedef struct {
NDT_Root * Port_List; /* Liste de tous les ports de messages */
} MSGT_Base;
MSGT_Base * MSG_Base;
/* Contenu d'un message de type PING_REPLY */
typedef struct {
struct timeval Snd1;
struct timeval Rcv1;
struct timeval Snd2;
struct timeval Rcv2;
} MSGT_PingData;
/* D<>finition des alias de l'API */
#ifndef MSG_MODE
#define MSG_MODE 0
#endif
#if MSG_MODE == 1
/* Utilisation des API sans v<>rification des arguments */
# define MSG_Library_Open MSG_Library_Open_I
# define MSG_Library_Signal MSG_Library_Signal_I
# define MSG_Library_IsOpen MSG_Library_IsOpen_I
# define MSG_Library_Context_Set MSG_Library_Context_Set_I
# define MSG_Library_Context_Get MSG_Library_Context_Get_I
# define MSG_Library_Close MSG_Library_Close_I
# define MSG_Library_Stderr_Set MSG_Library_Stderr_Set_I
# define MSG_Library_Dump MSG_Library_Dump_I
# define MSG_Port_Exist MSG_Port_Exist_I
# define MSG_Port_Open MSG_Port_Open_I
# define MSG_Port_Config MSG_Port_Config_I
# define MSG_Port_Lock MSG_Port_Lock_I
# define MSG_Port_Unlock MSG_Port_Unlock_I
# define MSG_Port_Close MSG_Port_Close_I
# define MSG_PortList_Open MSG_PortList_Open_I
# define MSG_PortList_Port_Add MSG_PortList_Port_Add_I
# define MSG_PortList_Port_Remove MSG_PortList_Port_Remove_I
# define MSG_PortList_Close MSG_PortList_Close_I
# define MSG_PortList_Listen MSG_PortList_Listen_I
# define MSG_Message_Alloc MSG_Message_Alloc_I
# define MSG_Message_Config MSG_Message_Config_I
# define MSG_Message_Free MSG_Message_Free_I
# define MSG_Message_Send MSG_Message_Send_I
# define MSG_Message_Receive MSG_Message_Receive_I
# define MSG_Message_Reply MSG_Message_Reply_I
# define MSG_Message_Return MSG_Message_Return_I
#else
/* Utilisation avec v<>rification des arguments */
# define MSG_Library_Open MSG_Library_Open_C
# define MSG_Library_IsOpen MSG_Library_IsOpen_C
# define MSG_Library_Signal MSG_Library_Signal_C
# define MSG_Library_Context_Set MSG_Library_Context_Set_C
# define MSG_Library_Context_Get MSG_Library_Context_Get_C
# define MSG_Library_Close MSG_Library_Close_C
# define MSG_Library_Stderr_Set MSG_Library_Stderr_Set_C
# define MSG_Library_Dump MSG_Library_Dump_C
# define MSG_Port_Exist MSG_Port_Exist_C
# define MSG_Port_Open MSG_Port_Open_C
# define MSG_Port_Config MSG_Port_Config_C
# define MSG_Port_Lock MSG_Port_Lock_C
# define MSG_Port_Unlock MSG_Port_Unlock_C
# define MSG_Port_Close MSG_Port_Close_C
# define MSG_PortList_Open MSG_PortList_Open_C
# define MSG_PortList_Port_Add MSG_PortList_Port_Add_C
# define MSG_PortList_Port_Remove MSG_PortList_Port_Remove_C
# define MSG_PortList_Close MSG_PortList_Close_C
# define MSG_PortList_Listen MSG_PortList_Listen_C
# define MSG_Message_Alloc MSG_Message_Alloc_C
# define MSG_Message_Config MSG_Message_Config_C
# define MSG_Message_Free MSG_Message_Free_C
# define MSG_Message_Send MSG_Message_Send_C
# define MSG_Message_Receive MSG_Message_Receive_C
# define MSG_Message_Reply MSG_Message_Reply_C
# define MSG_Message_Return MSG_Message_Return_C
#endif
/*------------------------------------------------------------------------------*/
/* Permet d'indiquer <20> la librairie qu'un signal a <20>t<EFBFBD> re<72>u. */
/* */
/* NB : cette fonction sera appel<65>e par l'utilisateur pour <20>viter que le */
/* processus se bloque sur une attente de message malgr<67> la r<>ception de signal */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Library_Signal_I ( void );
MSGT_Status MSG_Library_Signal_C ( void );
/*------------------------------------------------------------------------------*/
/* Ouverture de la librairie */
/*------------------------------------------------------------------------------*/
/* (I) Instance : num<75>ro de l'instance de la librairie */
/* (I) Context : contexte d'utilisation de la librairie */
/* (I) Open_Mode : mode d'ouverture de la librairie */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Library_Open_I ( int Instance, const char * Context, MSGT_Flags Open_Mode );
MSGT_Status MSG_Library_Open_C ( int Instance, const char * Context, MSGT_Flags Open_Mode );
/*------------------------------------------------------------------------------*/
/* Teste si la librairie a <20>t<EFBFBD> ouverte */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Library_IsOpen_I ( void );
MSGT_Status MSG_Library_IsOpen_C ( void );
/*------------------------------------------------------------------------------*/
/* Changement de contexte d'utilisation de la librairie */
/*------------------------------------------------------------------------------*/
/* (I) Context : nom du nouveau contexte */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Library_Context_Set_I (const char * Context);
MSGT_Status MSG_Library_Context_Set_C (const char * Context);
/*------------------------------------------------------------------------------*/
/* R<>cup<75>ration du nom du contexte utilis<69>e */
/*------------------------------------------------------------------------------*/
/* (O) Context : adresse du nom du contexte utilis<69> */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Library_Context_Get_I (char ** Context);
MSGT_Status MSG_Library_Context_Get_C (char ** Context);
/*------------------------------------------------------------------------------*/
/* Fermeture de la librairie */
/*------------------------------------------------------------------------------*/
/* (I) Close_Mode : mode de fermeture de la librairie */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Library_Close_I ( MSGT_Flags Close_Mode );
MSGT_Status MSG_Library_Close_C ( MSGT_Flags Close_Mode );
/*------------------------------------------------------------------------------*/
/* D<>finition de la sortie standard des messages d'erreur de la librairie */
/*------------------------------------------------------------------------------*/
/* (I) Out : flux de sortie des messages d'erreur */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Library_Stderr_Set_I ( FILE * Out );
MSGT_Status MSG_Library_Stderr_Set_C ( FILE * Out );
/*------------------------------------------------------------------------------*/
/* Affichage des ressources de la librairie */
/*------------------------------------------------------------------------------*/
/* (I) Out : Flux de sortie de l'affichage */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Library_Dump_I ( FILE * Out );
MSGT_Status MSG_Library_Dump_C ( FILE * Out );
/*------------------------------------------------------------------------------*/
/* Teste l'existence d'un port de messages */
/*------------------------------------------------------------------------------*/
/* (I) Name : nom du port de messages */
/* (O) Port : adresse d'un pointeur sur le port de messages */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Port_Exist_I ( const char *, MSGT_Port ** );
MSGT_Status MSG_Port_Exist_C ( const char *, MSGT_Port ** );
/*------------------------------------------------------------------------------*/
/* Cr<43>ation/ouverture d'un port de messages */
/*------------------------------------------------------------------------------*/
/* (I) Name : nom du port de messages */
/* (O) Port : adresse d'un pointeur sur le port de messages */
/* (I) Open_Mode : mode d'ouverture du port de messages */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Port_Open_I ( const char * Name, MSGT_Port ** Port, MSGT_Flags Open_Mode );
MSGT_Status MSG_Port_Open_C ( const char * Name, MSGT_Port ** Port, MSGT_Flags Open_Mode );
/*------------------------------------------------------------------------------*/
/* Configuration d'un port de messages */
/*------------------------------------------------------------------------------*/
/* (I) Port : pointeur sur le port de messages */
/* (I) Tag : type de configuration */
/* (I) ... : donn<6E>es de configuration */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Port_Config_I ( MSGT_Port * Port, MSGT_Config Tag, ... );
MSGT_Status MSG_Port_Config_C ( MSGT_Port * Port, MSGT_Config Tag, ... );
/*------------------------------------------------------------------------------*/
/* Verrouillage d'un port de messages */
/*------------------------------------------------------------------------------*/
/* (I) Port : pointeur sur le port de messages */
/* (I) Mode : type de verrouillage */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Port_Lock_I ( MSGT_Port * Port, MSGT_Flags Mode );
MSGT_Status MSG_Port_Lock_C ( MSGT_Port * Port, MSGT_Flags Mode );
/*------------------------------------------------------------------------------*/
/* D<>verrouillage d'un port de messages */
/*------------------------------------------------------------------------------*/
/* (I) Port : pointeur sur le port de messages */
/* (I) Mode : type de verrou <20> enlever */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Port_Unlock_I ( MSGT_Port * Port, MSGT_Flags Mode );
MSGT_Status MSG_Port_Unlock_C ( MSGT_Port * Port, MSGT_Flags Mode );
/*------------------------------------------------------------------------------*/
/* Fermeture d'un port de messages */
/*------------------------------------------------------------------------------*/
/* (I) Port : pointeur sur le port de messages */
/* (I) Close_Mode : mode de fermeture du port de messages */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Port_Close_I ( MSGT_Port * Port, MSGT_Flags Close_Mode );
MSGT_Status MSG_Port_Close_C ( MSGT_Port * Port, MSGT_Flags Close_Mode );
/*------------------------------------------------------------------------------*/
/* Cr<43>ation/ouverture d'une liste de ports de messages */
/*------------------------------------------------------------------------------*/
/* (O) PortList : adresse d'un pointeur sur la liste de ports de messages */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_PortList_Open_I ( MSGT_PortList ** PortList );
MSGT_Status MSG_PortList_Open_C ( MSGT_PortList ** PortList );
/*------------------------------------------------------------------------------*/
/* Ajout d'un port de messages <20> une liste de ports */
/*------------------------------------------------------------------------------*/
/* (I) PortList : pointeur sur la liste de ports de messages */
/* (I) Port : pointeur sur un port de messages */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_PortList_Port_Add_I ( MSGT_PortList * PortList, MSGT_Port * Port );
MSGT_Status MSG_PortList_Port_Add_C ( MSGT_PortList * PortList, MSGT_Port * Port );
/*------------------------------------------------------------------------------*/
/* Retrait d'un port de messages d'une liste de ports */
/*------------------------------------------------------------------------------*/
/* (I) PortList : pointeur sur la liste de ports de messages */
/* (I) Port : pointeur sur un port de messages */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_PortList_Port_Remove_I ( MSGT_PortList * PortList, MSGT_Port * Port );
MSGT_Status MSG_PortList_Port_Remove_C ( MSGT_PortList * PortList, MSGT_Port * Port );
/*------------------------------------------------------------------------------*/
/* Suppressin d'une liste de ports de messages */
/*------------------------------------------------------------------------------*/
/* (I) PortList : pointeur sur la liste de ports de messages */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_PortList_Close_I ( MSGT_PortList * PortList );
MSGT_Status MSG_PortList_Close_C ( MSGT_PortList * PortList );
/*------------------------------------------------------------------------------*/
/* Ecoute d'une liste de ports de messages */
/*------------------------------------------------------------------------------*/
/* (I) PortList : pointeur sur une liste de ports de messages */
/* (I) Type : type du message <20> r<>cup<75>rer */
/* (O) Msg : adresse d'un pointeur sur le message <20> recevoir */
/* (I) Flags : param<61>tres de r<>ception */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_PortList_Listen_I ( MSGT_PortList * PortList, unsigned int Type, MSGT_Message ** Msg, MSGT_Flags Flags);
MSGT_Status MSG_PortList_Listen_C ( MSGT_PortList * PortList, unsigned int Type, MSGT_Message ** Msg, MSGT_Flags Flags);
/*------------------------------------------------------------------------------*/
/* Cr<43>ation d'un message */
/*------------------------------------------------------------------------------*/
/* (O) Msg : adresse d'un pointeur sur le message */
/* (I) Size : taille en octets des donn<6E>es du message */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Message_Alloc_I ( MSGT_Message ** Msg, size_t Size );
MSGT_Status MSG_Message_Alloc_C ( MSGT_Message ** Msg, size_t Size );
/*------------------------------------------------------------------------------*/
/* Configuration d'un message */
/*------------------------------------------------------------------------------*/
/* (I) Msg : pointeur sur un message */
/* (I) Tag : type de configuration */
/* (I) ... : donn<6E>es de configuration */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Message_Config_I ( MSGT_Message * Msg, MSGT_Config Tag, ... );
MSGT_Status MSG_Message_Config_C ( MSGT_Message * Msg, MSGT_Config Tag, ... );
/*------------------------------------------------------------------------------*/
/* Destruction d'un message */
/*------------------------------------------------------------------------------*/
/* (I) Msg : pointeur sur le message */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Message_Free_I ( MSGT_Message * Msg );
MSGT_Status MSG_Message_Free_C ( MSGT_Message * Msg );
/*------------------------------------------------------------------------------*/
/* Envoi d'un message dans un port de messages */
/*------------------------------------------------------------------------------*/
/* (I) From : nom du port de messages de l'envoyeur */
/* (I) To : pointeur sur le port de messages destinataire */
/* (I) Msg : pointeur sur le message */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Message_Send_I ( const char * From, MSGT_Port * To, MSGT_Message * Msg );
MSGT_Status MSG_Message_Send_C ( const char * From, MSGT_Port * To, MSGT_Message * Msg );
/*------------------------------------------------------------------------------*/
/* R<>ception d'un message dans un port de messages */
/*------------------------------------------------------------------------------*/
/* (I) Port : pointeur sur le port de messages */
/* (I) Type : type du message <20> r<>cup<75>rer */
/* (O) Msg : adresse d'un pointeur sur le message <20> recevoir */
/* (I) Flags : param<61>tres de r<>ception */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Message_Receive_I ( MSGT_Port * Port, unsigned int Type, MSGT_Message ** Msg, MSGT_Flags Flags );
MSGT_Status MSG_Message_Receive_C ( MSGT_Port * Port, unsigned int Type, MSGT_Message ** Msg, MSGT_Flags Flags );
/*------------------------------------------------------------------------------*/
/* Retour <20> l'envoyeur d'un message */
/*------------------------------------------------------------------------------*/
/* (I) Msg : pointeur sur le message */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Message_Reply_I ( MSGT_Message * Msg );
MSGT_Status MSG_Message_Reply_C ( MSGT_Message * Msg );
/*------------------------------------------------------------------------------*/
/* Retour <20> l'initiateur d'un message */
/*------------------------------------------------------------------------------*/
/* (I) Msg : pointeur sur le message */
/*------------------------------------------------------------------------------*/
MSGT_Status MSG_Message_Return_I ( MSGT_Message * Msg );
MSGT_Status MSG_Message_Return_C ( MSGT_Message * Msg );
#ifdef __cplusplus
}
#endif
#endif