Navigation


Changeset 1136:140450615773 in freeDiameter for libfdcore


Ignore:
Timestamp:
May 16, 2013, 3:56:31 PM (11 years ago)
Author:
Sebastien Decugis <sdecugis@freediameter.net>
Branch:
default
Phase:
public
Message:

Revert changeset 1122 (ADDRESS_AVP_INCLUDE_PORT) as this will create too much interop issues. The Host-IP-Address AVP is not normally used to discover peer address, but only for validation of the addresses where a packet is received from -- which is quite useless with a connected transport connection, but anyway...

Location:
libfdcore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libfdcore/endpoints.c

    r1127 r1136  
    203203}
    204204
    205 /* Remove any endpoint from the exclude list in the list */
    206 int fd_ep_filter_list( struct fd_list * list, struct fd_list * exclude_list )
    207 {
    208         struct fd_list * li_out, *li_ex, *li;
    209         struct fd_endpoint * out, * ex;
    210        
    211         TRACE_ENTRY("%p %p", list, exclude_list);
    212         CHECK_PARAMS(list && exclude_list);
    213        
    214         /* initialize. Both lists are ordered */
    215         li_out = list->next;
    216         li_ex = exclude_list->next;
    217        
    218         /* Now browse both lists in parallel */
    219         while ((li_out != list) && (li_ex != exclude_list)) {
    220                 int cmp;
    221                 in_port_t * port_out, *port_ex;
    222                
    223                 out = (struct fd_endpoint *)li_out;
    224                 ex = (struct fd_endpoint *)li_ex;
    225 
    226                 /* Compare the next elements families */
    227                 if (out->sa.sa_family < ex->sa.sa_family) {
    228                         li_out = li_out->next;
    229                         continue;
    230                 }
    231                 if (out->sa.sa_family > ex->sa.sa_family) {
    232                         li_ex = li_ex->next;
    233                         continue;
    234                 }
    235 
    236                 /* Then compare the address fields */
    237                 switch (out->sa.sa_family) {
    238                         case AF_INET:
    239                                 cmp = memcmp(&out->sin.sin_addr, &ex->sin.sin_addr, sizeof(struct in_addr));
    240                                 port_out = &out->sin.sin_port;
    241                                 port_ex = &ex->sin.sin_port;
    242                                 break;
    243                         case AF_INET6:
    244                                 cmp = memcmp(&out->sin6.sin6_addr, &ex->sin6.sin6_addr, sizeof(struct in6_addr));
    245                                 port_out = &out->sin6.sin6_port;
    246                                 port_ex = &ex->sin6.sin6_port;
    247                                 break;
    248                         default:
    249                                 /* Filter this out */
    250                                 cmp = 0;
    251                 }
    252                 if (cmp < 0) {
    253                         li_out = li_out->next;
    254                         continue;
    255                 }
    256                 if (cmp > 0) {
    257                         li_ex = li_ex->next;
    258                         continue;
    259                 }
    260                
    261                 if (port_out && (*port_out != 0) && (*port_ex != 0)) {
    262                         if (*port_out < *port_ex) {
    263                                 li_out = li_out->next;
    264                                 continue;
    265                         }
    266                         if (*port_out > *port_ex) {
    267                                 li_ex = li_ex->next;
    268                                 continue;
    269                         }
    270                 }
    271        
    272                 /* We remove this element then loop */
    273                 li = li_out;
    274                 li_out = li->next;
    275                 fd_list_unlink(li);
    276                 free(li);
    277         }
    278        
    279         return 0;
    280 
    281 }
    282 
    283 
    284205/* Reset the given flag(s) from all items in the list */
    285206int fd_ep_clearflags( struct fd_list * list, uint32_t flags )
  • libfdcore/p_cnx.c

    r1103 r1136  
    121121        }
    122122       
    123         /* Remove any local address that would be here, it should not happen but it does sometimes... */
    124         CHECK_FCT( fd_ep_filter_list(&peer->p_hdr.info.pi_endpoints, &fd_g_config->cnf_endpoints) );
    125        
    126123        /* Now check we have at least one address to attempt */
    127124        if (FD_IS_LIST_EMPTY(&peer->p_hdr.info.pi_endpoints)) {
  • libfdcore/server.c

    r1122 r1136  
    342342        int empty_conf_ep = FD_IS_LIST_EMPTY(&fd_g_config->cnf_endpoints);
    343343       
    344         struct fd_list filter_list = FD_LIST_INITIALIZER(filter_list);
    345        
    346344        /* SCTP */
    347345        if (!fd_g_config->cnf_flags.no_sctp) {
     
    449447        }
    450448       
    451         /* we will filter this list and create endpoints with port information */
    452         #ifdef ADDRESS_AVP_INCLUDE_PORT
    453         fd_list_move_end(&filter_list, &fd_g_config->cnf_endpoints);
    454         while (!FD_IS_LIST_EMPTY(&filter_list)) {
    455                 struct fd_endpoint * ep = (struct fd_endpoint *)filter_list.next;
    456                 in_port_t * port = NULL;
    457                 fd_list_unlink(&ep->chain);
    458                
    459                 switch( ep->sa.sa_family ) {
    460                 case AF_INET: port = &ep->sin.sin_port; break;
    461                 case AF_INET6: port = &ep->sin6.sin6_port; break;
    462                 }
    463                
    464                 if (port) {
    465                         if (fd_g_config->cnf_port) {
    466                                 *port = htons(fd_g_config->cnf_port);
    467                                 CHECK_FCT(fd_ep_add_merge( &fd_g_config->cnf_endpoints, &ep->sa, sSAlen(&ep->sa), ep->flags ));
    468                         }
    469                         if (fd_g_config->cnf_port_tls) {
    470                                 *port = htons(fd_g_config->cnf_port_tls);
    471                                 CHECK_FCT(fd_ep_add_merge( &fd_g_config->cnf_endpoints, &ep->sa, sSAlen(&ep->sa), ep->flags ));
    472                         }
    473                 }
    474                 free(ep);
    475         }
    476         #endif /* ADDRESS_AVP_INCLUDE_PORT */
    477        
    478449        {
    479450                char * buf = NULL;
Note: See TracChangeset for help on using the changeset viewer.