Я настраиваю проект, который передает информацию о носимых устройствах (в данном случае GearFit2 от samsung) брокеру MQTT, но он не может подключиться к серверу SSL.В конце концов, полученная мной ошибка прослеживается до SSLSocket_error (внутри SSLSocket.c), который затем возвращает возвращаемое значение SSL_ERROR_SSL
Идея возникла из реализации Дживоном Парк: https://craftroom.tizen.org/mqtt/. По сути, яудалось подключиться к серверу, отличному от SSL, но не к серверу SSL (который предназначен для этого проекта)
#define ADDRESS "ssl://webdemo.edu:8883"
#define USERNAME "username"
#define PASSWORD "password"
void sensor_event_callback(sensor_h sensor, sensor_event_s *event, void *user_data)
{
dlog_print(DLOG_DEBUG, LOG_TAG, "callback reached");
MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
MQTTClient_message pubmsg = MQTTClient_message_initializer;
MQTTClient_deliveryToken token;
MQTTClient_SSLOptions sslopts = MQTTClient_SSLOptions_initializer;
signal(SIGINT, cfinish);
signal(SIGTERM, cfinish);
rc = MQTTClient_create(&client, ADDRESS, "host", MQTTCLIENT_PERSISTENCE_NONE, NULL);
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;
conn_opts.username = USERNAME;
conn_opts.password = PASSWORD;
conn_opts.ssl = &sslopts;
if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) {
dlog_print(DLOG_DEBUG, LOG_TAG, "Failed to connect, return code %d\n", rc);
exit(EXIT_FAILURE);
}
...
}
// within SSLSocket.c
int SSLSocket_error(char* aString, SSL* ssl, int sock, int rc)
{
int error;
FUNC_ENTRY;
if (ssl)
error = SSL_get_error(ssl, rc);
else
error = ERR_get_error();
if (error == SSL_ERROR_WANT_READ || error == SSL_ERROR_WANT_WRITE)
{
Log(TRACE_MIN, -1, "SSLSocket error WANT_READ/WANT_WRITE");
}
else
{
static char buf[120];
if (strcmp(aString, "shutdown") != 0)
Log(TRACE_MIN, -1, "SSLSocket error %s(%d) in %s for socket %d rc %d errno %d %s\n", buf, error, aString, sock, rc, errno, strerror(errno));
ERR_print_errors_fp(stderr);
if (error == SSL_ERROR_SSL || error == SSL_ERROR_SYSCALL){
dlog_print(DLOG_DEBUG, "sensor", "error val %d", error);
error = SSL_FATAL;
}
}
FUNC_EXIT_RC(error);
return error;
}
Выход MQTTClient_connect (client, & conn_opts)) равен -3, что соответствуетв SSL_FATAL.Как я уже говорил ранее, копание глубже в файл SSLSocket.c показывает, что это возвращаемое значение было потому, что было что-то, что заставило программу вернуть ошибку SSL_ERROR_SSL, которая не прослеживается ни для чего другого.В идеальном мире результат будет 0 (что означает успех).Может ли быть ошибка при реализации библиотеки?