return edg_wll_ResetError(ctx);
}
-/* XXX XXX This is black magics. "Sometimes" server refuses the client with SSL
- * alert "certificate expired" even if it is not true. In this case the server
- * slave terminates (which helps, usually), and we can reconnect transparently.
- */
-/* This string appears in the error message in this case */
-#define _EXPIRED_ALERT_MESSAGE "function SSL3_READ_BYTES: sslv3 alert certificate expired"
-#define _EXPIRED_ALERT_RETRY_COUNT 10 /* default number of slaves, hope that not all
- are in the bad state */
-#define _EXPIRED_ALERT_RETRY_DELAY 10 /* ms */
-
int edg_wll_open(edg_wll_Context ctx)
{
int index;
edg_wll_GssStatus gss_stat;
- int retry = _EXPIRED_ALERT_RETRY_COUNT,do_retry = 1;
+
edg_wll_ResetError(ctx);
}
if (ctx->connPool[index].gss.context == GSS_C_NO_CONTEXT) {
- while (retry) switch (edg_wll_gss_connect(ctx->connPool[index].gsiCred,
+ switch (edg_wll_gss_connect(ctx->connPool[index].gsiCred,
ctx->connPool[index].peerName, ctx->connPool[index].peerPort,
&ctx->p_tmp_timeout,&ctx->connPool[index].gss,
&gss_stat)) {
-
+
case EDG_WLL_GSS_OK:
- edg_wll_ResetError(ctx);
goto ok;
case EDG_WLL_GSS_ERROR_ERRNO:
edg_wll_SetError(ctx,errno,"edg_wll_gss_connect()");
- goto err;
+ break;
case EDG_WLL_GSS_ERROR_GSS:
edg_wll_SetErrorGss(ctx, "failed to authenticate to server", &gss_stat);
- if (strstr(ctx->errDesc,_EXPIRED_ALERT_MESSAGE)) {
- retry--;
- edg_wll_ResetError(ctx);
- usleep(_EXPIRED_ALERT_RETRY_DELAY);
- continue;
- }
- goto err;
+ break;
case EDG_WLL_GSS_ERROR_HERRNO:
{ const char *msg1;
char *msg2;
edg_wll_SetError(ctx,EDG_WLL_ERROR_DNS, msg2);
free(msg2);
}
- goto err;
+ break;
case EDG_WLL_GSS_ERROR_EOF:
edg_wll_SetError(ctx,ECONNREFUSED,"edg_wll_gss_connect():"
" server closed the connection, probably due to overload");
- goto err;
+ break;
case EDG_WLL_GSS_ERROR_TIMEOUT:
edg_wll_SetError(ctx,ETIMEDOUT,"edg_wll_gss_connect()");
- goto err;
+ break;
}
- edg_wll_SetError(ctx,ECONNREFUSED,"edg_wll_gss_connect(): exhausted retry count on "
- _EXPIRED_ALERT_MESSAGE " -- server in very bad state");
- goto err;
}
else goto ok;