mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-09-01 14:55:30 +00:00
Return connection failure status codes.
This commit is contained in:
@@ -55,6 +55,7 @@ trace_type_t *trace_connect;
|
|||||||
trace_type_t *trace_disconnect;
|
trace_type_t *trace_disconnect;
|
||||||
extern omapi_array_t *trace_listeners;
|
extern omapi_array_t *trace_listeners;
|
||||||
#endif
|
#endif
|
||||||
|
static isc_result_t omapi_connection_connect_internal (omapi_object_t *);
|
||||||
|
|
||||||
OMAPI_OBJECT_ALLOC (omapi_connection,
|
OMAPI_OBJECT_ALLOC (omapi_connection,
|
||||||
omapi_connection_object_t, omapi_type_connection)
|
omapi_connection_object_t, omapi_type_connection)
|
||||||
@@ -223,7 +224,8 @@ isc_result_t omapi_connect_list (omapi_object_t *c,
|
|||||||
omapi_connection_reaper));
|
omapi_connection_reaper));
|
||||||
if (status != ISC_R_SUCCESS)
|
if (status != ISC_R_SUCCESS)
|
||||||
goto out;
|
goto out;
|
||||||
status = omapi_connection_connect ((omapi_object_t *)obj);
|
status = omapi_connection_connect_internal ((omapi_object_t *)
|
||||||
|
obj);
|
||||||
#if defined (TRACING)
|
#if defined (TRACING)
|
||||||
}
|
}
|
||||||
omapi_connection_register (obj, MDL);
|
omapi_connection_register (obj, MDL);
|
||||||
@@ -552,6 +554,16 @@ int omapi_connection_writefd (omapi_object_t *h)
|
|||||||
}
|
}
|
||||||
|
|
||||||
isc_result_t omapi_connection_connect (omapi_object_t *h)
|
isc_result_t omapi_connection_connect (omapi_object_t *h)
|
||||||
|
{
|
||||||
|
isc_result_t status;
|
||||||
|
|
||||||
|
status = omapi_connection_connect_internal (h);
|
||||||
|
if (status != ISC_R_SUCCESS)
|
||||||
|
omapi_signal (h, "status", status);
|
||||||
|
return ISC_R_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static isc_result_t omapi_connection_connect_internal (omapi_object_t *h)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
omapi_connection_object_t *c;
|
omapi_connection_object_t *c;
|
||||||
@@ -575,14 +587,25 @@ isc_result_t omapi_connection_connect (omapi_object_t *h)
|
|||||||
if (c -> state == omapi_connection_connecting ||
|
if (c -> state == omapi_connection_connecting ||
|
||||||
c -> state == omapi_connection_unconnected) {
|
c -> state == omapi_connection_unconnected) {
|
||||||
if (c -> cptr >= c -> connect_list -> count) {
|
if (c -> cptr >= c -> connect_list -> count) {
|
||||||
|
switch (error) {
|
||||||
|
case ECONNREFUSED:
|
||||||
|
status = ISC_R_CONNREFUSED;
|
||||||
|
break;
|
||||||
|
case ENETUNREACH:
|
||||||
|
status = ISC_R_NETUNREACH;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
status = uerr2isc (error);
|
||||||
|
break;
|
||||||
|
}
|
||||||
omapi_disconnect (h, 1);
|
omapi_disconnect (h, 1);
|
||||||
return ISC_R_SUCCESS;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c -> connect_list -> addresses [c -> cptr].addrtype !=
|
if (c -> connect_list -> addresses [c -> cptr].addrtype !=
|
||||||
AF_INET) {
|
AF_INET) {
|
||||||
omapi_disconnect (h, 1);
|
omapi_disconnect (h, 1);
|
||||||
return ISC_R_SUCCESS;
|
return ISC_R_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy (&c -> remote_addr.sin_addr,
|
memcpy (&c -> remote_addr.sin_addr,
|
||||||
@@ -613,7 +636,7 @@ isc_result_t omapi_connection_connect (omapi_object_t *h)
|
|||||||
status = ISC_R_NETUNREACH;
|
status = ISC_R_NETUNREACH;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
status = ISC_R_UNEXPECTED;
|
status = uerr2isc (error);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
|
Reference in New Issue
Block a user