TODO go through ssl errors and assign appr. canl code
?preserve original one? */
static canl_err_code resolve_error(glb_ctx *cc, unsigned long err_code,
- canl_err_origin err_orig)
+ canl_err_origin err_orig)
{
- if (err_orig == CANL_ERROR) {
- cc->err_code = err_code;
- cc->err_orig = CANL_ERROR;
- return (int)err_code;
- }
- if (err_orig == POSIX_ERROR) {
- cc->err_code = err_code;
- cc->err_orig = POSIX_ERROR;
- return (int)err_code;
- }
- if (err_orig == NETDB_ERROR) {
- cc->err_code = err_code;
- cc->err_orig = NETDB_ERROR;
- return (int)err_code;
- }
-
- switch (err_code) {
- /*TODO map SSL_ERRORs on canl errors*/
- default:
- cc->err_code = err_code;
- cc->err_orig = err_orig;
- break;
+ cc->original_err_code = err_code;
+ cc->err_orig = err_orig;
+
+ switch (err_orig) {
+ case UNKNOWN_ERROR:
+ cc->err_code = (err_code) ? CANL_ERR_unknown : 0;
+ break;
+ case POSIX_ERROR:
+ /* We don't use that many posix-like codes, perhaps we want to
+ * map them to CANL codes. */
+ cc->err_code = err_code;
+ break;
+ case SSL_ERROR:
+ /* XXX Add mapping based on canl_err_desc.c */
+ cc->err_code = CANL_ERR_GeneralSSLError;
+ break;
+ case CANL_ERROR:
+ cc->err_code = err_code;
+ break;
+ case NETDB_ERROR:
+ switch (cc->err_code) {
+ case HOST_NOT_FOUND:
+ cc->err_code = CANL_ERR_HostNotFound;
+ break;
+ default:
+ cc->err_code = CANL_ERR_ResolverError;
+ break;
+ }
+ break;
+ default:
+ cc->err_code = CANL_ERR_unknown;
}
- return 1; //TODO return ssl generic error - add it to canl_error_codes,desc
+ return cc->err_code;
}