Mercurial > hg > freeDiameter
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 */ |