blob: 41b9e5f905c65c7ebf624cdb811a330fea194471 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2017 Easy Global Market
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
*
* Contributors:
* Spaseski Naum - initial implementation
******************************************************************************/
#include "MQTT_v3_1_1_IPL4SizeFunction.hh"
namespace MQTT__v3__1__1__IPL4SizeFunction {
INTEGER f__calc__MQTT__length(const OCTETSTRING& data){
int multiplier, value, i, j;
i = 0; // encoded byte
j = 2; // additional real size
multiplier = 1;
value = 0;
do {
i++;
value += (oct2int(data[i]) & 127) * multiplier + j;
if (multiplier > 128*128*128){
if(TTCN_Logger::log_this_event(LOG_ALL)){
TTCN_Logger::begin_event(LOG_ALL);
TTCN_Logger::log_event("Error: Wrong size of the message!");
TTCN_Logger::end_event();
}
return -1; //error case, bigger than the MQTT limit
}
multiplier *= 128;
j = 1;
}while((oct2int(data[i]) & 128) != 0);
return value;
}
}