| 1070 | } |
| 1071 | |
| 1072 | ssize_t pn_message_encode2(pn_message_t *msg, pn_rwbytes_t *buffer) { |
| 1073 | static const size_t initial_size = 256; |
| 1074 | int err = 0; |
| 1075 | size_t size = 0; |
| 1076 | |
| 1077 | if (buffer->start == NULL) { |
| 1078 | buffer->start = (char*)malloc(initial_size); |
| 1079 | buffer->size = initial_size; |
| 1080 | } |
| 1081 | if (buffer->start == NULL) return PN_OUT_OF_MEMORY; |
| 1082 | size = buffer->size; |
| 1083 | while ((err = pn_message_encode(msg, buffer->start, &size)) == PN_OVERFLOW) { |
| 1084 | buffer->size *= 2; |
| 1085 | buffer->start = (char*)realloc(buffer->start, buffer->size); |
| 1086 | if (buffer->start == NULL) return PN_OUT_OF_MEMORY; |
| 1087 | size = buffer->size; |
| 1088 | } |
| 1089 | return err == 0 ? (ssize_t)size : err; |
| 1090 | } |
| 1091 | |
| 1092 | ssize_t pn_message_send(pn_message_t *msg, pn_link_t *sender, pn_rwbytes_t *buffer) { |
| 1093 | pn_rwbytes_t local_buf = { 0 }; |