Skip to content

Commit 30435e5

Browse files
committed
fix(getparam): return actual value and correct u16 param handling
1 parent 1b15218 commit 30435e5

2 files changed

Lines changed: 50 additions & 10 deletions

File tree

src/node_snap7_client.cpp

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -829,20 +829,42 @@ NAN_METHOD(S7Client::Disconnect) {
829829
}
830830

831831
NAN_METHOD(S7Client::GetParam) {
832+
int paramNumber, ret;
833+
int pData = 0;
834+
uint16_t pU16Data = 0;
835+
832836
S7Client *s7client = ObjectWrap::Unwrap<S7Client>(info.Holder());
833837

834838
if (!info[0]->IsInt32()) {
835839
return Nan::ThrowTypeError("Wrong arguments");
836840
}
837841

838-
int pData;
839-
int returnValue = s7client->snap7Client->GetParam(Nan::To<int32_t>(info[0]).FromJust()
840-
, &pData);
842+
paramNumber = Nan::To<int32_t>(info[0]).FromJust();
841843

842-
if (returnValue == 0) {
843-
info.GetReturnValue().Set(Nan::New<v8::Integer>(pData));
844+
switch (paramNumber) {
845+
case p_u16_RemotePort:
846+
case p_u16_SrcRef:
847+
case p_u16_DstRef:
848+
case p_u16_SrcTSap:
849+
ret = s7client->snap7Client->GetParam(paramNumber, &pU16Data);
850+
break;
851+
default:
852+
ret = s7client->snap7Client->GetParam(paramNumber, &pData);
853+
break;
854+
}
855+
856+
if (ret != 0) {
857+
info.GetReturnValue().Set(Nan::New<v8::Integer>(ret));
858+
return;
859+
}
860+
861+
if (paramNumber == p_u16_RemotePort ||
862+
paramNumber == p_u16_SrcRef ||
863+
paramNumber == p_u16_DstRef ||
864+
paramNumber == p_u16_SrcTSap) {
865+
info.GetReturnValue().Set(Nan::New<v8::Integer>(pU16Data));
844866
} else {
845-
info.GetReturnValue().Set(Nan::New<v8::Integer>(returnValue));
867+
info.GetReturnValue().Set(Nan::New<v8::Integer>(pData));
846868
}
847869
}
848870

src/node_snap7_server.cpp

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -976,18 +976,36 @@ NAN_METHOD(S7Server::SetResourceless) {
976976
}
977977

978978
NAN_METHOD(S7Server::GetParam) {
979+
int paramNumber, ret;
980+
int pData = 0;
981+
uint16_t pU16Data = 0;
982+
979983
S7Server *s7server = ObjectWrap::Unwrap<S7Server>(info.Holder());
980984

981985
if (!info[0]->IsInt32()) {
982986
return Nan::ThrowTypeError("Wrong arguments");
983987
}
984988

985-
int pData;
986-
int ret = s7server->snap7Server->GetParam(Nan::To<int32_t>(info[0]).FromJust()
987-
, &pData);
989+
paramNumber = Nan::To<int32_t>(info[0]).FromJust();
990+
991+
if (paramNumber == p_u16_LocalPort) {
992+
ret = s7server->snap7Server->GetParam(paramNumber, &pU16Data);
993+
} else {
994+
ret = s7server->snap7Server->GetParam(paramNumber, &pData);
995+
}
996+
988997
s7server->lastError = ret;
989998

990-
info.GetReturnValue().Set(Nan::New<v8::Boolean>(ret == 0));
999+
if (ret != 0) {
1000+
info.GetReturnValue().Set(Nan::False());
1001+
return;
1002+
}
1003+
1004+
if (paramNumber == p_u16_LocalPort) {
1005+
info.GetReturnValue().Set(Nan::New<v8::Integer>(pU16Data));
1006+
} else {
1007+
info.GetReturnValue().Set(Nan::New<v8::Integer>(pData));
1008+
}
9911009
}
9921010

9931011
NAN_METHOD(S7Server::SetParam) {

0 commit comments

Comments
 (0)