Navigation



Ignore:
Timestamp:
Dec 17, 2010, 6:41:19 PM (13 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

Improved usability of dbg_interactive

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/dbg_interactive/dictionary.i

    r637 r638  
    242242                fd_log_debug("] '%.*s%s'\n", n, $self->data, n == LEN_MAX ? "..." : "");
    243243        }
    244 }
     244        %cstring_output_allocate_size(char ** outbuffer, size_t * outlen, free(*$1));
     245        void as_str ( char ** outbuffer, size_t * outlen ) {
     246                char * b;
     247                if (!$self->len) {
     248                        *outlen = 0;
     249                        *outbuffer = NULL;
     250                        return;
     251                }
     252                b = malloc($self->len);
     253                if (!b) {
     254                        DI_ERROR_MALLOC;
     255                        return;
     256                }
     257                memcpy(b, $self->data, $self->len);
     258                *outlen = $self->len;
     259                *outbuffer = b;
     260        }
     261}
     262
     263
     264/* Allow constructors with parameters for the dict_*_data */
     265%extend dict_vendor_data {
     266        dict_vendor_data(uint32_t id = 0, char * name = NULL) {
     267                struct dict_vendor_data * d = (struct dict_vendor_data *)calloc(1, sizeof(struct dict_vendor_data));
     268                if (!d) {
     269                        DI_ERROR_MALLOC;
     270                        return NULL;
     271                }
     272                d->vendor_id = id;
     273                if (name) {
     274                        d->vendor_name = strdup(name);
     275                        if (!d->vendor_name) {
     276                                DI_ERROR_MALLOC;
     277                                free(d);
     278                                return NULL;
     279                        }
     280                }
     281                return d;
     282        }
     283}
     284
     285%extend dict_application_data {
     286        dict_application_data(uint32_t id = 0, char * name = NULL) {
     287                struct dict_application_data * d = (struct dict_application_data *)calloc(1, sizeof(struct dict_application_data));
     288                if (!d) {
     289                        DI_ERROR_MALLOC;
     290                        return NULL;
     291                }
     292                d->application_id = id;
     293                if (name) {
     294                        d->application_name = strdup(name);
     295                        if (!d->application_name) {
     296                                DI_ERROR_MALLOC;
     297                                free(d);
     298                                return NULL;
     299                        }
     300                }
     301                return d;
     302        }
     303}
     304
     305%extend dict_type_data {
     306        dict_type_data(enum dict_avp_basetype base = 0, char * name = NULL) {
     307                struct dict_type_data * d = (struct dict_type_data *)calloc(1, sizeof(struct dict_type_data));
     308                if (!d) {
     309                        DI_ERROR_MALLOC;
     310                        return NULL;
     311                }
     312                d->type_base = base;
     313                if (name) {
     314                        d->type_name = strdup(name);
     315                        if (!d->type_name) {
     316                                DI_ERROR_MALLOC;
     317                                free(d);
     318                                return NULL;
     319                        }
     320                }
     321                return d;
     322        }
     323}
     324
     325%extend dict_enumval_data {
     326        dict_enumval_data(char * name = NULL, uint32_t v = 0) {
     327                struct dict_enumval_data * d = (struct dict_enumval_data *)calloc(1, sizeof(struct dict_enumval_data));
     328                if (!d) {
     329                        DI_ERROR_MALLOC;
     330                        return NULL;
     331                }
     332                if (name) {
     333                        d->enum_name = strdup(name);
     334                        if (!d->enum_name) {
     335                                DI_ERROR_MALLOC;
     336                                free(d);
     337                                return NULL;
     338                        }
     339                }
     340                d->enum_value.u32 = v;
     341                return d;
     342        }
     343}
     344
     345%extend dict_avp_data {
     346        dict_avp_data(uint32_t code = 0, char * name = NULL, enum dict_avp_basetype basetype = 0, uint32_t vendor = 0, int mandatory=0) {
     347                struct dict_avp_data * d = (struct dict_avp_data *)calloc(1, sizeof(struct dict_avp_data));
     348                if (!d) {
     349                        DI_ERROR_MALLOC;
     350                        return NULL;
     351                }
     352                if (name) {
     353                        d->avp_name = strdup(name);
     354                        if (!d->avp_name) {
     355                                DI_ERROR_MALLOC;
     356                                free(d);
     357                                return NULL;
     358                        }
     359                }
     360                d->avp_code = code;
     361                d->avp_basetype = basetype;
     362                d->avp_vendor = vendor;
     363                if (vendor) {
     364                        d->avp_flag_val |= AVP_FLAG_VENDOR;
     365                        d->avp_flag_mask |= AVP_FLAG_VENDOR;
     366                }
     367                d->avp_flag_mask |= AVP_FLAG_MANDATORY;
     368                if (mandatory)
     369                        d->avp_flag_val |= AVP_FLAG_MANDATORY;
     370                return d;
     371        }
     372}
     373
     374%extend dict_cmd_data {
     375        dict_cmd_data(uint32_t code = 0, char * name = NULL, int request = 1) {
     376                struct dict_cmd_data * d = (struct dict_cmd_data *)calloc(1, sizeof(struct dict_cmd_data));
     377                if (!d) {
     378                        DI_ERROR_MALLOC;
     379                        return NULL;
     380                }
     381                if (name) {
     382                        d->cmd_name = strdup(name);
     383                        if (!d->cmd_name) {
     384                                DI_ERROR_MALLOC;
     385                                free(d);
     386                                return NULL;
     387                        }
     388                }
     389                d->cmd_code = code;
     390                d->cmd_flag_mask = CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE;
     391                d->cmd_flag_val = CMD_FLAG_PROXIABLE | ( request ? CMD_FLAG_REQUEST : 0 );
     392                return d;
     393        }
     394}
     395
     396%extend dict_rule_data {
     397        dict_rule_data(struct dict_object *avp = NULL, enum rule_position pos = 0, int min = -1, int max = -1 ) {
     398                struct dict_rule_data * d = (struct dict_rule_data *)calloc(1, sizeof(struct dict_rule_data));
     399                if (!d) {
     400                        DI_ERROR_MALLOC;
     401                        return NULL;
     402                }
     403                d->rule_avp = avp;
     404                d->rule_position = pos;
     405                d->rule_order = 1;
     406                d->rule_min = min;
     407                d->rule_max = max;
     408                return d;
     409        }
     410}
     411
Note: See TracChangeset for help on using the changeset viewer.