Rev 4743 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4743 | Rev 4750 | ||
|---|---|---|---|
| Line 45... | Line 45... | ||
| 45 | 45 | ||
| 46 | #include "../include/icmp_interface.h" |
46 | #include "../include/icmp_interface.h" |
| 47 | #include "../include/in.h" |
47 | #include "../include/in.h" |
| 48 | #include "../include/in6.h" |
48 | #include "../include/in6.h" |
| 49 | #include "../include/inet.h" |
49 | #include "../include/inet.h" |
| - | 50 | #include "../include/ip_interface.h" |
|
| 50 | #include "../include/socket_codes.h" |
51 | #include "../include/socket_codes.h" |
| 51 | #include "../include/socket_errno.h" |
52 | #include "../include/socket_errno.h" |
| 52 | 53 | ||
| 53 | #include "tl_common.h" |
54 | #include "tl_common.h" |
| 54 | 55 | ||
| - | 56 | DEVICE_MAP_IMPLEMENT( packet_dimensions, packet_dimension_t ); |
|
| - | 57 | ||
| 55 | int tl_get_address_port( const struct sockaddr * addr, int addrlen, uint16_t * port ){ |
58 | int tl_get_address_port( const struct sockaddr * addr, int addrlen, uint16_t * port ){ |
| 56 | const struct sockaddr_in * address_in; |
59 | const struct sockaddr_in * address_in; |
| 57 | const struct sockaddr_in6 * address_in6; |
60 | const struct sockaddr_in6 * address_in6; |
| 58 | 61 | ||
| 59 | if(( addrlen <= 0 ) || (( size_t ) addrlen < sizeof( struct sockaddr ))) return EINVAL; |
62 | if(( addrlen <= 0 ) || (( size_t ) addrlen < sizeof( struct sockaddr ))) return EINVAL; |
| Line 72... | Line 75... | ||
| 72 | return EAFNOSUPPORT; |
75 | return EAFNOSUPPORT; |
| 73 | } |
76 | } |
| 74 | return EOK; |
77 | return EOK; |
| 75 | } |
78 | } |
| 76 | 79 | ||
| - | 80 | int tl_get_ip_packet_dimension( int ip_phone, packet_dimensions_ref packet_dimensions, device_id_t device_id, packet_dimension_ref * packet_dimension ){ |
|
| - | 81 | ERROR_DECLARE; |
|
| - | 82 | ||
| - | 83 | if( ! packet_dimension ) return EBADMEM; |
|
| - | 84 | ||
| - | 85 | * packet_dimension = packet_dimensions_find( packet_dimensions, device_id ); |
|
| - | 86 | if( ! * packet_dimension ){ |
|
| - | 87 | // ask for and remember them if not found |
|
| - | 88 | * packet_dimension = malloc( sizeof( ** packet_dimension )); |
|
| - | 89 | if( ! * packet_dimension ) return ENOMEM; |
|
| - | 90 | if( ERROR_OCCURRED( ip_packet_size_req( ip_phone, device_id, & ( ** packet_dimension ).addr_len, & ( ** packet_dimension ).prefix, & ( ** packet_dimension ).content, & ( ** packet_dimension ).suffix ))){ |
|
| - | 91 | free( * packet_dimension ); |
|
| - | 92 | return ERROR_CODE; |
|
| - | 93 | } |
|
| - | 94 | ERROR_CODE = packet_dimensions_add( packet_dimensions, device_id, * packet_dimension ); |
|
| - | 95 | if( ERROR_CODE < 0 ){ |
|
| - | 96 | free( * packet_dimension ); |
|
| - | 97 | return ERROR_CODE; |
|
| - | 98 | } |
|
| - | 99 | } |
|
| - | 100 | return EOK; |
|
| - | 101 | } |
|
| - | 102 | ||
| 77 | int tl_set_address_port( struct sockaddr * addr, int addrlen, uint16_t port ){ |
103 | int tl_set_address_port( struct sockaddr * addr, int addrlen, uint16_t port ){ |
| 78 | struct sockaddr_in * address_in; |
104 | struct sockaddr_in * address_in; |
| 79 | struct sockaddr_in6 * address_in6; |
105 | struct sockaddr_in6 * address_in6; |
| 80 | size_t length; |
106 | size_t length; |
| 81 | 107 | ||