Changeset 5425

Show
Ignore:
Timestamp:
03/17/08 11:53:07 (4 months ago)
Author:
morris
Message:

Add functions to create messages from data and data from messages

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • libwired/trunk/libwired/p7/wi-p7-message.c

    r5366 r5425  
    107107 
    108108 
     109wi_p7_message_t * wi_p7_message_with_data(wi_data_t *data, wi_p7_serialization_t serialization, wi_p7_spec_t *p7_spec) { 
     110        return wi_autorelease(wi_p7_message_init_with_data(wi_p7_message_alloc(), data, serialization, p7_spec)); 
     111} 
     112 
     113 
     114 
    109115#pragma mark - 
    110116 
     
    137143        } 
    138144         
     145        return p7_message; 
     146} 
     147 
     148 
     149 
     150wi_p7_message_t * wi_p7_message_init_with_data(wi_p7_message_t *p7_message, wi_data_t *data, wi_p7_serialization_t serialization, wi_p7_spec_t *p7_spec) { 
     151        p7_message->spec                        = wi_retain(p7_spec); 
     152        p7_message->serialization       = serialization; 
     153         
     154        if(serialization == WI_P7_BINARY) { 
     155                p7_message->binary_size         = wi_data_length(data); 
     156                p7_message->binary_capacity     = p7_message->binary_size; 
     157                p7_message->binary_buffer       = wi_malloc(p7_message->binary_capacity); 
     158                 
     159                memcpy(p7_message->binary_buffer, wi_data_bytes(data), p7_message->binary_size); 
     160        } else { 
     161                p7_message->xml_length          = wi_data_length(data); 
     162                p7_message->xml_buffer          = wi_malloc(p7_message->xml_length + 1); 
     163                 
     164                memcpy(p7_message->xml_buffer, wi_data_bytes(data), p7_message->xml_length); 
     165                 
     166                p7_message->xml_buffer[p7_message->xml_length] = '\0'; 
     167        } 
     168         
     169        wi_p7_message_deserialize(p7_message); 
     170         
     171        if(!p7_message->name) { 
     172                wi_error_set_libwired_error(WI_ERROR_P7_UNKNOWNMESSAGE); 
     173                 
     174                wi_release(p7_message); 
     175                 
     176                return NULL; 
     177        } 
     178 
    139179        return p7_message; 
    140180} 
     
    9901030 
    9911031 
     1032wi_data_t * wi_p7_message_data_with_serialization(wi_p7_message_t *p7_message, wi_p7_serialization_t serialization) { 
     1033        wi_p7_message_serialize(p7_message, serialization); 
     1034         
     1035        if(serialization == WI_P7_BINARY) 
     1036                return wi_data_with_bytes(p7_message->binary_buffer, p7_message->binary_size); 
     1037        else 
     1038                return wi_data_with_bytes(p7_message->xml_buffer, p7_message->xml_length); 
     1039} 
     1040 
     1041 
     1042 
    9921043#pragma mark - 
    9931044 
  • libwired/trunk/libwired/p7/wi-p7-message.h

    r5349 r5425  
    7676 
    7777WI_EXPORT wi_p7_message_t *                     wi_p7_message_with_name(wi_string_t *, wi_p7_spec_t *); 
     78WI_EXPORT wi_p7_message_t *                     wi_p7_message_with_data(wi_data_t *, wi_p7_serialization_t, wi_p7_spec_t *); 
    7879 
    7980WI_EXPORT wi_p7_message_t *                     wi_p7_message_alloc(void); 
    8081WI_EXPORT wi_p7_message_t *                     wi_p7_message_init_with_name(wi_p7_message_t *, wi_string_t *, wi_p7_spec_t *); 
     82WI_EXPORT wi_p7_message_t *                     wi_p7_message_init_with_data(wi_p7_message_t *, wi_data_t *, wi_p7_serialization_t, wi_p7_spec_t *); 
    8183 
    8284WI_EXPORT wi_boolean_t                          wi_p7_message_set_name(wi_p7_message_t *, wi_string_t *); 
     
    8587WI_EXPORT wi_p7_serialization_t         wi_p7_message_serialization(wi_p7_message_t *); 
    8688WI_EXPORT wi_hash_t *                           wi_p7_message_fields(wi_p7_message_t *); 
     89WI_EXPORT wi_data_t *                           wi_p7_message_data_with_serialization(wi_p7_message_t *, wi_p7_serialization_t); 
    8790 
    8891WI_EXPORT wi_boolean_t                          wi_p7_message_set_bool_for_name(wi_p7_message_t *, wi_p7_boolean_t, wi_string_t *);