]> rtime.felk.cvut.cz Git - frescor/frsh.git/commitdiff
Added debugging functions to convert contract to string
authorMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 6 Nov 2008 13:21:41 +0000 (14:21 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 6 Nov 2008 13:21:41 +0000 (14:21 +0100)
fres/contract/fres_container.c
fres/contract/fres_container.h
fres/contract/fres_contract.c
fres/contract/fres_contract.h
resources/dummy/dummy_block.c

index 3f522c802e7ccea25204bf063d61f8dd5e09ec97..6ecc75ad0774d2129cf9418dc68b4131e7eff402 100644 (file)
@@ -12,6 +12,7 @@
 #include <ul_log.h>
 #include <string.h>
 #include <forb/cdr.h>
+#include <stdio.h>
 
 UL_LOG_CUST(ulogd_fres_container);
 ul_log_domain_t ulogd_fres_container = {UL_LOGL_ERR, "fres_container"};
@@ -21,7 +22,8 @@ fres_block_duplicate_spare_capacity(enum fres_block_type type, const void *block
 
 #define desc_default(type)                                             \
        struct fres_block_desc desc_default_##type = {                  \
-               .size        = sizeof(fres_block_##type),                       \
+               .name        = #type,                                   \
+               .size        = sizeof(fres_block_##type),               \
                .serialize   = (fres_block_serialize_fnc_t*)fres_block_##type##_serialize, \
                .deserialize = (fres_block_deserialize_fnc_t*)fres_block_##type##_deserialize, \
                .duplicate   = fres_block_duplicate_default             \
@@ -440,3 +442,40 @@ free_err:
 err:
        return CORBA_FALSE;
 }
+
+int
+fres_container_to_string(char *dest, size_t size, const struct fres_container *c)
+{
+       int ret, written = 0;
+       enum fres_block_type type;
+       
+       for (type=0; type<FRES_NUM_BLOCKS; type++) {
+               const struct fres_block *b = &c->blocks[type];
+               switch (b->state) {
+                       case FRES_BLOCK_EMPTY:
+                               /* nothing to do */
+                               break;
+                       case FRES_BLOCK_DATA:
+                               ret = snprintf(dest, size, "block %s (%d)\n",
+                                              block_registry[type]->name, type);
+                               if (ret < 0) goto err;
+                               if (ret < size) {
+                                       written += ret;
+                                       size -= ret;
+                               }
+                               break;
+                       case FRES_BLOCK_STREAM:
+                               ret = snprintf(dest, size, "unknown block (%d)\n",
+                                              type);
+                               if (ret < 0) goto err;
+                               if (ret < size) {
+                                       written += ret;
+                                       size -= ret;
+                               }
+                               break;
+               }
+       }
+       ret = written;
+err:
+       return ret;
+}
index c916e2c9b04f272e3d3a859e1bfd8e77410c1d27..b51ab766a9a0c4c8e3f6545f6b6fab2b383562a2 100644 (file)
@@ -43,6 +43,7 @@ typedef CORBA_boolean (fres_block_serialize_fnc_t)(CDR_Codec *codec, const void
 typedef CORBA_boolean (fres_block_deserialize_fnc_t)(CDR_Codec *codec, void **block_data);
                                             
 struct fres_block_desc {
+       const char *name;       /**< Name of the block for use fres_container_to_string() */
        size_t size;            /**< Size of the block (used by fres_block_duplicate_default() and fres_container_ptr_deserialize()) */
        fres_block_serialize_fnc_t *serialize;
        fres_block_deserialize_fnc_t *deserialize;
@@ -103,4 +104,7 @@ fres_block_register(enum fres_block_type, const struct fres_block_desc *desc);
 void *
 fres_block_duplicate_default(enum fres_block_type type, const void *block_data);
 
+int
+fres_container_to_string(char *dest, size_t size, const struct fres_container *c);
+
 #endif
index accfefed15ecbb692ddb867d753c115747bd1402..f462a73a7318267ff9720e950b8bc36dc340cfff 100644 (file)
@@ -1,6 +1,7 @@
 #include <fres_contract.h>
 #include <fres_container_internal.h>
 #include <string.h>
+#include <stdio.h>
 
 /** 
  * Allocates new fres_contract structure. Use fres_contract_destroy to
@@ -93,3 +94,29 @@ void fres_contract_ptr_free(fres_contract_ptr contract)
 {
        fres_contract_destroy(contract);
 }
+
+int
+fres_contract_to_string(char *dest, size_t size, const struct fres_contract *c)
+{
+       int ret, ret2;
+       char id[30];
+       fres_contract_id_to_string(id, &c->id, sizeof(id));
+       ret = snprintf(dest, size, "id: %s\n", id);
+       if (ret>=0 && ret < size) {
+               dest += ret;
+               size -= ret;
+               ret2 = fres_container_to_string(dest, size, c->container);
+               if (ret2 < 0) ret = ret2;
+               else ret += ret2;
+       }
+       return ret;
+}
+
+void
+fres_contract_print(char *prefix, const struct fres_contract *c)
+{
+       char contract[1000];
+       fres_contract_to_string(contract, sizeof(contract)-1, c);
+       contract[sizeof(contract)-1] = 0;
+       printf("%s %s", prefix, contract);
+}
index 6e6b302519c6923b4ef0deddcc18b0e989a21c29..0fe6bfa309f62873055501ce9203c730c31eb96f 100644 (file)
@@ -51,6 +51,12 @@ fres_contract_get_block(struct fres_contract *contract,
        return fres_container_get_block(contract->container, type);
 }
 
+int
+fres_contract_to_string(char *dest, size_t size, const struct fres_contract *c);
+
+void
+fres_contract_print(char *prefix, const struct fres_contract *c);
+
 #define FRES_CONTRACT_ACCESSOR(type)                                   \
        static inline int                                               \
        fres_contract_add_##type(struct fres_contract *contract,        \
index 169116bd0209c612c8509bdea221540b3472e1b7..4120a935e150e5d0889f676a24a9b4ca68363550 100644 (file)
@@ -11,6 +11,7 @@
 #include <fres_container.h>
 
 static const struct fres_block_desc dummy_block_desc = {
+       .name = "dummy_sched",
        .size = sizeof(fres_block_dummy_sched),
        .serialize = (fres_block_serialize_fnc_t*)fres_block_dummy_sched_serialize,
        .deserialize = (fres_block_deserialize_fnc_t*)fres_block_dummy_sched_deserialize,