00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 #ifndef _FIPA_ACL_MESSAGE_H_
00036 #define _FIPA_ACL_MESSAGE_H_
00037 #include "dynstring.h"
00038 
00039 #ifndef _FIPA_PERFORMATIVE_E_
00040 #define _FIPA_PERFORMATIVE_E_
00041 enum fipa_performative_e
00042 {
00043   FIPA_ERROR=-1,
00044   FIPA_ZERO,
00045   FIPA_ACCEPT_PROPOSAL,
00046   FIPA_AGREE,
00047   FIPA_CANCEL,
00048   FIPA_CALL_FOR_PROPOSAL,
00049   FIPA_CONFIRM,
00050   FIPA_DISCONFIRM,
00051   FIPA_FAILURE,
00052   FIPA_INFORM,
00053   FIPA_INFORM_IF,
00054   FIPA_INFORM_REF,
00055   FIPA_NOT_UNDERSTOOD,
00056   FIPA_PROPOGATE,
00057   FIPA_PROPOSE,
00058   FIPA_PROXY,
00059   FIPA_QUERY_IF,
00060   FIPA_QUERY_REF,
00061   FIPA_REFUSE,
00062   FIPA_REJECT_PROPOSAL,
00063   FIPA_REQUEST,
00064   FIPA_REQUEST_WHEN,
00065   FIPA_REQUEST_WHENEVER,
00066   FIPA_SUBSCRIBE
00067 };
00068 #endif
00069 
00070 int fipa_performative_Compose(dynstring_t* msg, enum fipa_performative_e performative);
00071 
00072 typedef enum fipa_expression_type_e
00073 {
00074   FIPA_EXPR_ZERO,
00075   FIPA_EXPR_WORD,
00076   FIPA_EXPR_STRING,
00077   FIPA_EXPR_NUMBER,
00078   FIPA_EXPR_DATETIME,
00079   FIPA_EXPR_EXPRESSION
00080 } fipa_expression_type_t; 
00081 
00082 
00083 typedef struct fipa_acl_message_s
00084 {
00085   enum fipa_performative_e performative;
00086 
00087   struct fipa_agent_identifier_s* sender;
00088 
00089   struct fipa_agent_identifier_set_s* receiver;
00090   int receiver_num;
00091 
00092   struct fipa_agent_identifier_set_s* reply_to;
00093 
00094   
00095   struct fipa_string_s* content; 
00096 
00097   struct fipa_expression_s* language;
00098 
00099   struct fipa_expression_s* encoding;
00100   
00101   struct fipa_expression_s* ontology;
00102 
00103   struct fipa_word_s* protocol;
00104 
00105   struct fipa_expression_s* conversation_id;
00106 
00107   struct fipa_expression_s* reply_with;
00108 
00109   struct fipa_expression_s* in_reply_to;
00110 
00111   struct fipa_DateTime_s* reply_by;
00112 } fipa_acl_message_t;
00113 typedef fipa_acl_message_t* fipa_acl_message_p;
00114 fipa_acl_message_t* fipa_acl_message_New(void);
00115 int fipa_acl_message_Destroy(fipa_acl_message_t* message);
00116 fipa_acl_message_t* fipa_acl_message_Copy(fipa_acl_message_t* src);
00117 int fipa_acl_Compose(dynstring_t** msg, fipa_acl_message_t* acl);
00118 
00119 
00120 typedef struct fipa_message_string_s
00121 {
00122   char* message;
00123   char* parse;    
00124 } fipa_message_string_t;
00125 typedef fipa_message_string_t* fipa_message_string_p;
00126 fipa_message_string_t* fipa_message_string_New(void);
00127 int fipa_message_string_Destroy(fipa_message_string_t* message);
00128 fipa_message_string_t* fipa_message_string_Copy(fipa_message_string_t* src);
00129 
00130 
00131 typedef struct fipa_url_sequence_s
00132 {
00133   int num;
00134   struct fipa_url_s** urls;
00135 } fipa_url_sequence_t;
00136 typedef fipa_url_sequence_t* fipa_url_sequence_p;
00137 fipa_url_sequence_t* fipa_url_sequence_New(void);
00138 int fipa_url_sequence_Destroy(fipa_url_sequence_t* sequence);
00139 fipa_url_sequence_t* fipa_url_sequence_Copy(fipa_url_sequence_t* src);
00140 int fipa_url_sequence_Compose(dynstring_t* msg, fipa_url_sequence_t* urls);
00141 
00142 
00143 typedef struct fipa_agent_identifier_set_s
00144 {
00145   int num;
00146   int retain_order;
00147   struct fipa_agent_identifier_s** fipa_agent_identifiers;
00148 } fipa_agent_identifier_set_t;
00149 typedef fipa_agent_identifier_set_t* fipa_agent_identifier_set_p;
00150 fipa_agent_identifier_set_t* fipa_agent_identifier_set_New(void);
00151 int fipa_agent_identifier_set_Destroy(fipa_agent_identifier_set_t* idset);
00152 fipa_agent_identifier_set_t* fipa_agent_identifier_set_Copy(
00153     fipa_agent_identifier_set_t* src);
00154 int fipa_agent_identifier_set_Compose(dynstring_t* msg, fipa_agent_identifier_set_t* ids);
00155 
00156 
00157 typedef struct fipa_agent_identifier_s
00158 {
00159   char* name;
00160   struct fipa_url_sequence_s* addresses;
00161   struct fipa_agent_identifier_set_s* resolvers;
00162 } fipa_agent_identifier_t;
00163 typedef fipa_agent_identifier_t* fipa_agent_identifier_p;
00164 fipa_agent_identifier_t* fipa_agent_identifier_New(void);
00165 int fipa_agent_identifier_Destroy(fipa_agent_identifier_t* id);
00166 fipa_agent_identifier_t* fipa_agent_identifier_Copy(fipa_agent_identifier_t* src);
00167 int fipa_agent_identifier_Compose(dynstring_t* msg, fipa_agent_identifier_t* id);
00168 
00169 
00170 typedef struct fipa_expression_s
00171 {
00172   enum fipa_expression_type_e type;
00173   union content_u
00174   {
00175     struct fipa_word_s* word;
00176     struct fipa_string_s* string;
00177     struct fipa_number_s* number;
00178     struct fipa_DateTime_s* datetime;
00179     struct fipa_expression_s** expression;
00180   } content;
00181 } fipa_expression_t;
00182 typedef fipa_expression_t* fipa_expression_p;
00183 fipa_expression_t* fipa_expression_New(void);
00184 int fipa_expression_Destroy(fipa_expression_t* expr);
00185 fipa_expression_t* fipa_expression_Copy(fipa_expression_t* src);
00186 int fipa_expression_Compose(dynstring_t* msg, fipa_expression_t* expr);
00187 
00188 
00189 typedef struct fipa_word_s
00190 {
00191   char* content;
00192 } fipa_word_t;
00193 typedef fipa_word_t* fipa_word_p;
00194 fipa_word_t* fipa_word_New(void);
00195 int fipa_word_Destroy(fipa_word_t* word);
00196 fipa_word_t* fipa_word_Copy(fipa_word_t* src);
00197 int fipa_word_Compose(dynstring_t* msg, fipa_word_t* word);
00198 
00199 
00200 typedef struct fipa_string_s
00201 {
00202   char* content;
00203 } fipa_string_t;
00204 typedef fipa_string_t* fipa_string_p;
00205 fipa_string_t* fipa_string_New(void);
00206 int fipa_string_Destroy(fipa_string_t* str);
00207 fipa_string_t* fipa_string_Copy(fipa_string_t* src);
00208 int fipa_string_Compose(dynstring_t* msg, fipa_string_t* string);
00209 
00210 
00211 typedef struct fipa_DateTime_s
00212 {
00213   int year;
00214   int month;
00215   int day;
00216   int hour;
00217   int minute;
00218   int second;
00219   int millisecond;
00220   char sign; 
00221   int is_utc; 
00222 } fipa_DateTime_t;
00223 typedef fipa_DateTime_t* fipa_DateTime_p;
00224 fipa_DateTime_t* fipa_DateTime_New(void);
00225 int fipa_DateTime_Destroy(fipa_DateTime_t* dt);
00226 fipa_DateTime_t* fipa_DateTime_Copy(fipa_DateTime_t* src);
00227 int fipa_DateTime_Compose(dynstring_t* msg, fipa_DateTime_t* date);
00228 
00229 
00230 typedef struct fipa_url_s
00231 {
00232   char *str;
00233 } fipa_url_t;
00234 typedef fipa_url_t* fipa_url_p;
00235 fipa_url_t* fipa_url_New(void);
00236 int fipa_url_Destroy(fipa_url_t* url);
00237 fipa_url_t* fipa_url_Copy(fipa_url_t* src);
00238 int fipa_url_Compose(dynstring_t* msg, fipa_url_t* url);
00239 
00240 
00241 typedef struct fipa_number_s
00242 {
00243   char *str;
00244 } fipa_number_t;
00245 typedef fipa_number_t* fipa_number_p;
00246 fipa_number_t* fipa_number_New(void);
00247 int fipa_number_Destroy(fipa_number_t* number);
00248 fipa_number_t* fipa_number_Copy(fipa_number_t* src);
00249 int fipa_number_Compose(dynstring_t* msg, fipa_number_t* number);
00250 
00251 
00252 
00253 int fipa_acl_Parse(struct fipa_acl_message_s* acl, fipa_message_string_p message);
00254 int fipa_message_parameter_Parse(struct fipa_acl_message_s* acl, fipa_message_string_p message);
00255 int fipa_message_type_Parse(
00256     enum fipa_performative_e* performative, 
00257     fipa_message_string_p message
00258     );
00259 int fipa_GetAtom(
00260     fipa_message_string_p message,
00261     char expected_atom
00262     );
00263 int fipa_word_Parse(fipa_word_t** word, fipa_message_string_p message);
00264 int fipa_word_Destroy(fipa_word_t* word);
00265 int fipa_CheckNextToken(const fipa_message_string_p message, const char* token);
00266 int fipa_expression_Parse(fipa_expression_t** expression, fipa_message_string_p message);
00267 int fipa_GetNextWord(char** word, const fipa_message_string_p message);
00268 int fipa_GetWholeToken(char** word, const fipa_message_string_p message);
00269 int fipa_datetime_Parse(fipa_DateTime_p* datetime, fipa_message_string_p message);
00270 int fipa_string_Parse( fipa_string_p* fipa_string, fipa_message_string_p message);
00271 int fipa_agent_identifier_Parse(fipa_agent_identifier_p* aid, fipa_message_string_p message);
00272 int fipa_agent_identifier_set_Parse(fipa_agent_identifier_set_p* agent_ids, fipa_message_string_p message);
00273 int fipa_url_sequence_Parse(fipa_url_sequence_p* urls, fipa_message_string_p message);
00274 int fipa_url_Parse(fipa_url_p* url, fipa_message_string_p message);
00275 
00276 struct fipa_acl_message_s* fipa_Reply(
00277     struct fipa_acl_message_s* acl);
00278 
00279 #endif