123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #include <stdlib.h>
- #include <assert.h>
- #include "testing_networklayers.h"
- #include "testing_clock.h"
- #include "ua_config_default.h"
- static UA_ByteString *vBuffer;
- static UA_ByteString sendBuffer;
- UA_StatusCode UA_Client_recvTesting_result = UA_STATUSCODE_GOOD;
- static UA_StatusCode
- dummyGetSendBuffer(UA_Connection *connection, size_t length, UA_ByteString *buf) {
- if(length > sendBuffer.length)
- return UA_STATUSCODE_BADCOMMUNICATIONERROR;
- *buf = sendBuffer;
- buf->length = length;
- return UA_STATUSCODE_GOOD;
- }
- static void
- dummyReleaseSendBuffer(UA_Connection *connection, UA_ByteString *buf) {
- }
- static UA_StatusCode
- dummySend(UA_Connection *connection, UA_ByteString *buf) {
- assert(connection != NULL);
- assert(buf != NULL);
- if(vBuffer) {
- UA_ByteString_deleteMembers(vBuffer);
- UA_ByteString_copy(buf, vBuffer);
- }
- return UA_STATUSCODE_GOOD;
- }
- static void
- dummyReleaseRecvBuffer(UA_Connection *connection, UA_ByteString *buf) {
- }
- static void
- dummyClose(UA_Connection *connection) {
- if(vBuffer)
- UA_ByteString_deleteMembers(vBuffer);
- UA_ByteString_deleteMembers(&sendBuffer);
- }
- UA_Connection createDummyConnection(size_t sendBufferSize,
- UA_ByteString *verificationBuffer) {
- vBuffer = verificationBuffer;
- UA_ByteString_allocBuffer(&sendBuffer, sendBufferSize);
- UA_Connection c;
- c.state = UA_CONNECTION_ESTABLISHED;
- c.config = UA_ConnectionConfig_default;
- c.channel = NULL;
- c.sockfd = 0;
- c.handle = NULL;
- c.incompleteChunk = UA_BYTESTRING_NULL;
- c.getSendBuffer = dummyGetSendBuffer;
- c.releaseSendBuffer = dummyReleaseSendBuffer;
- c.send = dummySend;
- c.recv = NULL;
- c.releaseRecvBuffer = dummyReleaseRecvBuffer;
- c.close = dummyClose;
- return c;
- }
- UA_UInt32 UA_Client_recvSleepDuration;
- UA_StatusCode (*UA_Client_recv)(UA_Connection *connection, UA_ByteString *response,
- UA_UInt32 timeout);
- UA_StatusCode
- UA_Client_recvTesting(UA_Connection *connection, UA_ByteString *response,
- UA_UInt32 timeout) {
- if(UA_Client_recvTesting_result != UA_STATUSCODE_GOOD) {
- UA_StatusCode temp = UA_Client_recvTesting_result;
- UA_Client_recvTesting_result = UA_STATUSCODE_GOOD;
- UA_fakeSleep(timeout);
- return temp;
- }
- UA_StatusCode res = UA_Client_recv(connection, response, timeout);
- if(res == UA_STATUSCODE_GOODNONCRITICALTIMEOUT)
- UA_fakeSleep(timeout);
- else
- UA_fakeSleep(UA_Client_recvSleepDuration);
- UA_Client_recvSleepDuration = 0;
- return res;
- }
|