OpenTTCN/Developer corner/Implementing external functions/Skeletons/C/Utilities.cxx
From OpenTTCN
Home | Developer's corner | Knowledge base | Working documents | Documentation | OpenTTCN IDE | Tutorials | Training | How do I | Frequently asked questions | Technical support |
Utilities.cxx
#include "Utilities.h"
#include <isl/TTCN3.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <assert.h>
#include <ctype.h>
#include <malloc.h>
#ifndef _WIN32
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#else
#include <winsock2.h>
typedef int socklen_t;
#endif
#define MAX_BUFFER_SIZE 8192
long tciValueToLong(TciValue value)
{
String valNumberAbs;
Boolean valNumberSign;
char* valNumber;
long val;
valNumberAbs = tciGetIntAbs(value);
valNumberSign = tciGetIntSign(value);
valNumber = (char *) malloc(strlen(valNumberAbs) + 2);
valNumber[0] = valNumberSign ? '+' : '-';
strcpy(valNumber + 1, valNumberAbs);
val = atol(valNumber);
free(valNumber);
return val;
}
void assignLongToTciValue(TciValue dst, long value)
{
char valAbsValue[MAX_BUFFER_SIZE];
Boolean valSignValue;
valSignValue = (value >= 0) ? 1 : 0;
if (value < 0) value = -value;
sprintf(valAbsValue, "%li", value);
tciSetIntAbs(dst, valAbsValue);
tciSetIntSign(dst, valSignValue);
}
TciValue longToTciValue(long value)
{
TciValue result = tciNewInstance(tciGetIntegerType());
assignLongToTciValue(result, value);
return result;
}
void tciValueToCharstring(char** dst_str, long* dst_str_len, TciValue value)
{
long len = 0;
TciCharStringValue cStringValue = tciGetCStringValue(value);
len = (long) cStringValue.length;
*dst_str = (char *) malloc(len + 1);
*dst_str_len = len;
memcpy(*dst_str, cStringValue.string + 1, len);
(*dst_str)[len] = 0;
}
void assignCharstringToTciValue(TciValue dst, const char* value)
{
TciCharStringValue cStringValue;
int len = (int) strlen(value);
char* rawValue = (char *) malloc(len + 3);
sprintf(rawValue, "\"%s\"", value);
cStringValue.length = len;
cStringValue.string = rawValue;
tciSetCStringValue(dst, cStringValue);
free(rawValue);
}
TciValue charstringToTciValue(const char* value)
{
TciValue result = tciNewInstance(tciGetTciCharstringType());
assignCharstringToTciValue(result, value);
return result;
}
void assignSizedCharstringToTciValue(TciValue dst, const char* value, long len)
{
TciCharStringValue cStringValue;
char* rawValue = (char *) malloc(len + 3);
rawValue[0] = '"';
memcpy(rawValue + 1, value, len);
rawValue[len + 1] = '"';
rawValue[len + 2] = 0;
cStringValue.length = len;
cStringValue.string = rawValue;
tciSetCStringValue(dst, cStringValue);
free(rawValue);
}
TciValue sizedCharstringToTciValue(const char* value, long len)
{
TciValue result = tciNewInstance(tciGetTciCharstringType());
assignSizedCharstringToTciValue(result, value, len);
return result;
}
