Shows usage with and without the convenience functions, given data like the following:
{ uid => 12, skey => "ajshdfkh", svc => "AUS", method => [ "NULL", "LDAP", "YAHOO" ], op => "AUTH" }
#include <stdlib.h> #include <stdio.h> #include "sedabl.h" int main() { int uid=12, i; char *skey = "ajshdfkh"; char *svc = "AUS"; char *method[3] = { "NULL", "LDAP", "YAHOO" }; char *op = "AUTH"; sedabl_block *v, *mv; sedabl_val *vval, tmp; long vvlen; void *vv; printf("creating outer block\n"); v=sedabl_new_listblock("outer",NULL); printf("\tadding uid (%d)\n",uid); vv=malloc(256); vvlen=snprintf(vv,256,"%d",uid); sedabl_add_val(v,"uid",sedabl_new_val(vv,vvlen)); free(vv); printf("\tadding skey (%s)\n",skey); sedabl_add_val(v,"skey",sedabl_new_val(skey,strlen(skey))); printf("\tadding svc (%s)\n",svc); sedabl_add_val(v,"svc",sedabl_new_val(svc,strlen(svc))); printf("\tcreating method list\n"); mv=sedabl_new_listblock("method",NULL); for (i=0; i < 3; i++) { printf("\t\tadding method #%d (%s)\n",i,method[i]); sedabl_add_val(mv,NULL,sedabl_new_val(method[i],strlen(method[i]))); } printf("\tadding method list\n"); sedabl_add_block(v,mv); printf("\tadding op (%s)\n",op); sedabl_add_val(v,"op",sedabl_new_val(op,strlen(op))); printf("\tdemarshalling\n"); vval=sedabl_demarshal(v); sedabl_free(v); printf("vval->val now points to a vval->len-sized block of core\n"); printf("which can, eg, be written to a file or socket\n"); /* -- LATER -- */ printf("marshalling\n"); v=sedabl_marshal(vval); free(vval->val); free(vval); if (v == (void *)-1) { fprintf(stderr,"Invalid byte string during round trip!\n"); exit(1); } if (!v) { fprintf(stderr,"Incomplete block during round trip!\n"); exit(1); } vval=sedabl_get_val(v,"uid",-1); skey=malloc(vval->len+1); strncpy(skey,vval->val,vval->len); skey[vval->len] = '\0'; uid=atol(skey); free(skey); printf("\tgot uid (%d)\n",uid); vval=sedabl_get_val(v,"skey",-1); skey=malloc(vval->len+1); strncpy(skey,vval->val,vval->len); skey[vval->len]='\0'; printf("\tgot skey (%s)\n",skey); vval=sedabl_get_val(v,"svc",-1); svc=malloc(vval->len+1); strncpy(svc,vval->val,vval->len); svc[vval->len]='\0'; printf("\tgot svc (%s)\n",svc); mv=sedabl_get_block(v,"method",-1); printf("\tgot method list\n"); for (i=0; i < mv->payload.list->elements; i++) { vval=sedabl_get_val(mv,NULL,i); method[i]=malloc(vval->len+1); strncpy(method[i],vval->val,vval->len); method[i][vval->len]='\0'; printf("\t\tgot method #%d (%s)\n",i,method[i]); } vval=sedabl_get_val(v,"op",-1); op=malloc(vval->len+1); strncpy(op,vval->val,vval->len); op[vval->len]='\0'; printf("\tgot op (%s)\n",op); sedabl_free(v); /***********************************************/ fprintf(stderr,"\n\n*** Now, using the convenience functions...\n\n\n"); /***********************************************/ printf("creating outer block\n"); v=sedabl_new_listblock("outer",NULL); printf("\tadding uid (%d)\n",uid); sedabl_add_int(v,"uid",uid); printf("\tadding skey (%s)\n",skey); sedabl_add_str(v,"skey",skey); printf("\tadding svc (%s)\n",svc); sedabl_add_str(v,"svc",svc); printf("\tcreating method list\n"); mv=sedabl_new_listblock("method",NULL); for (i=0; i < 3; i++) { printf("\t\tadding method #%d (%s)\n",i,method[i]); sedabl_add_str(mv,NULL,method[i]); } printf("\tadding method list\n"); sedabl_add_block(v,mv); printf("\tadding op (%s)\n",op); sedabl_add_str(v,"op",op); printf("\tdemarshalling\n"); vval=sedabl_demarshal(v); sedabl_free(v); printf("vval->val now points to a vval->len-sized block of core\n"); printf("which can, eg, be written to a file or socket\n"); /* -- LATER -- */ printf("marshalling\n"); v=sedabl_marshal(vval); if (v == (void *)-1) { fprintf(stderr,"Invalid byte string during round trip!\n"); exit(1); } if (!v) { fprintf(stderr,"Incomplete block during round trip!\n"); exit(1); } free(vval->val); free(vval); uid=sedabl_get_int(v,"uid",-1); printf("\tgot uid (%d)\n",uid); skey=sedabl_get_str(v,"skey",-1); printf("\tgot skey (%s)\n",skey); svc=sedabl_get_str(v,"svc",-1); printf("\tgot svc (%s)\n",svc); mv=sedabl_get_block(v,"method",-1); printf("\tgot method list\n"); for (i=0; i < mv->payload.list->elements; i++) { method[i]=sedabl_get_str(mv,NULL,i); printf("\t\tgot method #%d (%s)\n",i,method[i]); } op=sedabl_get_str(v,"op",-1); sedabl_free(v); }