Main Page   Modules   Data Structures   File List   Data Fields   Related Pages   Examples  

sample1.c

First sample use case

Shows usage with and without the convenience functions, given data like the following:

 { uid => 12,
 skey => "ajshdfkh",
 svc => "AUS",
 method => "NULL",
 op => "AUTH" }
 

#include <stdlib.h>
#include <stdio.h>
#include "sedabl.h"

int main() {

  int uid=12;
  char *skey = "ajshdfkh";
  char *svc = "AUS";
  char *method = "NULL";
  char *op = "AUTH";
  sedabl_block *lb;
  sedabl_val *v;
  void *p;
  long len;

  printf("creating listblock\n");
  lb = sedabl_new_listblock("outer",NULL);
  
  printf("\tadding uid (%d)\n",uid);
  p=malloc(256);
  len=snprintf(p,256,"%d",uid);
  v=sedabl_new_val(p,len);
  free(p);
  sedabl_add_val(lb,"uid",v);

  printf("\tadding skey (%s)\n",skey);
  v=sedabl_new_val(skey,strlen(skey));
  sedabl_add_val(lb,"skey",v);

  printf("\tadding svc (%s)\n",svc);
  v=sedabl_new_val(svc,strlen(svc));
  sedabl_add_val(lb,"svc",v);

  printf("\tadding method (%s)\n",method);
  v=sedabl_new_val(method,strlen(method));
  sedabl_add_val(lb,"method",v);

  printf("\tadding op (%s)\n",op);
  v=sedabl_new_val(op,strlen(op));
  sedabl_add_val(lb,"op",v);
  
  printf("\tdemarshalling\n");
  v=sedabl_demarshal(lb);
  sedabl_free(lb);

  printf("v->val now points to a v->len-sized block of core\n");
  printf("which can, eg, be written to a file or socket\n\n");
  /* -- LATER -- */

  printf("marshalling\n");
  lb=sedabl_marshal(v);
  if (lb == (sedabl_block *)-1) {
    fprintf(stderr,"Incomplete block during round trip!\n");
    exit(1);
  }
  if (!lb) {
    fprintf(stderr,"Invalid byte string during round trip!\n");
    exit(1);
  }
  free(v->val); free(v);

  v=sedabl_get_val(lb,"uid",-1);
  skey=malloc(v->len+1);
  strncpy(skey,v->val,v->len);
  skey[v->len]='\0';
  uid=atol(skey);
  free(skey);
  printf("\tgot uid (%d)\n",uid);
  
  v=sedabl_get_val(lb,"skey",-1);
  skey=malloc(v->len+1);
  strncpy(skey,v->val,v->len);
  skey[v->len]='\0';
  printf("\tgot skey (%s)\n",skey);
  
  v=sedabl_get_val(lb,"svc",-1);
  svc=malloc(v->len+1);
  strncpy(svc,v->val,v->len);
  svc[v->len]='\0';
  printf("\tgot svc (%s)\n",svc);
  
  v=sedabl_get_val(lb,"method",-1);
  method=malloc(v->len+1);
  strncpy(method,v->val,v->len);
  method[v->len]='\0';
  printf("\tgot method (%s)\n",method);
  
  v=sedabl_get_val(lb,"op",-1);
  op=malloc(v->len+1);
  strncpy(op,v->val,v->len);
  op[v->len]='\0';
  printf("\tgot op (%s)\n",op);
  
  sedabl_free(lb);

  /***********************************************/
  fprintf(stderr,"\n\n*** Now, using the convenience functions...\n\n\n");
  /***********************************************/

  printf("creating listblock\n");
  lb = sedabl_new_listblock("outer",NULL);

  printf("\tadding uid (%d)\n",uid);
  sedabl_add_int(lb,"uid",uid);

  printf("\tadding skey (%s)\n",skey);
  sedabl_add_str(lb,"skey",skey);

  printf("\tadding svc (%s)\n",svc);
  sedabl_add_str(lb,"svc",svc);

  printf("\tadding method (%s)\n",method);
  sedabl_add_str(lb,"method",method);

  printf("\tadding op (%s)\n",op);
  sedabl_add_str(lb,"op",op);

  printf("\tdemarshalling\n");
  v=sedabl_demarshal(lb);
  sedabl_free(lb);

  printf("v->val now points to a v->len-sized block of core\n");
  printf("which can, eg, be written to a file or socket\n\n");
  /* -- LATER -- */

  printf("marshalling\n");
  lb=sedabl_marshal(v);
  if (lb == (sedabl_block *)-1) {
    fprintf(stderr,"Incomplete block during round trip!\n");
    exit(1);
  }
  if (!lb) {
    fprintf(stderr,"Invalid byte string during round trip!\n");
    exit(1);
  }

  uid=sedabl_get_int(lb,"uid",-1);
  printf("\tgot uid (%d)\n",uid);

  skey=sedabl_get_str(lb,"skey",-1);
  printf("\tgotskey (%s)\n",skey);

  svc=sedabl_get_str(lb,"svc",-1);
  printf("\tgot svc (%s)\n",svc);

  method=sedabl_get_str(lb,"method",-1);
  printf("\tgot method (%s)\n",method);

  op=sedabl_get_str(lb,"op",-1);
  printf("\tgot op (%s)\n",op);

  sedabl_free(lb);
}

Generated on Mon Sep 15 07:27:32 2003 for SeDaBl C API by doxygen1.3-rc3