void SV_BufferAddString (CDBuffer* self, CDString* data) { CDString* sanitized = SV_StringSanitize(data); SVShort size = htons(CD_StringSize(sanitized)); evbuffer_add(self->raw, &size, SVShortSize); evbuffer_add(self->raw, CD_StringContent(sanitized), CD_StringSize(sanitized)); SV_DestroyString(sanitized); }
void SV_DestroyPacketData (SVPacket* self) { if (!self->data) { return; } switch (self->chain) { case SVRequest: { switch (self->type) { case SVLogin: { SVPacketLogin* packet = (SVPacketLogin*) self->data; SV_DestroyString(packet->request.username); } break; case SVHandshake: { SVPacketHandshake* packet = (SVPacketHandshake*) self->data; SV_DestroyString(packet->request.username); } break; case SVChat: { SVPacketChat* packet = (SVPacketChat*) self->data; SV_DestroyString(packet->request.message); } break; case SVEntityMetadata: { SVPacketEntityMetadata* packet = (SVPacketEntityMetadata*) self->data; SV_DestroyMetadata(packet->request.metadata); } break; case SVUpdateSign: { SVPacketUpdateSign* packet = (SVPacketUpdateSign*) self->data; SV_DestroyString(packet->request.first); SV_DestroyString(packet->request.second); SV_DestroyString(packet->request.third); SV_DestroyString(packet->request.fourth); } break; case SVDisconnect: { SVPacketDisconnect* packet = (SVPacketDisconnect*) self->data; SV_DestroyString(packet->request.reason); } default: break; } } break; case SVResponse: { switch (self->type) { case SVLogin: { SVPacketLogin* packet = (SVPacketLogin*) self->data; SV_DestroyString(packet->response.serverName); } break; case SVHandshake: { SVPacketHandshake* packet = (SVPacketHandshake*) self->data; SV_DestroyString(packet->response.hash); } break; case SVChat: { SVPacketChat* packet = (SVPacketChat*) self->data; SV_DestroyString(packet->request.message); } break; case SVNamedEntitySpawn: { SVPacketNamedEntitySpawn* packet = (SVPacketNamedEntitySpawn*) self->data; SV_DestroyString(packet->response.name); } break; case SVSpawnMob: { SVPacketSpawnMob* packet = (SVPacketSpawnMob*) self->data; SV_DestroyMetadata(packet->response.metadata); } break; case SVPainting: { SVPacketPainting* packet = (SVPacketPainting*) self->data; SV_DestroyString(packet->response.title); } break; case SVEntityMetadata: { SVPacketEntityMetadata* packet = (SVPacketEntityMetadata*) self->data; SV_DestroyMetadata(packet->response.metadata); } break; case SVMapChunk: { SVPacketMapChunk* packet = (SVPacketMapChunk*) self->data; CD_free(packet->response.item); } break; case SVMultiBlockChange: { SVPacketMultiBlockChange* packet = (SVPacketMultiBlockChange*) self->data; CD_free(packet->response.coordinate); CD_free(packet->response.type); CD_free(packet->response.metadata); } break; case SVExplosion: { SVPacketExplosion* packet = (SVPacketExplosion*) self->data; CD_free(packet->response.item); } break; case SVOpenWindow: { SVPacketOpenWindow* packet = (SVPacketOpenWindow*) self->data; SV_DestroyString(packet->response.title); } break; case SVWindowItems: { SVPacketWindowItems* packet = (SVPacketWindowItems*) self->data; CD_free(packet->response.item); } break; case SVDisconnect: { SVPacketDisconnect* packet = (SVPacketDisconnect*) self->data; SV_DestroyString(packet->response.reason); } break; default: break; } } break; } }