end:
if (err) {
- update_error(g_cc, err,"cannot create canl_io_handler"
+ update_error(g_cc,"cannot create canl_io_handler"
"canl_create_io_handler");
if ((err = canl_io_destroy(cc, (canl_io_handler)new_io_h)))
- update_error(g_cc, err, "cannot destroy canl_ctx"
+ update_error(g_cc, "cannot destroy canl_ctx"
"canl_create_io_handler");
new_io_h = NULL;
}
end:
if (err)
- update_error(cc, err, "failed to initialize io_handler"
+ update_error(cc, "failed to initialize io_handler"
"(init_io_content)");
return err;
}
/*cc or io set succes*/
end:
if (err) {
- update_error(cc, err, "failed to connect (canl_io_connect)");
+ update_error(cc, "failed to connect (canl_io_connect)");
if ((err_clear = io_clear(glb_cc, io_cc)))
- update_error(cc, err, "failed to clean io_handler"
+ update_error(cc, "failed to clean io_handler"
" (canl_io_connect)");
}
return err;
hints.ai_flags = AI_PASSIVE; // use my IP
if ((err = getaddrinfo(NULL, PORT, &hints, &servinfo)) != 0) {
- update_error(glb_cc, 0, "getaddrinfo: %s\n", gai_strerror(err));
+ update_error(glb_cc, "getaddrinfo: %s\n", gai_strerror(err));
/*TODO what kind of error return?, getaddrinfo returns its own
error codes*/
goto end;
}
if (p == NULL) {
- update_error(glb_cc, err, "failed to bind (canl_io_accept)"); //TODO is it there?????
+ update_error(glb_cc, "failed to bind (canl_io_accept)"); //TODO is it there?????
freeaddrinfo(servinfo); // all done with this structure
goto end;
}
end:
if (err)
- update_error(glb_cc, err, "cannot accept connection (canl_io_accept)");
+ update_error(glb_cc, "cannot accept connection (canl_io_accept)");
return err;
}
end:
if (err)
- update_error(glb_cc, err, "cannot close connection (canl_io_close)");
+ update_error(glb_cc, "cannot close connection (canl_io_close)");
return err;
}
static int io_clear(glb_ctx *cc, io_handler *io)
end:
if (err)
- update_error(glb_cc, err, "cannot clear io_handle (io_clear)");
+ update_error(glb_cc, "cannot clear io_handle (io_clear)");
return err;
}
}
end:
if (err)
- update_error(glb_cc, err, "can't destroy io_handle (canl_io_destroy)");
+ update_error(glb_cc, "can't destroy io_handle (canl_io_destroy)");
return err;
}
if (!buffer || !size) {
err = EINVAL;
- update_error(glb_cc, err, "no memory to write into (canl_io_read)");
+ update_error(glb_cc, "no memory to write into (canl_io_read)");
return -1;
}
}
end:
if (err)
- update_error(glb_cc, err, "can't read from connection"
+ update_error(glb_cc, "can't read from connection"
" (canl_io_read)");
return b_recvd;
}
if (!buffer || !size) {
err = EINVAL;
- update_error(glb_cc, err, "nothing to write (canl_io_write)");
+ update_error(glb_cc, "nothing to write (canl_io_write)");
return -1;
}
end:
if (err)
- update_error(glb_cc, err, "can't write to connection"
+ update_error(glb_cc, "can't write to connection"
" (canl_io_write)");
return b_written;
}
/* Save error message into err_msg
* use NULL for empty err_format */
-void update_error (glb_ctx *cc, CANL_ERROR err_code, const char *err_format, ...)
+void update_error (glb_ctx *cc, const char *err_format, ...)
{
unsigned int err_msg_len = 0;
unsigned int err_msg_sum = 0; // sum of msg and format lengths
return;
if (err_format == NULL) {
- if (!err_code)
- return;
- else {
- cc->err_code = err_code;
- return;
- }
+ return;
}
va_start(ap, err_format);
strcat (cc->err_msg, ";");
strcat (cc->err_msg, new_msg);
- cc->err_code = err_code;
-
free(new_msg);
}
return EINVAL;
}
+ //TODO what to return
if (!ctx->err_msg)
goto end;
end:
if (err)
- update_error(ctx, err, "cannot get error message (canl_get_error)");
+ update_error(ctx, "cannot get error message (canl_get_error)");
return err;
}
void reset_error (glb_ctx *cc, CANL_ERROR err_code);
void set_error (glb_ctx *cc, CANL_ERROR err_code, const char *err_format, ...);
-void update_error (glb_ctx *cc, CANL_ERROR err_code,
- const char *err_format, ...);
+void update_error (glb_ctx *cc, const char *err_format, ...);
void free_hostent(struct hostent *h); //TODO is there some standard funcion to free hostent?
int asyn_getservbyname(int a_family, asyn_result *ares_result,char const *name,
struct timeval *timeout);
io->s_ctx->ssl_ctx = SSL_CTX_new(io->s_ctx->ssl_meth);
if (!io->s_ctx->ssl_ctx){
err = 1; //TODO set appropriate
- update_error(cc, err, "cannot create SSL context (ssl_init)");
goto end;
}
end:
if (err)
- update_error(cc, err, ""); //TODO update error
+ set_error(cc, err, "cannot initialize SSL context (ssl_init)");
return err;
}
*/
end:
- if (err)
- update_error(cc, err, "(ssl_connect)"); //TODO update error
return err;
}
*/
end:
- if (err)
- update_error(cc, err, "(ssl_accept)"); //TODO update error
return err;
}
timeout->tv_sec=0;
timeout->tv_usec=0;
err = ETIMEDOUT;
- update_error (cc, err, "Connection stuck during handshake: timeout reached (do_ssl_connect)");
+ set_error (cc, err, "Connection stuck during handshake: timeout reached (do_ssl_connect)");
}
else{
err = -1; //TODO set approp. error message
- update_error (cc, err, "Error during SSL handshake (do_ssl_connect)");
+ set_error (cc, err, "Error during SSL handshake (do_ssl_connect)");
}
return err;
}
expected = errorcode = SSL_get_error(io->s_ctx->ssl_io, ret2);
}
curtime = time(NULL);
- } while (TEST_SELECT(ret, ret2, locl_timeout, curtime, starttime, errorcode));
+ } while (ret > 0 && (ret2 <= 0 && ((locl_timeout == -1) ||
+ ((locl_timeout != -1) &&
+ (curtime - starttime) < locl_timeout)) &&
+ (errorcode == SSL_ERROR_WANT_READ ||
+ errorcode == SSL_ERROR_WANT_WRITE)));
//TODO split ret2 and ret into 2 ifs to set approp. error message
if (ret2 <= 0 || ret <= 0) {
timeout->tv_sec=0;
timeout->tv_usec=0;
err = ETIMEDOUT;
- update_error (cc, err, "Connection stuck during handshake: timeout reached (do_ssl_accept)");
+ set_error (cc, err, "Connection stuck during handshake: timeout reached (do_ssl_accept)");
}
else{
err = -1; //TODO set approp. error message
- update_error (cc, err, "Error during SSL handshake (do_ssl_accept)");
+ set_error (cc, err, "Error during SSL handshake (do_ssl_accept)");
}
return err;
}
if (!buffer) {
err = EINVAL; //TODO really?
- update_error(cc, err, "Nothing to write (ssl_write)");
+ set_error(cc, err, "Nothing to write (ssl_write)");
errno = err;
return -1;
}
end:
if (err) {
errno = err;
- update_error (cc, err, "Error during SSL write (ssl_write)");
+ set_error (cc, err, "Error during SSL write (ssl_write)");
return -1;
}
if (touted){
errno = err = ETIMEDOUT;
- update_error(cc, err, "Connection stuck during write: timeout reached (ssl_write)");
+ set_error(cc, err, "Connection stuck during write: timeout reached (ssl_write)");
return -1;
}
if (ret <=0){
err = -1;//TODO what to assign??????
- update_error (cc, err, "Error during SSL write (ssl_write)");
+ set_error (cc, err, "Error during SSL write (ssl_write)");
}
return ret;
}
if (!buffer) {
err = EINVAL; //TODO really?
- update_error(cc, err, "Not enough memory to read to (ssl_read)");
+ set_error(cc, err, "Not enough memory to read to (ssl_read)");
errno = err;
return -1;
}
if (ret <= 0 || ret2 <= 0) { //TODO ret2 < 0 originally
err = -1; //TODO what to assign
if (timeout != -1 && (curtime - starttime >= timeout)){
- update_error(cc, ETIMEDOUT, "Connection stuck during read: timeout reached. (ssl_read)");
+ set_error(cc, ETIMEDOUT, "Connection stuck during read: timeout reached. (ssl_read)");
}
else
- update_error(cc, err, "Error during SSL read: (ssl_read)");
+ set_error(cc, err, "Error during SSL read: (ssl_read)");
}
else
err = ret2;