Example #1
0
/**
 * return the package total length
 */
ssize_t swProtocol_get_package_length(swProtocol *protocol, swConnection *conn, char *data, uint32_t size)
{
    uint16_t length_offset = protocol->package_length_offset;
    uint8_t package_length_size = protocol->get_package_length_size ? protocol->get_package_length_size(conn) : protocol->package_length_size;
    int32_t body_length;
    /**
     * no have length field, wait more data
     */
    if (size < length_offset + package_length_size)
    {
        protocol->real_header_length = length_offset + package_length_size;
        return 0;
    }
    body_length = swoole_unpack(protocol->package_length_type, data + length_offset);
    //Length error
    //Protocol length is not legitimate, out of bounds or exceed the allocated length
    if (body_length < 0)
    {
        swWarn("invalid package, remote_addr=%s:%d, length=%d, size=%d.", swConnection_get_ip(conn), swConnection_get_port(conn), body_length, size);
        return SW_ERR;
    }
    swDebug("length=%d", protocol->package_body_offset + body_length);
    //total package length
    return protocol->package_body_offset + body_length;
}
Example #2
0
void swoole_dump_bin(char *data, char type, int size)
{
	int i;
	int type_size = swoole_type_size(type);
	int n = size / type_size;

	for(i = 0; i < n; i++)
	{
		printf("%d,", swoole_unpack(type, data + type_size*i));
	}
	printf("\n");
}