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

sample2.c

Second sample use case

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);
}

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