mirror of
https://github.com/faye/websocket-driver-ruby.git
synced 2025-11-01 13:59:38 +00:00
40 lines
717 B
C
40 lines
717 B
C
#include "frame.h"
|
|
|
|
wsd_Frame *wsd_Frame_create()
|
|
{
|
|
wsd_Frame *frame = calloc(1, sizeof(wsd_Frame));
|
|
if (frame == NULL) return NULL;
|
|
|
|
frame->payload = NULL;
|
|
|
|
return frame;
|
|
}
|
|
|
|
void wsd_Frame_destroy(wsd_Frame *frame)
|
|
{
|
|
if (frame == NULL) return;
|
|
|
|
wsd_clear_pointer(free, frame->payload);
|
|
|
|
free(frame);
|
|
}
|
|
|
|
void wsd_Frame_mask(wsd_Frame *frame)
|
|
{
|
|
uint64_t i = 0;
|
|
|
|
if (!frame->masked) return;
|
|
|
|
for (i = 0; i < frame->length; i++) {
|
|
frame->payload[i] ^= frame->masking_key[i % 4];
|
|
}
|
|
}
|
|
|
|
uint64_t wsd_Frame_copy(wsd_Frame *frame, uint8_t *target, uint64_t offset)
|
|
{
|
|
uint64_t n = frame->length;
|
|
|
|
memcpy(target + offset, frame->payload, n);
|
|
return offset + n;
|
|
}
|