- svcreq = malloc(sizeof *svcreq);
- if (svcreq == NULL)
- return afb_subcall_internal_error(callback, closure);
-
- /* initialises the request */
- afb_context_init(&svcreq->context, svc->session, NULL);
- svcreq->context.validated = 1;
- svcreq->svc = svc;
- svcreq->refcount = 1;
+ lenapi = 1 + strlen(api);
+ lenverb = 1 + strlen(verb);
+ svcreq = malloc(lenapi + lenverb + sizeof *svcreq);
+ if (svcreq != NULL) {
+ /* initialises the request */
+ afb_xreq_init(&svcreq->xreq, &afb_svc_xreq_itf);
+ afb_context_init(&svcreq->xreq.context, svc->session, NULL);
+ svcreq->xreq.context.validated = 1;
+ svcreq->xreq.cred = afb_cred_current();
+ copy = (char*)&svcreq[1];
+ memcpy(copy, api, lenapi);
+ svcreq->xreq.api = copy;
+ copy = ©[lenapi];
+ memcpy(copy, verb, lenverb);
+ svcreq->xreq.verb = copy;
+ svcreq->xreq.listener = svc->listener;
+ svcreq->xreq.json = args;
+ svcreq->svc = svc;
+ }
+ return svcreq;
+}