43 #include "co_string.h"
46 #include "rt_qcom_msg.h"
47 #include "rt_sev_msg.h"
49 #include "rt_sev_net.h"
71 attr.type = qcom_eQtype_private;
92 if (ctx == stored_ctx)
123 if (!nodename || streq(nodename,
"")) {
134 if (str_NoCaseStrcmp(node.
name, nodename) == 0 || str_NoCaseStrcmp(nodename,
"localhost") == 0) {
142 if (str_NoCaseStrcmp(nodename, node.
name) == 0) {
148 *sts = SEV__NOSUCHNODE;
172 tgt.
qix = sev_eProcSevServer;
174 put.reply = ctx->
qid;
175 put.type.b = (qcom_eBtype)sev_cMsgClass;
176 put.type.s = (qcom_eStype)sev_eMsgType_HistItemsRequest;
177 put.msg_id = ctx->
msg_id++;
178 put.size =
sizeof(*msg);
180 msg = (sev_sMsgAny*)
qcom_Alloc(sts, put.size);
184 msg->Type = sev_eMsgType_HistItemsRequest;
185 msg->Version = sev_cNetVersion;
192 sev_sMsgHistItems* rmsg;
194 memset(&get, 0,
sizeof(get));
197 rmsg = (sev_sMsgHistItems*)
qcom_Get(sts, &ctx->
qid, &get, tmo);
198 if (*sts == QCOM__TMO || !rmsg) {
202 if (get.type.b == sev_cMsgClass
203 && get.type.s == (qcom_eStype)sev_eMsgType_HistItems)
215 int item_cnt = rmsg->NumItems;
216 int attr_cnt = rmsg->NumAttributes;
223 sev_sHistItem* itemPtr = ((sev_sMsgHistItems*)rmsg)->Items;
224 for (i = 0; i < item_cnt; i++) {
225 lp->
oid = itemPtr->oid;
226 strncpy(lp->
oname, itemPtr->oname,
sizeof(lp->
oname));
227 lp->
storagetime = net_NetTimeToDeltaTime(&itemPtr->storagetime);
229 lp->
options = itemPtr->options;
230 lp->
creatime = net_NetTimeToTime(&itemPtr->creatime);
231 lp->
modtime = net_NetTimeToTime(&itemPtr->modtime);
236 lp->
attrnum = itemPtr->attrnum;
238 for (j = 0; j < lp->
attrnum; j++) {
239 lp->
attr[j].
type = itemPtr->attr[j].type;
240 lp->
attr[j].
size = itemPtr->attr[j].size;
246 itemPtr = (sev_sHistItem*)&itemPtr->attr[j];
358 char* aname, pwr_tTime starttime, pwr_tTime endtime,
int numpoints,
359 pwr_tTime** tbuf,
void** vbuf,
int* rows, pwr_eType* vtype,
362 sev_sMsgHistDataGetRequest* msg;
374 if (cnf_get_value(
"sevTimeout", value_str,
sizeof(value_str))) {
375 nr = sscanf(value_str,
"%d", &value);
388 tgt.
qix = sev_eProcSevServer;
390 put.reply = ctx->
qid;
391 put.type.b = (qcom_eBtype)sev_cMsgClass;
392 put.type.s = (qcom_eStype)sev_eMsgType_HistDataGetRequest;
393 put.msg_id = ctx->
msg_id++;
394 put.size =
sizeof(*msg);
396 msg = (sev_sMsgHistDataGetRequest*)
qcom_Alloc(sts, put.size);
400 msg->Type = sev_eMsgType_HistDataGetRequest;
401 msg->Version = sev_cNetVersion;
403 strncpy(msg->AName, aname,
sizeof(msg->AName));
404 msg->StartTime = net_TimeToNetTime(&starttime);
405 msg->EndTime = net_TimeToNetTime(&endtime);
406 msg->NumPoints = numpoints;
409 sev_sMsgHistDataGet* rmsg;
411 memset(&get, 0,
sizeof(get));
413 rmsg = (sev_sMsgHistDataGet*)
qcom_Get(sts, &ctx->
qid, &get, 0);
425 memset(&get, 0,
sizeof(get));
428 rmsg = (sev_sMsgHistDataGet*)
qcom_Get(sts, &ctx->
qid, &get, tmo);
429 if (*sts == QCOM__TMO || !rmsg) {
433 if (get.type.b == sev_cMsgClass
434 && get.type.s == (qcom_eStype)sev_eMsgType_HistDataGet
436 && str_NoCaseStrcmp(aname, rmsg->AName) == 0)
447 if (rmsg->NumPoints == 0) {
449 *sts = SEV__NOPOINTS;
453 int item_cnt = rmsg->NumPoints;
455 *tbuf = malloc(item_cnt *
sizeof(pwr_tTime));
456 *vbuf = malloc(item_cnt * rmsg->VSize);
458 memcpy(*tbuf, &rmsg->Data, item_cnt *
sizeof(pwr_tTime));
459 memcpy(*vbuf, (
char*)&rmsg->Data + item_cnt *
sizeof(pwr_tTime),
460 item_cnt * rmsg->VSize);
462 *vtype = rmsg->VType;
463 *vsize = rmsg->VSize;
477 char* aname, pwr_tTime starttime, pwr_tTime endtime,
int numpoints,
481 sev_sMsgHistDataGetRequest* msg;
492 tgt.
qix = sev_eProcSevServer;
494 put.reply = ctx->
qid;
495 put.type.b = (qcom_eBtype)sev_cMsgClass;
496 put.type.s = (qcom_eStype)sev_eMsgType_HistObjectDataGetRequest;
497 put.msg_id = ctx->
msg_id++;
498 put.size =
sizeof(*msg);
500 msg = (sev_sMsgHistDataGetRequest*)
qcom_Alloc(sts, put.size);
504 msg->Type = sev_eMsgType_HistObjectDataGetRequest;
505 msg->Version = sev_cNetVersion;
507 strncpy(msg->AName, aname,
sizeof(msg->AName));
508 msg->StartTime = net_TimeToNetTime(&starttime);
509 msg->EndTime = net_TimeToNetTime(&endtime);
510 msg->NumPoints = numpoints;
513 sev_sMsgHistObjectDataGet* rmsg;
515 memset(&get, 0,
sizeof(get));
518 rmsg = (sev_sMsgHistObjectDataGet*)
qcom_Get(sts, &ctx->
qid, &get, 0);
529 memset(&get, 0,
sizeof(get));
532 rmsg = (sev_sMsgHistObjectDataGet*)
qcom_Get(sts, &ctx->
qid, &get, tmo);
533 if (*sts == QCOM__TMO || !rmsg) {
538 if (get.type.b == sev_cMsgClass
539 && get.type.s == (qcom_eStype)sev_eMsgType_HistObjectDataGet
541 && str_NoCaseStrcmp(aname, rmsg->AName) == 0)
552 if (rmsg->NumPoints == 0) {
554 *sts = SEV__NOPOINTS;
558 *numattributes = rmsg->NumAttributes;
559 int item_cnt = rmsg->NumPoints;
560 unsigned int timebufsize = item_cnt *
sizeof(pwr_tTime);
561 unsigned int databufsize = rmsg->TotalDataSize - timebufsize;
562 *tbuf = malloc(timebufsize);
563 *vbuf = malloc(databufsize);
567 int attrCount = rmsg->NumAttributes;
568 void* ptr = &rmsg->Attr[attrCount];
569 memcpy(*tbuf, ptr, item_cnt *
sizeof(pwr_tTime));
570 memcpy(*vbuf, (
char*)ptr + item_cnt *
sizeof(pwr_tTime), databufsize);
574 for (i = 0; i < rmsg->NumAttributes; i++) {
575 strncpy(attrptr[i].aname, rmsg->Attr[i].
aname,
sizeof(attrptr[0].
aname));
576 attrptr[i].
type = rmsg->Attr[i].type;
577 attrptr[i].
size = rmsg->Attr[i].size;
595 sev_sMsgHistItemDelete* msg;
606 tgt.
qix = sev_eProcSevServer;
608 put.reply = ctx->
qid;
609 put.type.b = (qcom_eBtype)sev_cMsgClass;
610 put.type.s = (qcom_eStype)sev_eMsgType_HistItemDelete;
611 put.msg_id = ctx->
msg_id++;
612 put.size =
sizeof(*msg);
614 msg = (sev_sMsgHistItemDelete*)
qcom_Alloc(sts, put.size);
618 msg->Type = sev_eMsgType_HistItemDelete;
619 msg->Version = sev_cNetVersion;
621 strncpy(msg->AName, aname,
sizeof(msg->AName));
628 sev_sMsgHistItemStatus* rmsg;
630 memset(&get, 0,
sizeof(get));
633 rmsg = (sev_sMsgHistItemStatus*)
qcom_Get(sts, &ctx->
qid, &get, tmo);
634 if (*sts == QCOM__TMO || !rmsg)
637 if (get.type.b == sev_cMsgClass
638 && get.type.s == (qcom_eStype)sev_eMsgType_HistItemStatus
640 && str_NoCaseStrcmp(aname, rmsg->AName) == 0)
659 sevcli_sEventsItem** list,
unsigned int* cnt)
667 sevcli_sEventsItem* lp;
674 tgt.
qix = sev_eProcSevServer;
676 put.reply = ctx->
qid;
677 put.type.b = (qcom_eBtype)sev_cMsgClass;
678 put.type.s = (qcom_eStype)sev_eMsgType_EventsItemsRequest;
679 put.msg_id = ctx->
msg_id++;
680 put.size =
sizeof(*msg);
682 msg = (sev_sMsgAny*)
qcom_Alloc(sts, put.size);
686 msg->Type = sev_eMsgType_EventsItemsRequest;
687 msg->Version = sev_cNetVersion;
694 sev_sMsgEventsItems* rmsg;
696 memset(&get, 0,
sizeof(get));
699 rmsg = (sev_sMsgEventsItems*)
qcom_Get(sts, &ctx->
qid, &get, tmo);
700 if (*sts == QCOM__TMO || !rmsg) {
704 if (get.type.b == sev_cMsgClass
705 && get.type.s == (qcom_eStype)sev_eMsgType_EventsItems)
715 int item_cnt = rmsg->NumItems;
717 unsigned int data_size = (item_cnt *
sizeof(sevcli_sEventsItem));
718 lp = (sevcli_sEventsItem*)malloc(data_size);
719 sevcli_sEventsItem* lp2 = lp;
721 sev_sEventsItem* itemPtr = ((sev_sMsgEventsItems*)rmsg)->Items;
722 for (i = 0; i < item_cnt; i++) {
723 lp->oid = itemPtr->oid;
724 strncpy(lp->oname, itemPtr->oname,
sizeof(lp->oname));
725 strncpy(lp->description, itemPtr->description,
sizeof(lp->description));
726 str_Cut(lp->description,
sizeof(lp->description));
727 lp->storagetime = net_NetTimeToDeltaTime(&itemPtr->storagetime);
728 lp->options = itemPtr->options;
729 lp->creatime = net_NetTimeToTime(&itemPtr->creatime);
749 pwr_tTime starttime, pwr_tTime endtime,
pwr_tUInt32 eventtypemask,
751 unsigned int maxevents, sevcli_sEvents **list,
unsigned int* cnt)
753 sev_sMsgEventsGetRequest* msg;
768 if (cnf_get_value(
"sevTimeout", value_str,
sizeof(value_str))) {
769 nr = sscanf(value_str,
"%d", &value);
782 tgt.
qix = sev_eProcSevServer;
784 put.reply = ctx->
qid;
785 put.type.b = (qcom_eBtype)sev_cMsgClass;
786 put.type.s = (qcom_eStype)sev_eMsgType_EventsGetRequest;
787 put.msg_id = ctx->
msg_id++;
788 put.size =
sizeof(*msg);
790 msg = (sev_sMsgEventsGetRequest*)
qcom_Alloc(sts, put.size);
794 msg->Type = sev_eMsgType_EventsGetRequest;
795 msg->Version = sev_cNetVersion;
797 msg->StartTime = net_TimeToNetTime(&starttime);
798 msg->EndTime = net_TimeToNetTime(&endtime);
799 msg->EventTypeMask = eventtypemask;
800 msg->EventPrioMask = eventpriomask;
801 strncpy(msg->EventText, eventtext,
sizeof(msg->EventText));
802 strncpy(msg->EventName, eventname,
sizeof(msg->EventName));
803 msg->MaxEvents = maxevents;
806 sev_sMsgEventsGet* rmsg;
808 memset(&get, 0,
sizeof(get));
810 rmsg = (sev_sMsgEventsGet*)
qcom_Get(sts, &ctx->
qid, &get, 0);
822 memset(&get, 0,
sizeof(get));
825 rmsg = (sev_sMsgEventsGet*)
qcom_Get(sts, &ctx->
qid, &get, tmo);
826 if (*sts == QCOM__TMO || !rmsg) {
832 if (get.type.b == sev_cMsgClass
833 && get.type.s == (qcom_eStype)sev_eMsgType_EventsGet
845 if (rmsg->NumEvents == 0) {
847 *sts = SEV__NOPOINTS;
851 int item_cnt = rmsg->NumEvents;
853 *list = calloc(item_cnt,
sizeof(sevcli_sEventsItem));
857 for (i = 0; i < item_cnt; i++) {
858 lp->Time = net_NetTimeToTime(&ip->Time);
859 lp->EventType = ip->EventType;
860 lp->EventPrio = ip->EventPrio;
861 lp->SupObjectOid = ip->SupObjectOid;
862 lp->SupObjectOffset = ip->SupObjectOffset;
863 lp->SupObjectSize = ip->SupObjectSize;
864 strncpy(lp->EventText, ip->EventText,
sizeof(lp->EventText));
865 strncpy(lp->EventName, ip->EventName,
sizeof(lp->EventName));
866 lp->EventId = ip->EventId;
867 lp->EventStatus = ip->EventStatus;
Include file for Cdh Class definition handler.
Include file for Time management.
int cdh_ObjidIsEqual(pwr_tOid Object_1, pwr_tOid Object_2)
Test if two object identities are equal.
pwr_tBoolean qcom_NextNode(pwr_tStatus *sts, qcom_sNode *node, pwr_tNodeId nid)
Get the next qcom node. If nid is pwr_cNNodeId the first node is returned.
pwr_tBoolean qcom_MyNode(pwr_tStatus *sts, qcom_sNode *node)
Get the local qcom node.
pwr_tBoolean qcom_Put(pwr_tStatus *sts, const qcom_sQid *receiver, qcom_sPut *put)
Put a new message.
pwr_tBoolean qcom_CreateQ(pwr_tStatus *sts, qcom_sQid *myQ, qcom_sQattr *attr, const char *qname)
Create a queue and make an implicit connect to it.
pwr_tBoolean qcom_Free(pwr_tStatus *sts, void *buffer)
Free a previously allocated buffer.
void * qcom_Get(pwr_tStatus *sts, const qcom_sQid *myQ, qcom_sGet *get, int tmo_ms)
Get a new message.
pwr_tBoolean qcom_DeleteQ(pwr_tStatus *sts, const qcom_sQid *myQ)
Delete a queue. Delete a queue and release all resources held by the queue.
void * qcom_Alloc(pwr_tStatus *sts, unsigned int size)
Allocate a buffer in the qcom pool.
int sevcli_get_itemdata(pwr_tStatus *sts, sevcli_tCtx ctx, pwr_tOid oid, char *aname, pwr_tTime starttime, pwr_tTime endtime, int numpoints, pwr_tTime **tbuf, void **vbuf, int *rows, pwr_eType *vtype, unsigned int *vsize)
Fetch stored historical data for an attribute.
int sevcli_get_events(pwr_tStatus *sts, sevcli_tCtx ctx, pwr_tOid oid, pwr_tTime starttime, pwr_tTime endtime, pwr_tUInt32 eventtypemask, pwr_tUInt32 eventpriomask, pwr_tString80 eventtext, pwr_tOName eventname, unsigned int maxevents, sevcli_sEvents **list, unsigned int *cnt)
Fetch stored historical events for an events item.
int sevcli_set_servernode(pwr_tStatus *sts, sevcli_tCtx ctx, char *nodename)
Set server from node name. This function is called to state which server node you want to communicate...
int sevcli_init(pwr_tStatus *sts, sevcli_tCtx *ctx)
Initialization of the client. Creates a context and opens a Qcom queue for the communication....
void sevcli_store_ctx(sevcli_tCtx ctx)
Store context.
int sevcli_delete_item(pwr_tStatus *sts, sevcli_tCtx ctx, pwr_tOid oid, char *aname)
Removes all data for a stored attribute in the storage database.
int sevcli_get_eventsitemlist(pwr_tStatus *sts, sevcli_tCtx ctx, sevcli_sEventsItem **list, unsigned int *cnt)
Fetches a list with the stored eventlists of the server.
int sevcli_close(pwr_tStatus *sts, sevcli_tCtx ctx)
Close the communication. Removes the Qcom queue and frees the context.
void sevcli_set_servernid(sevcli_tCtx ctx, pwr_tNid nid)
Set server from node id. This function is called to state which server node you want to communicate w...
sevcli_tCtx sevcli_get_stored_ctx(void)
Get stored context.
int sevcli_get_objectitemdata(pwr_tStatus *sts, sevcli_tCtx ctx, pwr_tOid oid, char *aname, pwr_tTime starttime, pwr_tTime endtime, int numpoints, pwr_tTime **tbuf, void **vbuf, int *rows, sevcli_sHistAttr **histattr, int *numattributes)
Fetch stored historical data for an object item.
int sevcli_get_itemlist(pwr_tStatus *sts, sevcli_tCtx ctx, sevcli_sHistItem **list, unsigned int *cnt)
Fetches a list with the stored attributes of the server.
#define EVEN(a)
Check if value is even.
unsigned int pwr_tUInt32
32-bit unsigned integer type.
char pwr_tString80[80]
80 byte string type.
int pwr_tStatus
Status type.
char pwr_tOName[199+1]
Full Object Name type.
pwr_tVolumeId pwr_tNid
Node identity type.
Include file for Sevcli SEV Client interface.
pwr_tNodeId nid
node index
pwr_tString80 description
pwr_tDeltaTime storagetime