blob: 02b1bcafb195d3e4aa7f18b2c1998ff96562a5fc [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
// //
// Copyright (c) 2000-2017 Ericsson Telecom AB //
// //
// 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 //
// //
///////////////////////////////////////////////////////////////////////////////
#include "EPTF_CLL_Buffer_Functions.hh"
namespace EPTF__CLL__Buffer__Functions {
void f_EPTF_Buffer_warning(const char* message) {
TTCN_Logger::begin_event(TTCN_WARNING);
TTCN_Logger::log_event_str("EPTF_Buffer: Warning: ");
TTCN_Logger::log_event_str(message);
TTCN_Logger::end_event();
}
int v_EPTF_numberOfBuffers = 0;
int v_EPTF_sizeOfBuffers = 0;
typedef TTCN_Buffer* TTCN_BufferPtr;
TTCN_BufferPtr* v_EPTF_buffers=NULL;
void f__EPTF__Buffer__init() {
f__EPTF__Buffer__cleanup();
}
void f__EPTF__Buffer__cleanup() {
if (v_EPTF_buffers!=NULL) {
for(int i=0;i<v_EPTF_numberOfBuffers;i++) {
if(v_EPTF_buffers[i] != NULL) delete v_EPTF_buffers[i];
}
Free(v_EPTF_buffers);
v_EPTF_buffers = NULL;
}
v_EPTF_numberOfBuffers = 0;
v_EPTF_sizeOfBuffers = 0;
}
#define EPTF_BUFFER_GROWBY 16
INTEGER f__EPTF__Buffer__new() {
v_EPTF_numberOfBuffers++; // note: if f__EPTF__Buffer__delete is implemented, this counter must not be decremented!
//printf("v_EPTF_numberOfBuffers: %i \n\r",v_EPTF_numberOfBuffers);
if(v_EPTF_numberOfBuffers<v_EPTF_sizeOfBuffers)
{
v_EPTF_buffers[v_EPTF_numberOfBuffers-1] = new TTCN_Buffer;
return v_EPTF_numberOfBuffers-1;
}
else
{
/* for(int i=0; i<v_EPTF_sizeOfBuffers; i++) {
if (v_EPTF_buffers[i] == NULL)
{
v_EPTF_buffers[i]=new TTCN_Buffer;
return i;
}
}*/ // FIXME: may be needed when f__EPTF__Buffer__delete is implemented
// create a new array for TTCN_Buffers with new size (size+1)
v_EPTF_sizeOfBuffers += EPTF_BUFFER_GROWBY;
if(v_EPTF_buffers==NULL) v_EPTF_buffers = (TTCN_BufferPtr*)Malloc(v_EPTF_sizeOfBuffers * sizeof(TTCN_BufferPtr));
else v_EPTF_buffers = (TTCN_BufferPtr*)Realloc(v_EPTF_buffers, v_EPTF_sizeOfBuffers * sizeof(TTCN_BufferPtr));
v_EPTF_buffers[v_EPTF_numberOfBuffers-1] = new TTCN_Buffer;
for(int i=v_EPTF_numberOfBuffers; i<v_EPTF_sizeOfBuffers; i++) {
v_EPTF_buffers[i] = NULL;
}
return v_EPTF_numberOfBuffers-1;
}
//never reached
return -1;
}
void f__EPTF__Buffer__clear(const INTEGER& pl__bufferId) {
if (pl__bufferId>=v_EPTF_numberOfBuffers) {
f_EPTF_Buffer_warning(CHARSTRING("f__EPTF__Buffer__clear: Buffer with id ")+int2str(pl__bufferId)+" does not exists.");
return;
}
v_EPTF_buffers[pl__bufferId]->clear();
}
void f__EPTF__Buffer__rewind(const INTEGER& pl__bufferId) {
if (pl__bufferId>=v_EPTF_numberOfBuffers) {
f_EPTF_Buffer_warning(CHARSTRING("f__EPTF__Buffer__rewind: Buffer with id ")+int2str(pl__bufferId)+" does not exists.");
return;
}
v_EPTF_buffers[pl__bufferId]->rewind();
}
INTEGER f__EPTF__Buffer__get__pos(const INTEGER& pl__bufferId) {
if (pl__bufferId>=v_EPTF_numberOfBuffers) {
f_EPTF_Buffer_warning(CHARSTRING("f__EPTF__Buffer__get__pos: Buffer with id ")+int2str(pl__bufferId)+" does not exists.");
return -1;
}
return v_EPTF_buffers[pl__bufferId]->get_pos();
}
void f__EPTF__Buffer__set__pos(const INTEGER& pl__bufferId, const INTEGER& pl__pos) {
if (pl__bufferId>=v_EPTF_numberOfBuffers) {
f_EPTF_Buffer_warning(CHARSTRING("f__EPTF__Buffer__set__pos: Buffer with id ")+int2str(pl__bufferId)+" does not exists.");
return;
}
v_EPTF_buffers[pl__bufferId]->set_pos(pl__pos);
}
INTEGER f__EPTF__Buffer__get__len(const INTEGER& pl__bufferId) {
if (pl__bufferId>=v_EPTF_numberOfBuffers) {
f_EPTF_Buffer_warning(CHARSTRING("f__EPTF__Buffer__get__len: Buffer with id ")+int2str(pl__bufferId)+" does not exists.");
return -1;
}
return v_EPTF_buffers[pl__bufferId]->get_len();
}
void f__EPTF__Buffer__get__data(const INTEGER& pl__bufferId, OCTETSTRING& pl__data) {
if (pl__bufferId>=v_EPTF_numberOfBuffers) {
f_EPTF_Buffer_warning(CHARSTRING("f__EPTF__Buffer__get__data: Buffer with id ")+int2str(pl__bufferId)+" does not exists.");
return;
}
pl__data = OCTETSTRING(v_EPTF_buffers[pl__bufferId]->get_len(),v_EPTF_buffers[pl__bufferId]->get_data());
}
INTEGER f__EPTF__Buffer__get__read__len(const INTEGER& pl__bufferId) {
if (pl__bufferId>=v_EPTF_numberOfBuffers) {
f_EPTF_Buffer_warning(CHARSTRING("f__EPTF__Buffer__get__read__len: Buffer with id ")+int2str(pl__bufferId)+" does not exists.");
return -1;
}
return v_EPTF_buffers[pl__bufferId]->get_read_len();
}
void f__EPTF__Buffer__get__read__data(const INTEGER& pl__bufferId, OCTETSTRING& pl__data) {
if (pl__bufferId>=v_EPTF_numberOfBuffers) {
f_EPTF_Buffer_warning(CHARSTRING("f__EPTF__Buffer__get__read__data: Buffer with id ")+int2str(pl__bufferId)+" does not exists.");
return;
}
pl__data = OCTETSTRING(v_EPTF_buffers[pl__bufferId]->get_read_len(),v_EPTF_buffers[pl__bufferId]->get_read_data());
}
void f__EPTF__Buffer__put__os(const INTEGER& pl__bufferId, const OCTETSTRING& pl__data) {
if (pl__bufferId>=v_EPTF_numberOfBuffers) {
f_EPTF_Buffer_warning(CHARSTRING("f__EPTF__Buffer__put__os: Buffer with id ")+int2str(pl__bufferId)+" does not exists.");
return;
}
v_EPTF_buffers[pl__bufferId]->put_os(pl__data);
}
void f__EPTF__Buffer__increase__length(const INTEGER& pl__bufferId, const INTEGER& pl__count) {
if (pl__bufferId>=v_EPTF_numberOfBuffers) {
f_EPTF_Buffer_warning(CHARSTRING("f__EPTF__Buffer__increase__length: Buffer with id ")+int2str(pl__bufferId)+" does not exists.");
return;
}
v_EPTF_buffers[pl__bufferId]->increase_length(pl__count);
}
void f__EPTF__Buffer__cut(const INTEGER& pl__bufferId) {
if (pl__bufferId>=v_EPTF_numberOfBuffers) {
f_EPTF_Buffer_warning(CHARSTRING("f__EPTF__Buffer__cut: Buffer with id ")+int2str(pl__bufferId)+" does not exists.");
return;
}
v_EPTF_buffers[pl__bufferId]->cut();
}
void f__EPTF__Buffer__cut__end(const INTEGER& pl__bufferId) {
if (pl__bufferId>=v_EPTF_numberOfBuffers) {
f_EPTF_Buffer_warning(CHARSTRING("f__EPTF__Buffer__cut__end: Buffer with id ")+int2str(pl__bufferId)+" does not exists.");
return;
}
v_EPTF_buffers[pl__bufferId]->cut_end();
}
BOOLEAN f__EPTF__Buffer__contains__complete__TLV(const INTEGER& pl__bufferId) {
if (pl__bufferId>=v_EPTF_numberOfBuffers) {
f_EPTF_Buffer_warning(CHARSTRING("f__EPTF__Buffer__contains__complete__TLV: Buffer with id ")+int2str(pl__bufferId)+" does not exists.");
return false;
}
return v_EPTF_buffers[pl__bufferId]->contains_complete_TLV();
}
void f__EPTF__Buffer__getDataFromOffset(const INTEGER& pl__bufferId, const INTEGER& pl__pos, const INTEGER& pl__count, OCTETSTRING& pl__data) {
if (pl__bufferId>=v_EPTF_numberOfBuffers) {
f_EPTF_Buffer_warning(CHARSTRING("f__EPTF__Buffer__get__read__data: Buffer with id ")+int2str(pl__bufferId)+" does not exists.");
return;
}
unsigned int pos = ((unsigned int)pl__pos>v_EPTF_buffers[pl__bufferId]->get_len()?v_EPTF_buffers[pl__bufferId]->get_len():(unsigned int)pl__pos);
if (pos<0) {
pos=0;
}
unsigned int count = (pos+(unsigned int)pl__count>v_EPTF_buffers[pl__bufferId]->get_len()?v_EPTF_buffers[pl__bufferId]->get_len()-pos:(unsigned int)pl__count);
if (count<0) {
count=0;
}
pl__data = OCTETSTRING(count,v_EPTF_buffers[pl__bufferId]->get_data()+pos);
}
} //namespace EPTF__CLL__Buffer__Functions