* Author: lamikr
*/
+#include <malloc.h>
+#include <omniORB4/CORBA.h>
+
#include <plp/log.h>
+#include <plp/retval.h>
#include "BusMessage.hh"
+#include "RequestResponseBus.hh"
using namespace std;
using namespace plpbus_orb;
using namespace plpbus;
using namespace CORBA;
-BusMessage::BusMessage()
-{
- _dataItemSeq.length(0);
+#define CONST_MSG_ID_KEY_NAME "_msgtype"
+BusMessage::BusMessage() {
+ _dataItemSeq = new DataItemSequence(0);
}
-BusMessage::BusMessage(const char *name_param, const char *value_param)
-{
- DataItem *item;
+BusMessage::BusMessage(long type_param) {
+ _dataItemSeq = new DataItemSequence(0);
+
+ add_long_parameter(CONST_MSG_ID_KEY_NAME, type_param);
+}
- if (name_param != NULL) {
- item = new DataItem();
- item->name = strdup(name_param);
- item->value <<= strdup(value_param);
+BusMessage::BusMessage(long type_param,
+ const char *arg_name_param,
+ const char *arg_string_value_param) {
+ _dataItemSeq = new DataItemSequence(0);
+ add_long_parameter(CONST_MSG_ID_KEY_NAME, type_param);
+ add_string_parameter(arg_name_param, arg_string_value_param);
+}
+
+BusMessage::~BusMessage() {
+ DataItemSequence *seq;
- _dataItemSeq.length(1);
- _dataItemSeq[0] = *item;
+ log_debug("\n");
+ seq = (DataItemSequence *)_dataItemSeq;
+ if (seq != NULL) {
+ delete(seq);
+ }
+}
+
+int BusMessage::add_cstring_parameter(const char *arg_name_param, const char *value_param) {
+ long ln;
+ int ret_val;
+ DataItemSequence *seq;
+ DataItem *item;
+
+ ret_val = 0;
+ seq = (DataItemSequence *)_dataItemSeq;
+ if (arg_name_param != NULL) {
+ ln = seq->length();
+ seq->length(ln + 1);
+ item = &((*seq)[ln]);
+ item->name = arg_name_param;
+ item->str_value = value_param;
}
else {
- _dataItemSeq.length(0);
+ ret_val = -1;
}
-
+ return ret_val;
}
-BusMessage::~BusMessage()
+int BusMessage::add_string_parameter(string arg_name_param, string value_param)
{
- // TODO Auto-generated destructor stub
+ long ln;
+ int ret_val;
+ DataItemSequence *seq;
+ DataItem *item;
+
+ //str = (const char)"hooo";
+ ret_val = 0;
+ seq = (DataItemSequence *)_dataItemSeq;
+ if (arg_name_param.empty() == false) {
+ ln = seq->length();
+ seq->length(ln + 1);
+ item = &((*seq)[ln]);
+ item->name = arg_name_param.c_str();
+ item->str_value = value_param.c_str();
+ }
+ else {
+ ret_val = -1;
+ }
+ return ret_val;
}
-int BusMessage::add_string_parameter(const char *name_param, const char *value_param)
+int BusMessage::add_long_parameter(string arg_name_param, long value_param)
{
- long length;
- int ret_val;
- DataItem *item;
+ long length;
+ int ret_val;
+ DataItemSequence *seq;
ret_val = 0;
- if (name_param != NULL) {
- length = _dataItemSeq.length();
- item = new DataItem();
- item->name = strdup(name_param);
- if (value_param != NULL) {
- item->value <<= strdup(value_param);
- _dataItemSeq.length(length + 1);
- _dataItemSeq[length] = *item;
- }
+ seq = (DataItemSequence *)_dataItemSeq;
+ if (arg_name_param.empty() == false) {
+ length = seq->length();
+ seq->length(length + 1);
+ (*seq)[length].name = arg_name_param.c_str();
+ (*seq)[length].value <<= value_param;
+ (*seq)[length].str_value = "";
}
else {
- _dataItemSeq.length(0);
ret_val = -1;
}
return ret_val;
}
-int BusMessage::add_long_parameter(const char *name_param, long value_param)
+int BusMessage::add_int_parameter(string arg_name_param, int value_param)
{
- long length;
- int ret_val;
- DataItem *item;
+ long length;
+ int ret_val;
+ DataItemSequence *seq;
ret_val = 0;
- if (name_param != NULL) {
- length = _dataItemSeq.length();
- item = new DataItem();
- item->name = strdup(name_param);
- item->value <<= value_param;
-
- _dataItemSeq.length(length + 1);
- _dataItemSeq[length] = *item;
+ seq = (DataItemSequence *)_dataItemSeq;
+ if (arg_name_param.empty() == false) {
+ length = seq->length();
+ seq->length(length + 1);
+ (*seq)[length].name = arg_name_param.c_str();
+ (*seq)[length].value <<= (long)value_param;
+ (*seq)[length].str_value = "";
}
else {
- _dataItemSeq.length(0);
ret_val = -1;
}
return ret_val;
}
-int BusMessage::add_int_parameter(const char *name_param, int value_param)
+int BusMessage::add_double_parameter(string arg_name_param, double value_param)
{
- long length;
- int ret_val;
- DataItem *item;
+ long length;
+ int ret_val;
+ DataItemSequence *seq;
ret_val = 0;
- if (name_param != NULL) {
- length = _dataItemSeq.length();
- item = new DataItem();
- item->name = strdup(name_param);
- item->value <<= (long)value_param;
-
- _dataItemSeq.length(length + 1);
- _dataItemSeq[length] = *item;
+ log_debug("add_double_parameter() started\n");
+ seq = (DataItemSequence *)_dataItemSeq;
+ if (arg_name_param.empty() == false) {
+ length = seq->length();
+ seq->length(length + 1);
+ (*seq)[length].name = arg_name_param.c_str();
+ (*seq)[length].value <<= (double)value_param;
+ (*seq)[length].str_value = "";
}
else {
- _dataItemSeq.length(0);
ret_val = -1;
}
+ log_debug("add_double_parameter() done\n");
return ret_val;
}
-int BusMessage::add_double_parameter(const char *name_param, double value_param)
+int BusMessage::add_float_parameter(string arg_name_param, float value_param)
{
- long length;
- int ret_val;
- DataItem *item;
+ long length;
+ int ret_val;
+ DataItemSequence *seq;
ret_val = 0;
- if (name_param != NULL) {
- length = _dataItemSeq.length();
- item = new DataItem();
- item->name = strdup(name_param);
- item->value <<= (long)value_param;
-
- _dataItemSeq.length(length + 1);
- _dataItemSeq[length] = *item;
+ seq = (DataItemSequence *)_dataItemSeq;
+ if (arg_name_param.empty() == false) {
+ length = seq->length();
+ seq->length(length + 1);
+ (*seq)[length].name = arg_name_param.c_str();
+ (*seq)[length].value <<= (float)value_param;
+ (*seq)[length].str_value = "";
}
else {
- _dataItemSeq.length(0);
ret_val = -1;
}
return ret_val;
}
-int BusMessage::add_float_parameter(const char *name_param, float value_param)
-{
- long length;
- int ret_val;
+static DataItem *get_dataitem_by_param_name(DataItemSequence *seq, string arg_name_param) {
+ DataItem *ret_val;
+ long int count;
DataItem *item;
+ const char *item_name;
- ret_val = 0;
- if (name_param != NULL) {
- length = _dataItemSeq.length();
- item = new DataItem();
- item->name = strdup(name_param);
- item->value <<= (long)value_param;
+ ret_val = NULL;
+ count = seq->length();
+ for (long ii = 0; ii < count; ii++) {
+ item = &(*seq)[ii];
+ item_name = item->name;
+ if (strcmp(arg_name_param.c_str(), item_name) == 0) {
+ ret_val = item;
+ break;
+ }
+ }
+ return ret_val;
+}
+
+long BusMessage::get_type(int *err_flg) {
+ long ret_val;
+ long res;
- _dataItemSeq.length(length + 1);
- _dataItemSeq[length] = *item;
+ ret_val = -1;
+ res = get_long_parameter(CONST_MSG_ID_KEY_NAME, err_flg);
+ if (*err_flg == PLP_OK) {
+ ret_val = res;
}
- else {
- _dataItemSeq.length(0);
- ret_val = -1;
+ return ret_val;
+}
+
+string BusMessage::get_string_parameter(string arg_name_param, int *err_flg) {
+ string ret_val;
+ DataItem *item;
+ DataItemSequence *seq;
+ const char *ch;
+
+ *err_flg = PLP_ERR_DATA_NOT_FOUND;
+ seq = (DataItemSequence *)_dataItemSeq;
+ item = get_dataitem_by_param_name(seq, arg_name_param);
+ if (item != NULL) {
+ //item->value >>= CORBA::Any::to_string(ch, 0);
+ ch = item->str_value;
+ ret_val = ch;
+ *err_flg = PLP_OK;
+ }
+ return ret_val;
+}
+
+long BusMessage::get_long_parameter(string arg_name_param, int *err_flg) {
+ long ret_val;
+ DataItem *item;
+ DataItemSequence *seq;
+
+ ret_val = 0;
+ *err_flg = PLP_ERR_DATA_NOT_FOUND;
+ seq = (DataItemSequence *)_dataItemSeq;
+ item = get_dataitem_by_param_name(seq, arg_name_param);
+ if (item != NULL) {
+ if (item->value >>= ret_val) {
+ *err_flg = PLP_OK;
+ }
+ }
+ return ret_val;
+}
+
+int BusMessage::get_int_parameter(string arg_name_param, int *err_flg) {
+ int ret_val;
+ DataItem *item;
+ DataItemSequence *seq;
+ long tmp;
+
+ ret_val = 0;
+ *err_flg = PLP_ERR_DATA_NOT_FOUND;
+ seq = (DataItemSequence *)_dataItemSeq;
+ item = get_dataitem_by_param_name(seq, arg_name_param);
+ if (item != NULL) {
+ if (item->value >>= tmp) {
+ ret_val = (int)tmp;
+ *err_flg = PLP_OK;
+ }
+ }
+ return ret_val;
+}
+
+double BusMessage::get_double_parameter(string arg_name_param, int *err_flg) {
+ double ret_val;
+ DataItem *item;
+ DataItemSequence *seq;
+
+ ret_val = 0;
+ *err_flg = PLP_ERR_DATA_NOT_FOUND;
+ seq = (DataItemSequence *)_dataItemSeq;
+ item = get_dataitem_by_param_name(seq, arg_name_param);
+ if (item != NULL) {
+ if (item->value >>= ret_val)
+ *err_flg = PLP_OK;
}
return ret_val;
}
-void BusMessage::printout_dataitem(long index, plpbus_orb::DataItem *item) {
+float BusMessage::get_float_parameter(string arg_name_param, int *err_flg) {
+ float ret_val;
+ DataItem *item;
+ DataItemSequence *seq;
+
+ ret_val = 0;
+ *err_flg = PLP_ERR_DATA_NOT_FOUND;
+ seq = (DataItemSequence *)_dataItemSeq;
+ item = get_dataitem_by_param_name(seq, arg_name_param);
+ if (item != NULL) {
+ if (item->value >>= ret_val)
+ *err_flg = PLP_OK;
+ }
+ return ret_val;
+}
+
+unsigned long BusMessage::get_parameter_count() {
+ int ret_val;
+ DataItemSequence *seq;
+
+ seq = (DataItemSequence *)_dataItemSeq;
+ ret_val = seq->length();
+ return ret_val;
+}
+
+void BusMessage::printout_dataitem(long index, void *item) {
CORBA::TCKind kind;
+ const char *name;
+ DataItem *dataitem;
+ dataitem = (DataItem *)item;
if (item != NULL) {
- if (item->name != NULL) {
- kind = item->value.type()->kind();
+ if (dataitem->name != NULL) {
+ name = dataitem->name;
+ kind = dataitem->value.type()->kind();
switch(kind) {
- case tk_string:
- {
- const char *val;
-
- item->value >>= val;
- log_debug(" [%d], value: %s\n", index, val);
- }
- break;
case tk_long:
{
long val;
- item->value >>= val;
- log_debug(" [%d], value: %ld\n", index, val);
+ dataitem->value >>= val;
+ log_debug("\t[%ld] %s: %ld\n", index, name, val);
//val_str = strdup("long");
}
break;
case tk_double:
{
double val;
- item->value >>= val;
- log_debug(" [%d], value: %f\n", index, val);
+ dataitem->value >>= val;
+ log_debug("\t[%ld] %s: %f\n", index, name, val);
//val_str = strdup("double");
}
break;
case tk_float:
{
float val;
- item->value >>= val;
- log_debug(" [%d] name: %s, value: %f\n", index, val);
+ dataitem->value >>= val;
+ log_debug("\t[l%ld] %s: %f\n", index, name, val);
//val_str = strdup("float");
}
break;
default:
- log_error(" [%d] name, value unknown\n", index);
+ {
+ const char *val;
+ val = dataitem->str_value;
+ log_debug("\t[%ld] %s: %s\n", index, name, val);
+ }
+ break;
+ log_error("\t[%ld], name: %s, value unknown\n", index, name);
}
}
else {
- log_error(" [%d] Invalid data item name name or value\n", index);
+ log_error("\t[%ld] Invalid data item name name or value\n", index);
}
}
else {
- log_error(" [%d] dataItem NULL.", index);
+ log_error("\t[%ld] dataItem NULL.", index);
}
}
void BusMessage::printout() {
- long int count;
- DataItem item;
+ long int count;
+ DataItem item;
+ DataItemSequence *seq;
- count = _dataItemSeq.length();
- log_debug("BusMessage.printout(): parameter count: %l\n", count);
+ seq = (DataItemSequence *)_dataItemSeq;
+ count = seq->length();
+ log_debug("BusMessage.printout(): parameter count: %ld\n", count);
for (long ii = 0; ii < count; ii++) {
- item = _dataItemSeq[ii];
+ item = (*seq)[ii];
printout_dataitem(ii, &item);
}
log_debug("BusMessage.printout() done\n");;