/*! \brief * Translate all pointers in the structure and also * in all parameters in the list */ static inline void xlate_pointers(rr_t* _orig, rr_t* _r) { param_t* ptr; _r->nameaddr.uri.s = translate_pointer(_r->nameaddr.name.s, _orig->nameaddr.name.s, _r->nameaddr.uri.s); ptr = _r->params; while(ptr) { /* if (ptr->type == P_R2) _r->r2 = ptr; */ ptr->name.s = translate_pointer(_r->nameaddr.name.s, _orig->nameaddr.name.s, ptr->name.s); ptr->body.s = translate_pointer(_r->nameaddr.name.s, _orig->nameaddr.name.s, ptr->body.s); ptr = ptr->next; } }
int region_main(int argc, char *argv[]) { region r[4]; Updater u[3]; region quint = newregion(); region temp = newregion(); int i = 0; struct quint *q = NULL, *q2; translation tr; r[0] = quint; r[1] = NULL; u[0] = update_quint; for(i = 0; i < NUM; i++) { q = new_quint(quint, i, q); } serialize(r,"data","offsets"); tr = deserialize("data", "offsets", u, temp); q2 = (struct quint *) translate_pointer(tr, (void *) q); for(i = 0; i < NUM; i++) { if ((q == q2) || (q->i != q2->i)) { printf("FAIL triple\n"); exit(1); } q = q->next; q2 = q2->next; } printf("OK\n"); return 0; }
void update() { Updater u[10]; translation t; region temp = newregion(); u[9] = update_strbucket; u[8] = update_ptr_data; u[7] = update_list_strnode; u[6] = update_list_node; u[5] = update_list_header; u[4] = update_nonptr_data; u[3] = update_bucket; u[2] = update_hash_table; u[1] = update_bucketptr; u[0] = update_node; t = deserialize("data", "offsets", u, temp); thetable = (hash_table) translate_pointer(t, (void *)thetable); thelist = (node_list) translate_pointer(t, (void *)thelist); }
static void uri_trans(char *new_buf, char *org_buf, struct sip_uri *uri) { uri->user.s=translate_pointer(new_buf,org_buf,uri->user.s); uri->passwd.s=translate_pointer(new_buf,org_buf,uri->passwd.s); uri->host.s=translate_pointer(new_buf,org_buf,uri->host.s); uri->port.s=translate_pointer(new_buf,org_buf,uri->port.s); uri->params.s=translate_pointer(new_buf,org_buf,uri->params.s); uri->headers.s=translate_pointer(new_buf,org_buf,uri->headers.s); }
int region_main(int argc, char *argv[]) { region r[2]; Updater u[1]; region temp = newregion(); struct pair *p; translation t; if ((argc == 1) || (strcmp(argv[1],"d") && strcmp(argv[1],"b"))) { printf("Usage: time timer {d | b}\nd for deserialization only; b for both deserialization and serialization\n"); exit(1); } u[0] = update_pair; t = deserialize("data", "offsets", u, temp); if (strcmp(argv[1],"b") == 0) { p = (struct pair *) translate_pointer(t, (void *) 1125667648); r[0] = regionof((void *) p); r[1] = NULL; serialize(r, "data2", "offsets2"); } return 0; }
static inline struct auth_body* auth_body_cloner(char* new_buf, char *org_buf, struct auth_body *auth, char **p) { struct auth_body* new_auth; new_auth = (struct auth_body*)(*p); memcpy(new_auth , auth , sizeof(struct auth_body)); (*p) += ROUND4(sizeof(struct auth_body)); /* authorized field must be cloned elsewhere */ new_auth->digest.username.whole.s = translate_pointer(new_buf, org_buf, auth->digest.username.whole.s); new_auth->digest.username.user.s = translate_pointer(new_buf, org_buf, auth->digest.username.user.s); new_auth->digest.username.domain.s = translate_pointer(new_buf, org_buf, auth->digest.username.domain.s); new_auth->digest.realm.s = translate_pointer(new_buf, org_buf, auth->digest.realm.s); new_auth->digest.nonce.s = translate_pointer(new_buf, org_buf, auth->digest.nonce.s); new_auth->digest.uri.s = translate_pointer(new_buf, org_buf, auth->digest.uri.s); new_auth->digest.response.s = translate_pointer(new_buf, org_buf, auth->digest.response.s); new_auth->digest.alg.alg_str.s = translate_pointer(new_buf, org_buf, auth->digest.alg.alg_str.s); new_auth->digest.cnonce.s = translate_pointer(new_buf, org_buf, auth->digest.cnonce.s); new_auth->digest.opaque.s = translate_pointer(new_buf, org_buf, auth->digest.opaque.s); new_auth->digest.qop.qop_str.s = translate_pointer(new_buf, org_buf, auth->digest.qop.qop_str.s); new_auth->digest.nc.s = translate_pointer(new_buf, org_buf, auth->digest.nc.s); return new_auth; }
static void uri_trans(char *new_buf, char *org_buf, struct sip_uri *uri) { uri->user.s=translate_pointer(new_buf,org_buf,uri->user.s); uri->passwd.s=translate_pointer(new_buf,org_buf,uri->passwd.s); uri->host.s=translate_pointer(new_buf,org_buf,uri->host.s); uri->port.s=translate_pointer(new_buf,org_buf,uri->port.s); uri->params.s=translate_pointer(new_buf,org_buf,uri->params.s); uri->headers.s=translate_pointer(new_buf,org_buf,uri->headers.s); /* parameters */ uri->transport.s=translate_pointer(new_buf,org_buf,uri->transport.s); uri->ttl.s=translate_pointer(new_buf,org_buf,uri->ttl.s); uri->user_param.s=translate_pointer(new_buf,org_buf,uri->user_param.s); uri->maddr.s=translate_pointer(new_buf,org_buf,uri->maddr.s); uri->method.s=translate_pointer(new_buf,org_buf,uri->method.s); uri->lr.s=translate_pointer(new_buf,org_buf,uri->lr.s); uri->r2.s=translate_pointer(new_buf,org_buf,uri->r2.s); /* values */ uri->transport_val.s =translate_pointer(new_buf,org_buf,uri->transport_val.s); uri->ttl_val.s=translate_pointer(new_buf,org_buf,uri->ttl_val.s); uri->user_param_val.s =translate_pointer(new_buf,org_buf,uri->user_param_val.s); uri->maddr_val.s=translate_pointer(new_buf,org_buf,uri->maddr_val.s); uri->method_val.s=translate_pointer(new_buf,org_buf,uri->method_val.s); uri->lr_val.s=translate_pointer(new_buf,org_buf,uri->lr_val.s); uri->r2_val.s=translate_pointer(new_buf,org_buf,uri->r2_val.s); }
static inline struct via_body* via_body_cloner( char* new_buf, char *org_buf, struct via_body *param_org_via, char **p) { struct via_body *new_via; struct via_body *first_via, *last_via; struct via_body *org_via; first_via = last_via = 0; org_via = param_org_via; do { /* clones the via_body structure */ new_via = (struct via_body*)(*p); memcpy( new_via , org_via , sizeof( struct via_body) ); (*p) += ROUND4(sizeof( struct via_body )); /* hdr (str type) */ new_via->hdr.s=translate_pointer(new_buf,org_buf,org_via->hdr.s); /* name (str type) */ new_via->name.s=translate_pointer(new_buf,org_buf,org_via->name.s); /* version (str type) */ new_via->version.s= translate_pointer(new_buf,org_buf,org_via->version.s); /* transport (str type) */ new_via->transport.s= translate_pointer(new_buf,org_buf,org_via->transport.s); /* host (str type) */ new_via->host.s=translate_pointer(new_buf,org_buf,org_via->host.s); /* port_str (str type) */ new_via->port_str.s= translate_pointer(new_buf,org_buf,org_via->port_str.s); /* params (str type) */ new_via->params.s=translate_pointer(new_buf,org_buf,org_via->params.s); /* transaction id */ new_via->tid.s= translate_pointer(new_buf, org_buf, org_via->tid.s); /* comment (str type) */ new_via->comment.s= translate_pointer(new_buf,org_buf,org_via->comment.s); if ( org_via->param_lst ) { struct via_param *vp, *new_vp, *last_new_vp; for( vp=org_via->param_lst, last_new_vp=0 ; vp ; vp=vp->next ) { new_vp = (struct via_param*)(*p); memcpy( new_vp , vp , sizeof(struct via_param)); (*p) += ROUND4(sizeof(struct via_param)); new_vp->name.s=translate_pointer(new_buf,org_buf,vp->name.s); new_vp->value.s=translate_pointer(new_buf,org_buf,vp->value.s); new_vp->start=translate_pointer(new_buf,org_buf,vp->start); /* "translate" the shortcuts */ switch(new_vp->type){ case PARAM_BRANCH: new_via->branch = new_vp; break; case PARAM_RECEIVED: new_via->received = new_vp; break; case PARAM_RPORT: new_via->rport = new_vp; break; case PARAM_I: new_via->i = new_vp; break; case PARAM_ALIAS: new_via->alias = new_vp; break; #ifdef USE_COMP case PARAM_COMP: new_via->comp = new_vp; break; #endif } if (last_new_vp) last_new_vp->next = new_vp; else new_via->param_lst = new_vp; last_new_vp = new_vp; last_new_vp->next = NULL; } new_via->last_param = new_vp; }/*end if via has params */ if (last_via) last_via->next = new_via; else first_via = new_via; last_via = new_via; org_via = org_via->next; }while(org_via); return first_via; }
static void uri_trans(char *new_buf, char *org_buf, struct sip_uri *uri) { int i; uri->user.s=translate_pointer(new_buf,org_buf,uri->user.s); uri->passwd.s=translate_pointer(new_buf,org_buf,uri->passwd.s); uri->host.s=translate_pointer(new_buf,org_buf,uri->host.s); uri->port.s=translate_pointer(new_buf,org_buf,uri->port.s); uri->params.s=translate_pointer(new_buf,org_buf,uri->params.s); uri->headers.s=translate_pointer(new_buf,org_buf,uri->headers.s); /* parameters */ uri->transport.s=translate_pointer(new_buf,org_buf,uri->transport.s); uri->ttl.s=translate_pointer(new_buf,org_buf,uri->ttl.s); uri->user_param.s=translate_pointer(new_buf,org_buf,uri->user_param.s); uri->maddr.s=translate_pointer(new_buf,org_buf,uri->maddr.s); uri->method.s=translate_pointer(new_buf,org_buf,uri->method.s); uri->lr.s=translate_pointer(new_buf,org_buf,uri->lr.s); uri->r2.s=translate_pointer(new_buf,org_buf,uri->r2.s); /* values */ uri->transport_val.s =translate_pointer(new_buf,org_buf,uri->transport_val.s); uri->ttl_val.s=translate_pointer(new_buf,org_buf,uri->ttl_val.s); uri->user_param_val.s =translate_pointer(new_buf,org_buf,uri->user_param_val.s); uri->maddr_val.s=translate_pointer(new_buf,org_buf,uri->maddr_val.s); uri->method_val.s=translate_pointer(new_buf,org_buf,uri->method_val.s); uri->lr_val.s=translate_pointer(new_buf,org_buf,uri->lr_val.s); uri->r2_val.s=translate_pointer(new_buf,org_buf,uri->r2_val.s); /* unknown params */ for( i=0; i<URI_MAX_U_PARAMS && uri->u_name[i].s ; i++ ) { uri->u_name[i].s = translate_pointer(new_buf,org_buf,uri->u_name[i].s); uri->u_val[i].s = translate_pointer(new_buf,org_buf,uri->u_val[i].s); } }