comparison libfreeDiameter/messages.c @ 83:c662d3eb6ff6

Started support for routing module
author Sebastien Decugis <sdecugis@nict.go.jp>
date Wed, 02 Dec 2009 18:28:28 +0900
parents cc3c59fe98fe
children e5fcd672caff
comparison
equal deleted inserted replaced
82:b6344f1d521a 83:c662d3eb6ff6
115 struct msg_hdr msg_public; /* Message data that can be managed by extensions. */ 115 struct msg_hdr msg_public; /* Message data that can be managed by extensions. */
116 116
117 uint8_t *msg_rawbuffer; /* data buffer that was received, saved during fd_msg_parse_buffer and freed in fd_msg_parse_dict */ 117 uint8_t *msg_rawbuffer; /* data buffer that was received, saved during fd_msg_parse_buffer and freed in fd_msg_parse_dict */
118 int msg_routable; /* Is this a routable message? (0: undef, 1: routable, 2: non routable) */ 118 int msg_routable; /* Is this a routable message? (0: undef, 1: routable, 2: non routable) */
119 struct msg *msg_query; /* the associated query if the message is a received answer */ 119 struct msg *msg_query; /* the associated query if the message is a received answer */
120 struct fd_list *msg_rtlist; /* Routing list for the query */ 120 struct rt_data *msg_rtdata; /* Routing list for the query */
121 struct { 121 struct {
122 void (*fct)(void *, struct msg **); 122 void (*fct)(void *, struct msg **);
123 void * data; 123 void * data;
124 } msg_cb; /* Callback to be called when an answer is received, if not NULL */ 124 } msg_cb; /* Callback to be called when an answer is received, if not NULL */
125 char * msg_src_id; /* Diameter Id of the peer this message was received from. This string is malloc'd and must be freed */ 125 char * msg_src_id; /* Diameter Id of the peer this message was received from. This string is malloc'd and must be freed */
566 566
567 if ((obj->type == MSG_MSG) && (_M(obj)->msg_src_id != NULL)) { 567 if ((obj->type == MSG_MSG) && (_M(obj)->msg_src_id != NULL)) {
568 free(_M(obj)->msg_src_id); 568 free(_M(obj)->msg_src_id);
569 } 569 }
570 570
571 if ((obj->type == MSG_MSG) && (_M(obj)->msg_rtlist != NULL)) { 571 if ((obj->type == MSG_MSG) && (_M(obj)->msg_rtdata != NULL)) {
572 while (! FD_IS_LIST_EMPTY(_M(obj)->msg_rtlist) ) { 572 fd_rtd_free(&_M(obj)->msg_rtdata);
573 struct fd_list * li = _M(obj)->msg_rtlist->next;
574 fd_list_unlink(li);
575 free(li);
576 }
577
578 free(_M(obj)->msg_rtlist);
579 } 573 }
580 574
581 /* free the object */ 575 /* free the object */
582 free(obj); 576 free(obj);
583 577
1028 1022
1029 return 0; 1023 return 0;
1030 } 1024 }
1031 1025
1032 /* Associate routing lists */ 1026 /* Associate routing lists */
1033 int fd_msg_rt_associate( struct msg * msg, struct fd_list ** list ) 1027 int fd_msg_rt_associate( struct msg * msg, struct rt_data ** rtd )
1034 { 1028 {
1035 TRACE_ENTRY( "%p %p", msg, list ); 1029 TRACE_ENTRY( "%p %p", msg, rtd );
1036 1030
1037 CHECK_PARAMS( CHECK_MSG(msg) && list ); 1031 CHECK_PARAMS( CHECK_MSG(msg) && rtd );
1038 1032
1039 msg->msg_rtlist = *list; 1033 msg->msg_rtdata = *rtd;
1040 *list = NULL; 1034 *rtd = NULL;
1041 1035
1042 return 0; 1036 return 0;
1043 } 1037 }
1044 1038
1045 int fd_msg_rt_get( struct msg * msg, struct fd_list ** list ) 1039 int fd_msg_rt_get( struct msg * msg, struct rt_data ** rtd )
1046 { 1040 {
1047 TRACE_ENTRY( "%p %p", msg, list ); 1041 TRACE_ENTRY( "%p %p", msg, rtd );
1048 1042
1049 CHECK_PARAMS( CHECK_MSG(msg) && list ); 1043 CHECK_PARAMS( CHECK_MSG(msg) && rtd );
1050 1044
1051 *list = msg->msg_rtlist; 1045 *rtd = msg->msg_rtdata;
1052 msg->msg_rtlist = NULL; 1046 msg->msg_rtdata = NULL;
1053 1047
1054 return 0; 1048 return 0;
1055 } 1049 }
1056 1050
1057 /* Find if a message is routable */ 1051 /* Find if a message is routable */
"Welcome to our mercurial repository"