Rev 3912 | Rev 4192 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3912 | Rev 3990 | ||
|---|---|---|---|
| Line 39... | Line 39... | ||
| 39 | #include <unistd.h> |
39 | #include <unistd.h> |
| 40 | //#include <stdio.h> |
40 | //#include <stdio.h> |
| 41 | #include <string.h> |
41 | #include <string.h> |
| 42 | 42 | ||
| 43 | #include <ipc/ipc.h> |
43 | #include <ipc/ipc.h> |
| 44 | #include <ipc/services.h> |
- | |
| 45 | #include <sys/mman.h> |
44 | #include <sys/mman.h> |
| 46 | 45 | ||
| 47 | #include "../../err.h" |
46 | #include "../../err.h" |
| 48 | #include "../../messages.h" |
47 | #include "../../messages.h" |
| 49 | 48 | ||
| Line 61... | Line 60... | ||
| 61 | * \todo ipc_share_in_start() error? |
60 | * \todo ipc_share_in_start() error? |
| 62 | * @returns Other error codes as defined for the pm_add() function. |
61 | * @returns Other error codes as defined for the pm_add() function. |
| 63 | */ |
62 | */ |
| 64 | int packet_return( int phone, packet_ref packet, packet_id_t packet_id, size_t size ); |
63 | int packet_return( int phone, packet_ref packet, packet_id_t packet_id, size_t size ); |
| 65 | 64 | ||
| 66 | packet_t packet_copy( int phone, services_t owner, const packet_t packet ){ |
- | |
| 67 | packet_t new; |
- | |
| 68 | - | ||
| 69 | if( ! packet_is_valid( packet )) return NULL; |
- | |
| 70 | // new = ( packet_t ) mmap( NULL, packet->length, PROTO_READ | PROTO_WRITE, MAP_SHARED | MAP_ANONYMOUS, 0, 0 ); |
- | |
| 71 | // if( new == MAP_FAILED ) return NULL; |
- | |
| 72 | // memcpy( new, packet, packet->length ); |
- | |
| 73 | new = packet_get_1( phone, owner, packet_get_data_length( packet )); |
- | |
| 74 | packet_copy_data( new, packet_get_data( packet ), packet_get_data_length( packet )); |
- | |
| 75 | return new; |
- | |
| 76 | } |
- | |
| 77 | - | ||
| 78 | int packet_copy_data( packet_t packet, const void * data, size_t length ){ |
65 | int packet_copy_data( packet_t packet, const void * data, size_t length ){ |
| 79 | if( ! packet_is_valid( packet )) return EINVAL; |
66 | if( ! packet_is_valid( packet )) return EINVAL; |
| 80 | if( packet->data_start + length >= packet->length ) return ENOMEM; |
67 | if( packet->data_start + length >= packet->length ) return ENOMEM; |
| 81 | memcpy(( void * ) packet + packet->data_start, data, length ); |
68 | memcpy(( void * ) packet + packet->data_start, data, length ); |
| 82 | if( packet->data_start + length > packet->data_end ){ |
69 | if( packet->data_start + length > packet->data_end ){ |
| Line 125... | Line 112... | ||
| 125 | void * packet_get_data( const packet_t packet ){ |
112 | void * packet_get_data( const packet_t packet ){ |
| 126 | if( ! packet_is_valid( packet )) return NULL; |
113 | if( ! packet_is_valid( packet )) return NULL; |
| 127 | return ( void * ) packet + packet->data_start; |
114 | return ( void * ) packet + packet->data_start; |
| 128 | } |
115 | } |
| 129 | 116 | ||
| 130 | packet_mode_t packet_get_mode( const packet_t packet ){ |
- | |
| 131 | if( packet_is_valid( packet )) return packet->mode; |
- | |
| 132 | return PM_ONE_WAY; |
- | |
| 133 | } |
- | |
| 134 | - | ||
| 135 | int packet_set_addr( packet_t packet, const uint8_t * src, const uint8_t * dest, size_t addr_len ){ |
117 | int packet_set_addr( packet_t packet, const uint8_t * src, const uint8_t * dest, size_t addr_len ){ |
| 136 | size_t padding; |
118 | size_t padding; |
| 137 | 119 | ||
| 138 | if( ! packet_is_valid( packet )) return EINVAL; |
120 | if( ! packet_is_valid( packet )) return EINVAL; |
| 139 | if( packet->addr_len >= addr_len ) return ENOMEM; |
121 | if( packet->addr_len >= addr_len ) return ENOMEM; |
| Line 151... | Line 133... | ||
| 151 | memset(( void * ) packet + packet->dest_addr + addr_len, 0, packet->addr_len ); |
133 | memset(( void * ) packet + packet->dest_addr + addr_len, 0, packet->addr_len ); |
| 152 | } |
134 | } |
| 153 | return EOK; |
135 | return EOK; |
| 154 | } |
136 | } |
| 155 | 137 | ||
| 156 | int packet_set_mode( packet_t packet, packet_mode_t mode ){ |
- | |
| 157 | if( ! packet_is_valid( packet )) return EINVAL; |
- | |
| 158 | packet->mode = mode; |
- | |
| 159 | return EOK; |
- | |
| 160 | } |
- | |
| 161 | - | ||
| 162 | int packet_set_owner( packet_t packet, services_t owner ){ |
- | |
| 163 | if( ! packet_is_valid( packet )) return EINVAL; |
- | |
| 164 | packet->owner = owner; |
- | |
| 165 | return EOK; |
- | |
| 166 | } |
- | |
| 167 | - | ||
| 168 | int packet_translate( int phone, packet_ref packet, packet_id_t packet_id ){ |
138 | int packet_translate( int phone, packet_ref packet, packet_id_t packet_id ){ |
| 169 | ERROR_DECLARE; |
139 | ERROR_DECLARE; |
| 170 | 140 | ||
| 171 | unsigned int size; |
141 | unsigned int size; |
| 172 | 142 | ||
| Line 194... | Line 164... | ||
| 194 | } |
164 | } |
| 195 | async_wait_for( message, & result ); |
165 | async_wait_for( message, & result ); |
| 196 | return result; |
166 | return result; |
| 197 | } |
167 | } |
| 198 | 168 | ||
| 199 | packet_t packet_get_5( int phone, services_t owner, size_t max_content, size_t addr_len, size_t max_prefix, size_t max_suffix ){ |
169 | packet_t packet_get_4( int phone, size_t max_content, size_t addr_len, size_t max_prefix, size_t max_suffix ){ |
| 200 | ERROR_DECLARE; |
170 | ERROR_DECLARE; |
| 201 | 171 | ||
| 202 | packet_id_t packet_id; |
172 | packet_id_t packet_id; |
| 203 | unsigned int size; |
173 | unsigned int size; |
| 204 | packet_t packet; |
174 | packet_t packet; |
| 205 | 175 | ||
| 206 | if( ERROR_OCCURRED( async_req_5_2( phone, NET_PACKET_CREATE_5, owner, max_content, addr_len, max_prefix, max_suffix, & packet_id, & size )) |
176 | if( ERROR_OCCURRED( async_req_4_2( phone, NET_PACKET_CREATE_4, max_content, addr_len, max_prefix, max_suffix, & packet_id, & size )) |
| 207 | || ERROR_OCCURRED( packet_return( phone, & packet, packet_id, size ))){ |
177 | || ERROR_OCCURRED( packet_return( phone, & packet, packet_id, size ))){ |
| 208 | return NULL; |
178 | return NULL; |
| 209 | } |
179 | } |
| 210 | return packet; |
180 | return packet; |
| 211 | } |
181 | } |
| 212 | 182 | ||
| 213 | packet_t packet_get_1( int phone, services_t owner, size_t content ){ |
183 | packet_t packet_get_1( int phone, size_t content ){ |
| 214 | ERROR_DECLARE; |
184 | ERROR_DECLARE; |
| 215 | 185 | ||
| 216 | packet_id_t packet_id; |
186 | packet_id_t packet_id; |
| 217 | unsigned int size; |
187 | unsigned int size; |
| 218 | packet_t packet; |
188 | packet_t packet; |
| 219 | 189 | ||
| 220 | if( ERROR_OCCURRED( async_req_2_2( phone, NET_PACKET_CREATE_1, owner, content, & packet_id, & size )) |
190 | if( ERROR_OCCURRED( async_req_1_2( phone, NET_PACKET_CREATE_1, content, & packet_id, & size )) |
| 221 | || ERROR_OCCURRED( packet_return( phone, & packet, packet_id, size ))){ |
191 | || ERROR_OCCURRED( packet_return( phone, & packet, packet_id, size ))){ |
| 222 | return NULL; |
192 | return NULL; |
| 223 | } |
193 | } |
| 224 | return packet; |
194 | return packet; |
| 225 | } |
195 | } |