Changeset 5251
- Timestamp:
- 02/11/08 14:58:22 (7 months ago)
- Files:
-
- libwired/trunk/libwired/p7/wi-p7-message.c (modified) (9 diffs)
- libwired/trunk/libwired/p7/wi-p7-message.h (modified) (1 diff)
- libwired/trunk/libwired/p7/wi-p7-socket.c (modified) (1 diff)
- libwired/trunk/libwired/p7/wi-p7-socket.h (modified) (1 diff)
- libwired/trunk/libwired/p7/wi-p7-spec.c (modified) (1 diff)
- libwired/trunk/libwired/p7/wi-p7-spec.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
libwired/trunk/libwired/p7/wi-p7-message.c
r5245 r5251 57 57 58 58 static wi_string_t * _wi_p7_message_field_string_value(wi_p7_message_t *, wi_string_t *, wi_p7_type_t); 59 static wi_boolean_t _wi_p7_message_get_binary_buffer_for_reading_for_id(wi_p7_message_t *, uint32_t, wi_p7_type_t,unsigned char **, uint32_t *);59 static wi_boolean_t _wi_p7_message_get_binary_buffer_for_reading_for_id(wi_p7_message_t *, uint32_t, unsigned char **, uint32_t *); 60 60 static wi_boolean_t _wi_p7_message_get_binary_buffer_for_reading_for_name(wi_p7_message_t *, wi_string_t *, unsigned char **, uint32_t *); 61 static wi_boolean_t _wi_p7_message_get_binary_buffer_for_writing_for_id(wi_p7_message_t *, uint32_t, uint32_t, unsigned char **); 61 62 static wi_boolean_t _wi_p7_message_get_binary_buffer_for_writing_for_name(wi_p7_message_t *, wi_string_t *, uint32_t, unsigned char **, uint32_t *); 62 63 static void _wi_p7_message_set_xml_field(wi_p7_message_t *, wi_p7_type_t, wi_string_t *, wi_string_t *); … … 454 455 455 456 456 static wi_boolean_t _wi_p7_message_get_binary_buffer_for_reading_for_id(wi_p7_message_t *p7_message, uint32_t in_field_id, wi_p7_type_t in_type_id,unsigned char **out_buffer, uint32_t *out_field_size) {457 static wi_boolean_t _wi_p7_message_get_binary_buffer_for_reading_for_id(wi_p7_message_t *p7_message, uint32_t in_field_id, unsigned char **out_buffer, uint32_t *out_field_size) { 457 458 unsigned char *buffer, *start; 458 459 uint32_t message_size, field_id, field_size; … … 474 475 } 475 476 476 if((in_field_id > 0 && field_id == in_field_id) || 477 (in_type_id > 0 && wi_p7_spec_field_type(p7_message->spec, field_id) == in_type_id)) { 477 if(field_id == in_field_id) { 478 478 if(out_buffer) 479 479 *out_buffer = buffer; … … 505 505 } 506 506 507 return _wi_p7_message_get_binary_buffer_for_reading_for_id(p7_message, field_id, 0, out_buffer, out_field_size); 508 } 509 510 511 512 static wi_boolean_t _wi_p7_message_get_binary_buffer_for_writing_for_name(wi_p7_message_t *p7_message, wi_string_t *field_name, uint32_t length, unsigned char **out_buffer, uint32_t *out_field_id) { 513 uint32_t field_id, field_size, old_size, new_size; 514 515 field_id = wi_p7_spec_field_id(p7_message->spec, field_name); 516 517 if(field_id == WI_P7_SPEC_FIELD_ID_NULL) { 518 wi_error_set_libwired_p7_error(WI_ERROR_P7_UNKNOWNFIELD, 519 WI_STR("No id found for field \"%@\""), field_name); 520 521 return false; 522 } 507 return _wi_p7_message_get_binary_buffer_for_reading_for_id(p7_message, field_id, out_buffer, out_field_size); 508 } 509 510 511 512 static wi_boolean_t _wi_p7_message_get_binary_buffer_for_writing_for_id(wi_p7_message_t *p7_message, uint32_t field_id, uint32_t length, unsigned char **out_buffer) { 513 uint32_t field_size, old_size, new_size; 523 514 524 515 if(length > 0) … … 527 518 field_size = wi_p7_spec_field_size(p7_message->spec, field_id); 528 519 529 if(_wi_p7_message_get_binary_buffer_for_reading_for_id(p7_message, field_id, 0,out_buffer, &old_size)) {520 if(_wi_p7_message_get_binary_buffer_for_reading_for_id(p7_message, field_id, out_buffer, &old_size)) { 530 521 if(field_size == old_size) 531 522 return true; … … 545 536 *out_buffer = p7_message->binary_buffer + p7_message->binary_size; 546 537 538 p7_message->binary_size += new_size; 539 540 return true; 541 } 542 543 544 545 static wi_boolean_t _wi_p7_message_get_binary_buffer_for_writing_for_name(wi_p7_message_t *p7_message, wi_string_t *field_name, uint32_t length, unsigned char **out_buffer, uint32_t *out_field_id) { 546 uint32_t field_id; 547 548 field_id = wi_p7_spec_field_id(p7_message->spec, field_name); 549 550 if(field_id == WI_P7_SPEC_FIELD_ID_NULL) { 551 wi_error_set_libwired_p7_error(WI_ERROR_P7_UNKNOWNFIELD, 552 WI_STR("No id found for field \"%@\""), field_name); 553 554 return false; 555 } 556 547 557 if(out_field_id) 548 558 *out_field_id = field_id; 549 550 p7_message->binary_size += new_size; 551 552 return true; 559 560 return _wi_p7_message_get_binary_buffer_for_writing_for_id(p7_message, field_id, length, out_buffer); 553 561 } 554 562 … … 1223 1231 return NULL; 1224 1232 1225 return wi_string_with_bytes_no_copy(binary, field_size , false);1233 return wi_string_with_bytes_no_copy(binary, field_size - 1, false); 1226 1234 } else { 1227 1235 string = _wi_p7_message_xml_value_for_name(p7_message, field_name); … … 1434 1442 return NULL; 1435 1443 1436 return wi_date_with_iso8601_string(wi_string_with_bytes_no_copy(binary, field_size , false));1444 return wi_date_with_iso8601_string(wi_string_with_bytes_no_copy(binary, field_size - 1, false)); 1437 1445 } else { 1438 1446 string = _wi_p7_message_xml_value_for_name(p7_message, field_name); … … 1447 1455 } 1448 1456 1457 1458 1459 #pragma mark - 1460 1461 wi_boolean_t wi_p7_message_write_binary(wi_p7_message_t *p7_message, const void *buffer, uint32_t field_size, wi_uinteger_t field_id) { 1462 unsigned char *binary; 1463 1464 if(p7_message->serialization != WI_P7_BINARY) 1465 return false; 1466 1467 if(!_wi_p7_message_get_binary_buffer_for_writing_for_id(p7_message, field_id, field_size, &binary)) 1468 return false; 1469 1470 wi_write_swap_host_to_big_int32(binary, 0, field_id); 1471 1472 if(wi_p7_spec_field_size(p7_message->spec, field_id) > 0) { 1473 memcpy(binary + 4, buffer, field_size); 1474 } else { 1475 wi_write_swap_host_to_big_int32(binary, 4, field_size); 1476 1477 memcpy(binary + 8, buffer, field_size); 1478 } 1479 1480 return true; 1481 } 1482 1483 1484 1485 wi_boolean_t wi_p7_message_read_binary(wi_p7_message_t *p7_message, unsigned char **buffer, uint32_t *field_size, wi_uinteger_t field_id) { 1486 if(p7_message->serialization != WI_P7_BINARY) 1487 return false; 1488 1489 return _wi_p7_message_get_binary_buffer_for_reading_for_id(p7_message, field_id, buffer, field_size); 1490 } 1491 1449 1492 #endif libwired/trunk/libwired/p7/wi-p7-message.h
r5244 r5251 112 112 WI_EXPORT wi_date_t * wi_p7_message_date_for_name(wi_p7_message_t *, wi_string_t *); 113 113 114 WI_EXPORT wi_boolean_t wi_p7_message_write_binary(wi_p7_message_t *, const void *, uint32_t, wi_uinteger_t); 115 WI_EXPORT wi_boolean_t wi_p7_message_read_binary(wi_p7_message_t *, unsigned char **, uint32_t *, wi_uinteger_t); 116 114 117 #endif /* WI_P7_MESSAGE_H */ libwired/trunk/libwired/p7/wi-p7-socket.c
r5247 r5251 1385 1385 1386 1386 1387 void wi_p7_socket_close(wi_p7_socket_t *p7_socket) { 1388 } 1389 1390 1391 1392 #pragma mark - 1393 1387 1394 wi_boolean_t wi_p7_socket_write_message(wi_p7_socket_t *p7_socket, wi_time_interval_t timeout, wi_p7_message_t *p7_message) { 1388 1395 wi_boolean_t result; libwired/trunk/libwired/p7/wi-p7-socket.h
r5234 r5251 74 74 WI_EXPORT wi_boolean_t wi_p7_socket_connect(wi_p7_socket_t *, wi_time_interval_t, wi_p7_options_t, wi_p7_serialization_t, wi_string_t *, wi_string_t *); 75 75 WI_EXPORT wi_boolean_t wi_p7_socket_accept(wi_p7_socket_t *, wi_time_interval_t, wi_p7_options_t); 76 WI_EXPORT void wi_p7_socket_close(wi_p7_socket_t *); 77 76 78 WI_EXPORT wi_boolean_t wi_p7_socket_write_message(wi_p7_socket_t *, wi_time_interval_t, wi_p7_message_t *); 77 79 WI_EXPORT wi_p7_message_t * wi_p7_socket_read_message(wi_p7_socket_t *, wi_time_interval_t); libwired/trunk/libwired/p7/wi-p7-spec.c
r5242 r5251 1245 1245 1246 1246 1247 wi_hash_t * wi_p7_spec_field_names_for_ids(wi_p7_spec_t *p7_spec) { 1248 wi_enumerator_t *enumerator; 1249 wi_hash_t *hash; 1250 _wi_p7_spec_field_t *field; 1251 1252 hash = wi_hash_init_with_capacity_and_callbacks(wi_hash_alloc(), 1253 wi_hash_count(p7_spec->fields_name), wi_hash_null_key_callbacks, wi_hash_default_value_callbacks); 1254 1255 enumerator = wi_hash_data_enumerator(p7_spec->fields_name); 1256 1257 while((field = wi_enumerator_next_data(enumerator))) 1258 wi_hash_set_data_for_key(hash, field->name, (void *) field->id); 1259 1260 if(_wi_p7_spec_builtin_spec) { 1261 enumerator = wi_hash_data_enumerator(_wi_p7_spec_builtin_spec->fields_name); 1262 1263 while((field = wi_enumerator_next_data(enumerator))) 1264 wi_hash_set_data_for_key(hash, field->name, (void *) field->id); 1265 } 1266 1267 return wi_autorelease(hash); 1268 } 1269 1270 1271 1247 1272 wi_p7_type_t wi_p7_spec_field_type(wi_p7_spec_t *p7_spec, wi_uinteger_t field_id) { 1248 1273 _wi_p7_spec_field_t *field; libwired/trunk/libwired/p7/wi-p7-spec.h
r4696 r5251 56 56 WI_EXPORT wi_uinteger_t wi_p7_spec_field_id(wi_p7_spec_t *, wi_string_t *); 57 57 WI_EXPORT wi_string_t * wi_p7_spec_field_name(wi_p7_spec_t *, wi_uinteger_t); 58 WI_EXPORT wi_hash_t * wi_p7_spec_field_names_for_ids(wi_p7_spec_t *); 58 59 WI_EXPORT wi_p7_type_t wi_p7_spec_field_type(wi_p7_spec_t *, wi_uinteger_t); 59 60 WI_EXPORT wi_uinteger_t wi_p7_spec_field_size(wi_p7_spec_t *, wi_uinteger_t);
