]> pilppa.org Git - libplpbus.git/blobdiff - src/plpbus/BusMessage.cc
added error checks to data parse methods
[libplpbus.git] / src / plpbus / BusMessage.cc
index ea81741f335295f783bb2481203cadea1d2d431e..d592a6610e48273fd50843177044c394ec7078c4 100644 (file)
@@ -40,24 +40,52 @@ BusMessage::BusMessage(long type_param,
 }
 
 BusMessage::~BusMessage() {
+       DataItemSequence        *seq;
+
+       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 {
+               ret_val = -1;
+       }
+       return ret_val;
 }
 
 int BusMessage::add_string_parameter(string arg_name_param, string value_param)
 {
-       long                    length;
+       long                    ln;
        int                     ret_val;
-       DataItem                *item;
        DataItemSequence        *seq;
+       DataItem                *item;
 
+       //str   = (const char)"hooo";
        ret_val = 0;
        seq     = (DataItemSequence *)_dataItemSeq;
        if (arg_name_param.empty() == false) {
-               length          = seq->length();
-               item            = new DataItem();
-               item->name      = strdup(arg_name_param.c_str());
-               item->value     <<= strdup(value_param.c_str());
-               seq->length(length + 1);
-               (*seq)[length]  = *item;
+               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;
@@ -69,19 +97,16 @@ int BusMessage::add_long_parameter(string arg_name_param, long value_param)
 {
        long                    length;
        int                     ret_val;
-       DataItem                *item;
        DataItemSequence        *seq;
 
        ret_val = 0;
        seq     = (DataItemSequence *)_dataItemSeq;
        if (arg_name_param.empty() == false) {
                length          = seq->length();
-               item            = new DataItem();
-               item->name      = strdup(arg_name_param.c_str());
-               item->value     <<= value_param;
-
                seq->length(length + 1);
-               (*seq)[length]  = *item;
+               (*seq)[length].name     = arg_name_param.c_str();
+               (*seq)[length].value    <<= value_param;
+               (*seq)[length].str_value = "";
        }
        else {
                ret_val = -1;
@@ -93,19 +118,16 @@ int BusMessage::add_int_parameter(string arg_name_param, int value_param)
 {
        long                    length;
        int                     ret_val;
-       DataItem                *item;
        DataItemSequence        *seq;
 
        ret_val = 0;
        seq     = (DataItemSequence *)_dataItemSeq;
        if (arg_name_param.empty() == false) {
                length          = seq->length();
-               item            = new DataItem();
-               item->name      = strdup(arg_name_param.c_str());
-               item->value     <<= (long)value_param;
-
                seq->length(length + 1);
-               (*seq)[length]  = *item;
+               (*seq)[length].name     = arg_name_param.c_str();
+               (*seq)[length].value    <<= (long)value_param;
+               (*seq)[length].str_value = "";
        }
        else {
                ret_val = -1;
@@ -117,7 +139,6 @@ int BusMessage::add_double_parameter(string arg_name_param, double value_param)
 {
        long                    length;
        int                     ret_val;
-       DataItem                *item;
        DataItemSequence        *seq;
 
        ret_val = 0;
@@ -125,12 +146,10 @@ int BusMessage::add_double_parameter(string arg_name_param, double value_param)
        seq     = (DataItemSequence *)_dataItemSeq;
        if (arg_name_param.empty() == false) {
                length          = seq->length();
-               item            = new DataItem();
-               item->name      = strdup(arg_name_param.c_str());
-               item->value     <<= (double)value_param;
-
                seq->length(length + 1);
-               (*seq)[length]  = *item;
+               (*seq)[length].name     = arg_name_param.c_str();
+               (*seq)[length].value    <<= (double)value_param;
+               (*seq)[length].str_value = "";
        }
        else {
                ret_val = -1;
@@ -143,19 +162,16 @@ int BusMessage::add_float_parameter(string arg_name_param, float value_param)
 {
        long                    length;
        int                     ret_val;
-       DataItem                *item;
        DataItemSequence        *seq;
 
        ret_val = 0;
        seq     = (DataItemSequence *)_dataItemSeq;
        if (arg_name_param.empty() == false) {
                length          = seq->length();
-               item            = new DataItem();
-               item->name      = strdup(arg_name_param.c_str());
-               item->value     <<= (float)value_param;
-
                seq->length(length + 1);
-               (*seq)[length]  = *item;
+               (*seq)[length].name     = arg_name_param.c_str();
+               (*seq)[length].value    <<= (float)value_param;
+               (*seq)[length].str_value = "";
        }
        else {
                ret_val = -1;
@@ -186,6 +202,7 @@ long BusMessage::get_type(int *err_flg) {
        long    ret_val;
        long    res;
 
+       ret_val = -1;
        res     = get_long_parameter(CONST_MSG_ID_KEY_NAME, err_flg);
        if (*err_flg == PLP_OK) {
                ret_val = res;
@@ -203,7 +220,8 @@ string BusMessage::get_string_parameter(string arg_name_param, int *err_flg) {
        seq             = (DataItemSequence *)_dataItemSeq;
        item            = get_dataitem_by_param_name(seq, arg_name_param);
        if (item != NULL) {
-               item->value >>= CORBA::Any::to_string(ch, 0);
+               //item->value >>= CORBA::Any::to_string(ch, 0);
+               ch              = item->str_value;
                ret_val         = ch;
                *err_flg        = PLP_OK;
        }
@@ -215,12 +233,14 @@ long BusMessage::get_long_parameter(string arg_name_param, int *err_flg) {
        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) {
-               item->value >>= ret_val;
-               *err_flg        = PLP_OK;
+               if (item->value >>= ret_val) {
+                       *err_flg        = PLP_OK;
+               }
        }
        return ret_val;
 }
@@ -231,13 +251,15 @@ int BusMessage::get_int_parameter(string arg_name_param, int *err_flg) {
        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) {
-               item->value >>= tmp;
-               ret_val =        (int)tmp;
-               *err_flg        = PLP_OK;
+               if (item->value >>= tmp) {
+                       ret_val         = (int)tmp;
+                       *err_flg        = PLP_OK;
+               }
        }
        return ret_val;
 }
@@ -247,12 +269,13 @@ double BusMessage::get_double_parameter(string arg_name_param, int *err_flg) {
        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) {
-               item->value >>= ret_val;
-               *err_flg        = PLP_OK;
+               if (item->value >>= ret_val)
+                       *err_flg        = PLP_OK;
        }
        return ret_val;
 }
@@ -262,16 +285,26 @@ float BusMessage::get_float_parameter(string arg_name_param, int *err_flg) {
        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) {
-               item->value >>= ret_val;
-               *err_flg        = PLP_OK;
+               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;
@@ -283,14 +316,6 @@ void BusMessage::printout_dataitem(long index, void *item) {
                        name    = dataitem->name;
                        kind    = dataitem->value.type()->kind();
                        switch(kind) {
-                               case tk_string:
-                                       {
-                                               const char *val;
-
-                                               dataitem->value >>= val;
-                                               log_debug("\t[%ld] %s: %s\n", index, name, val);
-                                       }
-                                       break;
                                case tk_long:
                                        {
                                                long    val;
@@ -316,6 +341,12 @@ void BusMessage::printout_dataitem(long index, void *item) {
                                        }
                                        break;
                                default:
+                                       {
+                                               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);
                        }
                }