Commit fb078a81 authored by claes's avatar claes

*** empty log message ***

parent 42811546
/* /*
* Proview $Id: opc_provider.cpp,v 1.4 2007-03-13 12:02:07 claes Exp $ * Proview $Id: opc_provider.cpp,v 1.5 2007-03-13 15:48:41 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB. * Copyright (C) 2005 SSAB Oxelsund AB.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
...@@ -397,6 +397,10 @@ void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix) ...@@ -397,6 +397,10 @@ void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix)
SOAP_OK) { SOAP_OK) {
pwr_tOix next_bws; pwr_tOix next_bws;
pwr_tOix bws = 0; pwr_tOix bws = 0;
if ( browse_response.Errors.size() > 0) {
errlog( browse.ItemName, browse_response.Errors);
}
for ( int i = 0; i < (int)browse_response.Elements.size(); i++) { for ( int i = 0; i < (int)browse_response.Elements.size(); i++) {
next_bws = next_oix; next_bws = next_oix;
insert_object( oix, bws, browse_response.Elements[i], insert_object( oix, bws, browse_response.Elements[i],
...@@ -679,6 +683,13 @@ char *opc_provider::name_to_objectname( char *name) ...@@ -679,6 +683,13 @@ char *opc_provider::name_to_objectname( char *name)
return n; return n;
} }
void opc_provider::errlog( std::string* item, std::vector<ns1__OPCError *>& errvect)
{
for ( int i = 0; i < (int) errvect.size(); i++)
printf( "OPC Error: %s %s\n", item->c_str(), errvect[i]->ID.c_str());
}
void usage() void usage()
{ {
cout << "remote_pvd_pwrcli Proview provider client" << endl << endl << cout << "remote_pvd_pwrcli Proview provider client" << endl << endl <<
......
/* /*
* Proview $Id: opc_provider.h,v 1.4 2007-03-13 12:02:07 claes Exp $ * Proview $Id: opc_provider.h,v 1.5 2007-03-13 15:48:41 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB. * Copyright (C) 2005 SSAB Oxelsund AB.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
...@@ -83,6 +83,7 @@ public: ...@@ -83,6 +83,7 @@ public:
void get_server_state(); void get_server_state();
char *opc_provider::name_to_objectname( char *name); char *opc_provider::name_to_objectname( char *name);
void errlog( std::string* item, std::vector<ns1__OPCError *>& errvect);
vector<opcprv_obj> m_list; vector<opcprv_obj> m_list;
pwr_tOix root; pwr_tOix root;
......
/* /*
* Proview $Id: opc_server.cpp,v 1.4 2007-03-13 12:02:07 claes Exp $ * Proview $Id: opc_server.cpp,v 1.5 2007-03-13 15:48:41 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB. * Copyright (C) 2005 SSAB Oxelsund AB.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
...@@ -552,18 +552,33 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow ...@@ -552,18 +552,33 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
pwr_tOName name; pwr_tOName name;
pwr_tCid cid; pwr_tCid cid;
unsigned int property_mask; unsigned int property_mask;
pwr_tTime current_time;
unsigned int erropt = 0;
opc_current_access = opcsrv_get_access( so); opc_current_access = opcsrv_get_access( so);
clock_gettime( CLOCK_REALTIME, &current_time);
ns1__BrowseResponse->BrowseResult = new ns1__ReplyBase();
ns1__BrowseResponse->BrowseResult->RcvTime = current_time.tv_sec;
ns1__BrowseResponse->BrowseResult->ReplyTime = current_time.tv_sec;
ns1__BrowseResponse->BrowseResult->ClientRequestHandle = ns1__Browse->ClientRequestHandle;
ns1__BrowseResponse->BrowseResult->ServerState = ns1__serverState__running;
if ( (!ns1__Browse->ItemName || ns1__Browse->ItemName->empty()) && if ( (!ns1__Browse->ItemName || ns1__Browse->ItemName->empty()) &&
(!ns1__Browse->ItemPath || ns1__Browse->ItemPath->empty())) { (!ns1__Browse->ItemPath || ns1__Browse->ItemPath->empty())) {
// Return rootlist // Return rootlist
for ( sts = gdh_GetRootList( &oid); ODD(sts); sts = gdh_GetNextSibling( oid, &oid)) { for ( sts = gdh_GetRootList( &oid); ODD(sts); sts = gdh_GetNextSibling( oid, &oid)) {
sts = gdh_ObjidToName( oid, name, sizeof(name), cdh_mName_object); sts = gdh_ObjidToName( oid, name, sizeof(name), cdh_mName_object);
if ( EVEN(sts)) continue; if ( EVEN(sts)) {
opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_FAIL, erropt);
return 0;
}
sts = gdh_GetObjectClass( oid, &cid); sts = gdh_GetObjectClass( oid, &cid);
if ( EVEN(sts)) continue; if ( EVEN(sts)) {
opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_FAIL, erropt);
return 0;
}
ns1__BrowseElement *element = new ns1__BrowseElement(); ns1__BrowseElement *element = new ns1__BrowseElement();
element->Name = new std::string( name); element->Name = new std::string( name);
...@@ -608,11 +623,13 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow ...@@ -608,11 +623,13 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
sts = gdh_NameToAttrref( pwr_cNOid, pname, &paref); sts = gdh_NameToAttrref( pwr_cNOid, pname, &paref);
if ( EVEN(sts)) { if ( EVEN(sts)) {
opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_UNKNOWNITEMNAME, erropt);
return 0; return 0;
} }
sts = gdh_GetAttrRefTid( &paref, &cid); sts = gdh_GetAttrRefTid( &paref, &cid);
if ( EVEN(sts)) { if ( EVEN(sts)) {
opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_FAIL, erropt);
return 0; return 0;
} }
...@@ -627,17 +644,18 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow ...@@ -627,17 +644,18 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
sts = gdh_AttrArefToObjectAref( &paref, &oaref); sts = gdh_AttrArefToObjectAref( &paref, &oaref);
if ( EVEN(sts)) { if ( EVEN(sts)) {
opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_FAIL, erropt);
return 0; return 0;
} }
sts = gdh_GetAttrRefTid( &oaref, &cid); sts = gdh_GetAttrRefTid( &oaref, &cid);
if ( EVEN(sts)) { if ( EVEN(sts)) {
// E_INVALIDITEMNAME opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_FAIL, erropt);
return 0; return 0;
} }
if ( !( attrname = strrchr( pname, '.'))) { if ( !( attrname = strrchr( pname, '.'))) {
// E_INVALIDITEMNAME opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_FAIL, erropt);
return 0; return 0;
} }
attrname++; attrname++;
...@@ -645,7 +663,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow ...@@ -645,7 +663,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
// Get body definition // Get body definition
sts = gdh_GetObjectBodyDef( cid, &bd, &rows, pwr_cNOid); sts = gdh_GetObjectBodyDef( cid, &bd, &rows, pwr_cNOid);
if ( EVEN(sts)) { if ( EVEN(sts)) {
// E_INVALIDITEMNAME opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_FAIL, erropt);
return 0; return 0;
} }
int bd_idx = -1; int bd_idx = -1;
...@@ -657,12 +675,16 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow ...@@ -657,12 +675,16 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
} }
if ( bd_idx == -1) { if ( bd_idx == -1) {
// E_INVALIDITEMNAME // E_INVALIDITEMNAME
opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_FAIL, erropt);
free( (char *)bd); free( (char *)bd);
return 0; return 0;
} }
sts = gdh_GetAttributeCharAttrref( &paref, &a_type, &a_size, &a_offs, &a_dim); sts = gdh_GetAttributeCharAttrref( &paref, &a_type, &a_size, &a_offs, &a_dim);
if ( EVEN(sts)) return 0; if ( EVEN(sts)) {
opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_FAIL, erropt);
return 0;
}
for ( int i = 0; i < (int)a_dim; i++) { for ( int i = 0; i < (int)a_dim; i++) {
ns1__BrowseElement *element = new ns1__BrowseElement(); ns1__BrowseElement *element = new ns1__BrowseElement();
...@@ -671,8 +693,10 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow ...@@ -671,8 +693,10 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
s = strrchr( itemname, '.'); s = strrchr( itemname, '.');
if ( s) if ( s)
strcpy( aname, s + 1); strcpy( aname, s + 1);
else else {
opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_FAIL, erropt);
return 0; return 0;
}
element->Name = new std::string( aname); element->Name = new std::string( aname);
element->ItemName = new std::string( itemname); element->ItemName = new std::string( itemname);
element->IsItem = true; element->IsItem = true;
...@@ -686,7 +710,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow ...@@ -686,7 +710,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
if ( property_mask) { if ( property_mask) {
sts = gdh_NameToAttrref( pwr_cNOid, itemname, &aref); sts = gdh_NameToAttrref( pwr_cNOid, itemname, &aref);
if ( EVEN(sts)) { if ( EVEN(sts)) {
// E_INVALIDITEMNAME opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_FAIL, erropt);
return 0; return 0;
} }
...@@ -703,6 +727,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow ...@@ -703,6 +727,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
} }
if ( !cdh_tidIsCid( cid)) { if ( !cdh_tidIsCid( cid)) {
opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_FAIL, erropt);
return 0; return 0;
} }
...@@ -722,14 +747,19 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow ...@@ -722,14 +747,19 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
continue; continue;
sts = gdh_ArefANameToAref( &paref, bd[i].attrName, &aref); sts = gdh_ArefANameToAref( &paref, bd[i].attrName, &aref);
if ( EVEN(sts)) return sts; if ( EVEN(sts)) {
opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_FAIL, erropt);
return 0;
}
if ( bd[i].attr->Param.Info.Flags & PWR_MASK_DISABLEATTR) { if ( bd[i].attr->Param.Info.Flags & PWR_MASK_DISABLEATTR) {
pwr_tDisableAttr disabled; pwr_tDisableAttr disabled;
sts = gdh_ArefDisabled( &aref, &disabled); sts = gdh_ArefDisabled( &aref, &disabled);
if ( EVEN(sts)) return sts; if ( EVEN(sts)) {
opcsrv_returnerror( ns1__BrowseResponse->Errors, 0, opc_eResultCode_E_FAIL, erropt);
return 0;
}
if ( disabled) if ( disabled)
continue; continue;
} }
......
/* /*
* Proview $Id: opc_utl.cpp,v 1.6 2007-03-13 12:02:07 claes Exp $ * Proview $Id: opc_utl.cpp,v 1.7 2007-03-13 15:48:41 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB. * Copyright (C) 2005 SSAB Oxelsund AB.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
...@@ -111,7 +111,7 @@ static char opc_ResultTexts[23][20] = {"edgar o was here", ...@@ -111,7 +111,7 @@ static char opc_ResultTexts[23][20] = {"edgar o was here",
"edgar o was here", "edgar o was here",
"edgar o was here"}; "edgar o was here"};
void opcsrv_returnerror(std::vector<ns1__OPCError *>& errors, std::string *rc, int err_code, unsigned int options) void opcsrv_returnerror(std::vector<ns1__OPCError *>& errors, std::string **rc, int err_code, unsigned int options)
{ {
pwr_tString32 str; pwr_tString32 str;
int ii; int ii;
...@@ -119,8 +119,9 @@ void opcsrv_returnerror(std::vector<ns1__OPCError *>& errors, std::string *rc, i ...@@ -119,8 +119,9 @@ void opcsrv_returnerror(std::vector<ns1__OPCError *>& errors, std::string *rc, i
opc_resultcode_to_string(err_code, str); opc_resultcode_to_string(err_code, str);
rc = new std::string(str); if ( rc)
*rc = new std::string(str);
for (ii = 0; ii < (int) errors.size(); ii++) { for (ii = 0; ii < (int) errors.size(); ii++) {
if (strncmp(errors[ii]->ID.c_str(), str, sizeof(str)) == 0) { if (strncmp(errors[ii]->ID.c_str(), str, sizeof(str)) == 0) {
exists = true; exists = true;
......
/* /*
* Proview $Id: opc_utl.h,v 1.5 2007-03-12 07:52:02 claes Exp $ * Proview $Id: opc_utl.h,v 1.6 2007-03-13 15:48:41 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB. * Copyright (C) 2005 SSAB Oxelsund AB.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
...@@ -105,7 +105,7 @@ typedef enum { ...@@ -105,7 +105,7 @@ typedef enum {
opc_eResultCode_E_BADTYPE , opc_eResultCode_E_BADTYPE ,
} opc_eResultCode; } opc_eResultCode;
void opcsrv_returnerror(std::vector<ns1__OPCError *>& errors, std::string *rc, int err_code ); void opcsrv_returnerror(std::vector<ns1__OPCError *>& errors, std::string **rc, int err_code, unsigned int options);
bool opc_requestoptions_to_mask( ns1__RequestOptions *options, unsigned int *mask); bool opc_requestoptions_to_mask( ns1__RequestOptions *options, unsigned int *mask);
pwr_tStatus time_AtoOPCAscii (pwr_tTime *tp, char *buf, int bufsize); pwr_tStatus time_AtoOPCAscii (pwr_tTime *tp, char *buf, int bufsize);
bool opc_resultcode_to_string( int type, char *str); bool opc_resultcode_to_string( int type, char *str);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment