Changes in uspace/srv/net/structures/packet/packet_client.c [21580dd:aadf01e] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/structures/packet/packet_client.c
r21580dd raadf01e 48 48 #include "packet_client.h" 49 49 50 int packet_copy_data( packet_t packet, const void * data, size_t length ){ 51 if( ! packet_is_valid( packet )) return EINVAL; 52 if( packet->data_start + length >= packet->length ) return ENOMEM; 53 memcpy(( void * ) packet + packet->data_start, data, length ); 54 if( packet->data_start + length > packet->data_end ){ 50 int packet_copy_data(packet_t packet, const void * data, size_t length){ 51 if(! packet_is_valid(packet)){ 52 return EINVAL; 53 } 54 if(packet->data_start + length >= packet->length){ 55 return ENOMEM; 56 } 57 memcpy((void *) packet + packet->data_start, data, length); 58 if(packet->data_start + length > packet->data_end){ 55 59 packet->data_end = packet->data_start + length; 56 60 } … … 58 62 } 59 63 60 void * packet_prefix( packet_t packet, size_t length ){ 61 if(( ! packet_is_valid( packet )) || ( packet->data_start - sizeof( struct packet ) - 2 * ( packet->dest_addr - packet->src_addr ) < length )) return NULL; 64 void * packet_prefix(packet_t packet, size_t length){ 65 if((! packet_is_valid(packet)) || (packet->data_start - sizeof(struct packet) - 2 * (packet->dest_addr - packet->src_addr) < length)){ 66 return NULL; 67 } 62 68 packet->data_start -= length; 63 return ( void *) packet + packet->data_start;69 return (void *) packet + packet->data_start; 64 70 } 65 71 66 void * packet_suffix( packet_t packet, size_t length ){ 67 if(( ! packet_is_valid( packet )) || ( packet->data_end + length >= packet->length )) return NULL; 72 void * packet_suffix(packet_t packet, size_t length){ 73 if((! packet_is_valid(packet)) || (packet->data_end + length >= packet->length)){ 74 return NULL; 75 } 68 76 packet->data_end += length; 69 return ( void *) packet + packet->data_end - length;77 return (void *) packet + packet->data_end - length; 70 78 } 71 79 72 int packet_trim( packet_t packet, size_t prefix, size_t suffix ){ 73 if( ! packet_is_valid( packet )) return EINVAL; 74 if( prefix + suffix > PACKET_DATA_LENGTH( packet )) return ENOMEM; 80 int packet_trim(packet_t packet, size_t prefix, size_t suffix){ 81 if(! packet_is_valid(packet)){ 82 return EINVAL; 83 } 84 if(prefix + suffix > PACKET_DATA_LENGTH(packet)){ 85 return ENOMEM; 86 } 75 87 packet->data_start += prefix; 76 88 packet->data_end -= suffix; … … 78 90 } 79 91 80 packet_id_t packet_get_id( const packet_t packet){81 return packet_is_valid( packet) ? packet->packet_id : 0;92 packet_id_t packet_get_id(const packet_t packet){ 93 return packet_is_valid(packet) ? packet->packet_id : 0; 82 94 } 83 95 84 int packet_get_addr( const packet_t packet, uint8_t ** src, uint8_t ** dest ){ 85 if( ! packet_is_valid( packet )) return EINVAL; 86 if( ! packet->addr_len ) return 0; 87 if( src ) * src = ( void * ) packet + packet->src_addr; 88 if( dest ) * dest = ( void * ) packet + packet->dest_addr; 96 int packet_get_addr(const packet_t packet, uint8_t ** src, uint8_t ** dest){ 97 if(! packet_is_valid(packet)){ 98 return EINVAL; 99 } 100 if(! packet->addr_len){ 101 return 0; 102 } 103 if(src){ 104 *src = (void *) packet + packet->src_addr; 105 } 106 if(dest){ 107 *dest = (void *) packet + packet->dest_addr; 108 } 89 109 return packet->addr_len; 90 110 } 91 111 92 size_t packet_get_data_length( const packet_t packet ){ 93 if( ! packet_is_valid( packet )) return 0; 94 return PACKET_DATA_LENGTH( packet ); 112 size_t packet_get_data_length(const packet_t packet){ 113 if(! packet_is_valid(packet)){ 114 return 0; 115 } 116 return PACKET_DATA_LENGTH(packet); 95 117 } 96 118 97 void * packet_get_data( const packet_t packet ){ 98 if( ! packet_is_valid( packet )) return NULL; 99 return ( void * ) packet + packet->data_start; 119 void * packet_get_data(const packet_t packet){ 120 if(! packet_is_valid(packet)){ 121 return NULL; 122 } 123 return (void *) packet + packet->data_start; 100 124 } 101 125 102 int packet_set_addr( packet_t packet, const uint8_t * src, const uint8_t * dest, size_t addr_len){103 size_t 104 size_t 126 int packet_set_addr(packet_t packet, const uint8_t * src, const uint8_t * dest, size_t addr_len){ 127 size_t padding; 128 size_t allocated; 105 129 106 if( ! packet_is_valid( packet )) return EINVAL; 107 allocated = PACKET_MAX_ADDRESS_LENGTH( packet ); 108 if( allocated < addr_len ) return ENOMEM; 130 if(! packet_is_valid(packet)){ 131 return EINVAL; 132 } 133 allocated = PACKET_MAX_ADDRESS_LENGTH(packet); 134 if(allocated < addr_len){ 135 return ENOMEM; 136 } 109 137 padding = allocated - addr_len; 110 138 packet->addr_len = addr_len; 111 if( src ){ 112 memcpy(( void * ) packet + packet->src_addr, src, addr_len ); 113 if( padding ) bzero(( void * ) packet + packet->src_addr + addr_len, padding ); 139 if(src){ 140 memcpy((void *) packet + packet->src_addr, src, addr_len); 141 if(padding){ 142 bzero((void *) packet + packet->src_addr + addr_len, padding); 143 } 114 144 }else{ 115 bzero(( void * ) packet + packet->src_addr, allocated);145 bzero((void *) packet + packet->src_addr, allocated); 116 146 } 117 if( dest ){ 118 memcpy(( void * ) packet + packet->dest_addr, dest, addr_len ); 119 if( padding ) bzero(( void * ) packet + packet->dest_addr + addr_len, padding ); 147 if(dest){ 148 memcpy((void *) packet + packet->dest_addr, dest, addr_len); 149 if(padding){ 150 bzero((void *) packet + packet->dest_addr + addr_len, padding); 151 } 120 152 }else{ 121 bzero(( void * ) packet + packet->dest_addr, allocated);153 bzero((void *) packet + packet->dest_addr, allocated); 122 154 } 123 155 return EOK; 124 156 } 125 157 126 packet_t packet_get_copy( int phone, packet_t packet){127 packet_t 128 uint8_t * 129 uint8_t * 130 size_t 158 packet_t packet_get_copy(int phone, packet_t packet){ 159 packet_t copy; 160 uint8_t * src; 161 uint8_t * dest; 162 size_t addrlen; 131 163 132 if( ! packet_is_valid( packet )) return NULL; 164 if(! packet_is_valid(packet)){ 165 return NULL; 166 } 133 167 // get a new packet 134 copy = packet_get_4( phone, PACKET_DATA_LENGTH( packet ), PACKET_MAX_ADDRESS_LENGTH( packet ), packet->max_prefix, PACKET_MIN_SUFFIX( packet )); 135 if( ! copy ) return NULL; 168 copy = packet_get_4(phone, PACKET_DATA_LENGTH(packet), PACKET_MAX_ADDRESS_LENGTH(packet), packet->max_prefix, PACKET_MIN_SUFFIX(packet)); 169 if(! copy){ 170 return NULL; 171 } 136 172 // get addresses 137 addrlen = packet_get_addr( packet, & src, & dest);173 addrlen = packet_get_addr(packet, &src, &dest); 138 174 // copy data 139 if(( packet_copy_data( copy, packet_get_data( packet ), PACKET_DATA_LENGTH( packet )) == EOK)175 if((packet_copy_data(copy, packet_get_data(packet), PACKET_DATA_LENGTH(packet)) == EOK) 140 176 // copy addresses if present 141 && (( addrlen <= 0 ) || ( packet_set_addr( copy, src, dest, addrlen ) == EOK))){177 && ((addrlen <= 0) || (packet_set_addr(copy, src, dest, addrlen) == EOK))){ 142 178 copy->order = packet->order; 143 179 copy->metric = packet->metric; 144 180 return copy; 145 181 }else{ 146 pq_release( phone, copy->packet_id);182 pq_release(phone, copy->packet_id); 147 183 return NULL; 148 184 }
Note:
See TracChangeset
for help on using the changeset viewer.