- fix problem: TLS does not work with HandleSet

pull/266/head
Michael Zillgith 5 years ago
parent e59aa5521e
commit 981c2dd5f3

@ -48,7 +48,6 @@ int main(int argc, char** argv) {
if (error == IED_ERROR_OK) {
#if 0
/************************
* Direct control
***********************/
@ -150,31 +149,29 @@ int main(int argc, char** argv) {
else {
printf("Reading status for simpleIOGenericIO/GGIO1.SPCSO3 failed!\n");
}
#endif
/***********************************************
* Select before operate with enhanced security
***********************************************/
ControlObjectClient control = ControlObjectClient_create("TESTIED1LD0/CBCSWI1.Pos", con);
control = ControlObjectClient_create("simpleIOGenericIO/GGIO1.SPCSO4", con);
ControlObjectClient_setCommandTerminationHandler(control, commandTerminationHandler, NULL);
MmsValue* ctlVal = MmsValue_newBoolean(true);
ctlVal = MmsValue_newBoolean(true);
if (ControlObjectClient_selectWithValue(control, ctlVal)) {
if (ControlObjectClient_operate(control, ctlVal, 0 /* operate now */)) {
printf("TESTIED1LD0/CBCSWI1.Pos\n");
printf("simpleIOGenericIO/GGIO1.SPCSO4 operated successfully\n");
}
else {
printf("TESTIED1LD0/CBCSWI1.Pos!\n");
printf("failed to operate simpleIOGenericIO/GGIO1.SPCSO4!\n");
}
}
else {
printf("failed to select TESTIED1LD0/CBCSWI1.Pos!\n");
printf("failed to select simpleIOGenericIO/GGIO1.SPCSO4!\n");
}
MmsValue_delete(ctlVal);
@ -184,7 +181,7 @@ int main(int argc, char** argv) {
ControlObjectClient_destroy(control);
#if 0
/*********************************************************************
* Direct control with enhanced security (expect CommandTermination-)
*********************************************************************/
@ -208,7 +205,6 @@ int main(int argc, char** argv) {
Thread_sleep(1000);
ControlObjectClient_destroy(control);
#endif
IedConnection_close(con);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -98,6 +98,10 @@ clientAuthenticator(void* parameter, AcseAuthenticationParameter authParameter,
printf(" client ae-qualifier: %i\n", appRef->aeQualifier);
printf(" auth-mechanism: %i\n", authParameter->mechanism);
if (authParameter->mechanism == ACSE_AUTH_TLS) {
printf(" Has certificate with size: %i\n", authParameter->value.certificate.length);
}
return true;
}

@ -191,8 +191,6 @@ IsoClientConnection_create(IsoConnectionParameters parameters, IsoIndicationCall
return self;
}
static bool
sendConnectionRequestMessage(IsoClientConnection self)
{
@ -212,14 +210,13 @@ sendConnectionRequestMessage(IsoClientConnection self)
else {
if (DEBUG_ISO_CLIENT)
printf("TLS handshake failed!\n");
printf("ISO_CLIENT: TLS handshake failed!\n");
return false;
}
}
#endif /* (CONFIG_MMS_SUPPORT_TLS == 1) */
/* COTP (ISO transport) handshake */
CotpIndication cotpIndication =
CotpConnection_sendConnectionRequestMessage(self->cotpConnection, self->parameters);
@ -366,7 +363,7 @@ IsoClientConnection_handleConnection(IsoClientConnection self)
if (currentTime > self->nextReadTimeout) {
if (DEBUG_ISO_CLIENT)
printf("Timeout waiting for COTP CR\n");
printf("ISO_CLIENT: Timeout waiting for COTP CR\n");
IsoClientConnection_releaseTransmitBuffer(self);
@ -384,7 +381,7 @@ IsoClientConnection_handleConnection(IsoClientConnection self)
if (cotpIndication != COTP_CONNECT_INDICATION) {
if (DEBUG_ISO_CLIENT)
printf("Unexpected COTP state (%i)\n", cotpIndication);
printf("ISO_CLIENT: Unexpected COTP state (%i)\n", cotpIndication);
IsoClientConnection_releaseTransmitBuffer(self);
@ -402,7 +399,7 @@ IsoClientConnection_handleConnection(IsoClientConnection self)
}
else if (packetState == TPKT_ERROR) {
if (DEBUG_ISO_CLIENT)
printf("Error receiving COTP message\n");
printf("ISO_CLIENT: Error receiving COTP message\n");
IsoClientConnection_releaseTransmitBuffer(self);
@ -425,7 +422,7 @@ IsoClientConnection_handleConnection(IsoClientConnection self)
if (currentTime > self->nextReadTimeout) {
if (DEBUG_ISO_CLIENT)
printf("Timeout waiting for ACSE initiate response\n");
printf("ISO_CLIENT: Timeout waiting for ACSE initiate response\n");
self->callback(ISO_IND_ASSOCIATION_FAILED, self->callbackParameter, NULL);
@ -441,7 +438,7 @@ IsoClientConnection_handleConnection(IsoClientConnection self)
if (cotpIndication != COTP_DATA_INDICATION) {
if (DEBUG_ISO_CLIENT)
printf("Unexpected COTP state (%i)\n", cotpIndication);
printf("ISO_CLIENT: Unexpected COTP state (%i)\n", cotpIndication);
self->callback(ISO_IND_ASSOCIATION_FAILED, self->callbackParameter, NULL);
@ -458,7 +455,7 @@ IsoClientConnection_handleConnection(IsoClientConnection self)
if (sessionIndication != SESSION_CONNECT) {
if (DEBUG_ISO_CLIENT)
printf("IsoClientConnection_associate: no session connect indication\n");
printf("ISO_CLIENT: IsoClientConnection_associate: no session connect indication\n");
self->callback(ISO_IND_ASSOCIATION_FAILED, self->callbackParameter, NULL);
@ -469,7 +466,7 @@ IsoClientConnection_handleConnection(IsoClientConnection self)
if (IsoPresentation_parseAcceptMessage(self->presentation, IsoSession_getUserData(self->session)) == false) {
if (DEBUG_ISO_CLIENT)
printf("IsoClientConnection_associate: no presentation ok indication\n");
printf("ISO_CLIENT: IsoClientConnection_associate: no presentation ok indication\n");
self->callback(ISO_IND_ASSOCIATION_FAILED, self->callbackParameter, NULL);
@ -481,7 +478,7 @@ IsoClientConnection_handleConnection(IsoClientConnection self)
if (acseIndication != ACSE_ASSOCIATE) {
if (DEBUG_ISO_CLIENT)
printf("IsoClientConnection_associate: no ACSE_ASSOCIATE indication\n");
printf("ISO_CLIENT: IsoClientConnection_associate: no ACSE_ASSOCIATE indication\n");
self->callback(ISO_IND_ASSOCIATION_FAILED, self->callbackParameter, NULL);
@ -509,7 +506,7 @@ IsoClientConnection_handleConnection(IsoClientConnection self)
}
else if (packetState == TPKT_ERROR) {
if (DEBUG_ISO_CLIENT)
printf("Error receiving COTP message\n");
printf("ISO_CLIENT: Error receiving COTP message\n");
self->callback(ISO_IND_ASSOCIATION_FAILED, self->callbackParameter, NULL);

@ -662,10 +662,26 @@ CotpConnection_resetPayload(CotpConnection* self)
self->payload->size = 0;
}
static int
readFromSocket(CotpConnection* self, uint8_t* buf, int size)
{
#if (CONFIG_MMS_SUPPORT_TLS == 1)
if (self->tlsSocket)
return TLSSocket_read(self->tlsSocket, buf, size);
else {
switch (Handleset_waitReady(self->handleSet, 10))
{
case -1:
return -1;
case 0:
return 0;
default:
break;
}
return Socket_read(self->socket, buf, size);
}
#else
switch (Handleset_waitReady(self->handleSet, 10))
{
case -1:
@ -675,12 +691,7 @@ readFromSocket(CotpConnection* self, uint8_t* buf, int size)
default:
break;
}
#if (CONFIG_MMS_SUPPORT_TLS == 1)
if (self->tlsSocket)
return TLSSocket_read(self->tlsSocket, buf, size);
else
return Socket_read(self->socket, buf, size);
#else
return Socket_read(self->socket, buf, size);
#endif
}

Loading…
Cancel
Save