int i;
edg_wll_QueryRec **qr;
-
assert(out);
if ( !(qr = calloc(__sizecondition, sizeof(*qr))) ) return -1;
for ( i = 0; i < __sizecondition; i++ )
return SOAP_OK;
}
+
int edg_wll_JobsQueryResToSoap(
struct soap *soap,
const edg_wlc_JobId *jobs,
return SOAP_OK;
}
+
+/**
+ * TODO: dodelat
+ * Translate event structure to Soap event.
+ *
+ * \param INOUT soap instance to work with
+ * \param IN event source event
+ * \param OUT sevent target Soap event
+ */
+int edg_wll_EventToSoap(struct soap* soap, const edg_wll_Event *event, struct lbt__event **sevent) {
+ *sevent = soap_malloc(soap, sizeof(*sevent));
+ memset(*sevent, 0, sizeof(*sevent));
+ if (!*sevent) return 0;
+
+ switch (event->any.type) {
+@@@{
+ for my $e (sort { $event->{order}->{$a} <=> $event->{order}->{$b} }
+ $event->getTypes) {
+ my $u = uc $e;
+gen qq {
+! case EDG_WLL_EVENT_$u:
+! break;
+!
+};
+ }
+@@@}
+ default:
+ break;
+ }
+
+ return 1;
+}
+
+
+/**
+ * TODO: dodelat
+ * Free Soap event.
+ *
+ * \param INOUT soap instance to work with
+ * \param INOUT sevent released Soap event
+ */
+void edg_wll_FreeSoapEvent(struct soap *soap, struct lbt__event *sevent) {
+@@@{
+ # code from LBTypes.xml.T
+ for my $name (sort { $event->{order}->{$a} <=> $event->{order}->{$b} } getTypes $event) {
+ my $comment = getTypeComment $event $name;
+ $name = $1.ucfirst $2 while $name =~ /([[:alpha:]]*)_([[:alpha:]_]*)/;
+gen qq {
+! if (sevent->$name) {
+! soap_dealloc(soap, sevent->$name);
+! }
+};
+}
+@@@}
+ soap_dealloc(soap, sevent);
+}
+
+
+/**
+ * Translate event array to Soap event array for eventsQueryResponse.
+ *
+ * \param INOUT soap instance to work with
+ * \param IN events source array of the events
+ * \param OUT out result Soap structure
+ */
int edg_wll_EventsQueryResToSoap(
struct soap *soap,
- edg_wll_Event *events,
+ const edg_wll_Event *events,
struct _lbe__QueryEventsResponse *out)
{
+ int memsize, i;
+ struct lbt__event *event;
- //XXX: needs flash
+ /* alloc the events array */
+ assert(out != NULL);
+ memset(out, 0, sizeof(*out));
+ for (out->__sizeevents = 0; events[out->__sizeevents].any.type != EDG_WLL_EVENT_UNDEF; out->__sizeevents++);
+ if (!out->__sizeevents) return SOAP_OK;
+ memsize = out->__sizeevents * sizeof(*out->events);
+ out->events = soap_malloc(soap, memsize);
+ memset(out->events, 0, memsize);
+ if (!out->events) return SOAP_FAULT;
+
+ for (i = 0; i < out->__sizeevents; i++) {
+ if (!edg_wll_EventToSoap(soap, &events[i], &out->events[i])) goto err;
+ }
return SOAP_OK;
+
+err:
+ event = out->events[0];
+ while (event) {
+ edg_wll_FreeSoapEvent(soap, event);
+ event++;
+ }
+ soap_dealloc(soap, out->events);
+
+ return SOAP_FAULT;
}
+
int edg_wll_SoapToEvents(
struct soap *soap,
struct _lbe__QueryEventsResponse in,
//XXX: needs flash
return 0;
-}
+}