Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static int gg_session_handle_xml_event110(struct gg_session *gs, uint32_t type, const char *ptr, size_t len, struct gg_event *ge)
- {
- int offset = 0;
- uint16_t seq, data_len;
- char *data = NULL;
- if (offset + 3 > len)
- goto fail;
- /* 0x08 00 10 */
- offset += 3;
- if (offset + 2 > len)
- goto fail;
- offset += gg_packed_int_read(ptr + offset, &seq);
- if (offset + 1 > len)
- goto fail;
- /* 0x1a */
- offset++;
- if (offset + 2 > len)
- goto fail;
- offset += gg_packed_int_read(ptr + offset, &data_len);
- data = malloc(data_len + 1);
- if (data == NULL)
- goto fail;
- memcpy(data, ptr + offset, data_len);
- data[data_len] = '\0';
- ge->type = GG_EVENT_XML_EVENT;
- ge->event.xml_event.data = data;
- return gg_ack_gg11(gs, GG_ACK110_MPA, seq, ge);
- fail:
- free(data);
- return -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement