Skip to content

Commit 9404fe1

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

2 files changed

Lines changed: 52 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: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -976,18 +976,38 @@ 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+
info.GetReturnValue().Set(Nan::New<v8::Integer>(pU16Data));
994+
} else {
995+
ret = s7server->snap7Server->GetParam(paramNumber, &pData);
996+
info.GetReturnValue().Set(Nan::New<v8::Integer>(pData));
997+
}
998+
988999
s7server->lastError = ret;
9891000

990-
info.GetReturnValue().Set(Nan::New<v8::Boolean>(ret == 0));
1001+
if (ret != 0) {
1002+
info.GetReturnValue().Set(Nan::New<v8::Boolean>(false));
1003+
return;
1004+
}
1005+
1006+
if (paramNumber == p_u16_LocalPort) {
1007+
info.GetReturnValue().Set(Nan::New<v8::Integer>(pU16Data));
1008+
} else {
1009+
info.GetReturnValue().Set(Nan::New<v8::Integer>(pData));
1010+
}
9911011
}
9921012

9931013
NAN_METHOD(S7Server::SetParam) {

0 commit comments

Comments
 (0)