| OLD | NEW |
| 1 /* | 1 /* |
| 2 * dhcpcd-dbus | 2 * dhcpcd-dbus |
| 3 * Copyright 2009 Roy Marples <roy@marples.name> | 3 * Copyright 2009 Roy Marples <roy@marples.name> |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 if (dbus_message_is_method_call(msg, DBUS_INTERFACE_INTROSPECTABLE, | 475 if (dbus_message_is_method_call(msg, DBUS_INTERFACE_INTROSPECTABLE, |
| 476 "Introspect")) { | 476 "Introspect")) { |
| 477 return introspect(con, msg); | 477 return introspect(con, msg); |
| 478 } else if (IsMethod(msg, "GetVersion")) { | 478 } else if (IsMethod(msg, "GetVersion")) { |
| 479 return version(con, msg, VERSION); | 479 return version(con, msg, VERSION); |
| 480 } else if (IsMethod(msg, "GetInterfaces")) { | 480 } else if (IsMethod(msg, "GetInterfaces")) { |
| 481 return dhcpcd_get_interfaces(con, msg); | 481 return dhcpcd_get_interfaces(con, msg); |
| 482 } else if (IsMethod(msg, "GetStatus")) { | 482 } else if (IsMethod(msg, "GetStatus")) { |
| 483 return return_status(con, msg); | 483 return return_status(con, msg); |
| 484 } else if (IsMethod(msg, "Rebind")) { | 484 } else if (IsMethod(msg, "Rebind")) { |
| 485 » » bind_interface(ifaces);»» /* XXX */ | 485 » » start_interface(ifaces); |
| 486 return dbus_ack(con, msg); | 486 return dbus_ack(con, msg); |
| 487 } else if (IsMethod(msg, "Release")) { | 487 } else if (IsMethod(msg, "Release")) { |
| 488 » » raise(SIGHUP); | 488 » » send_release(ifaces); |
| 489 » » stop_interface(ifaces); |
| 489 return dbus_ack(con, msg); | 490 return dbus_ack(con, msg); |
| 490 } else if (IsMethod(msg, "Stop")) { | 491 } else if (IsMethod(msg, "Stop")) { |
| 491 » » /* NB: must ack first 'cuz handle_signal exit's */ | 492 » » stop_interface(ifaces); |
| 492 (void) dbus_ack(con, msg); | 493 (void) dbus_ack(con, msg); |
| 493 » » raise(SIGINT); | 494 » » exit(EXIT_FAILURE); |
| 494 » » /*NOTREACHED*/ | 495 » } else if (dbus_message_is_signal(msg, DBUS_INTERFACE_LOCAL, |
| 496 » » » » » "Disconnected")) { |
| 497 » » stop_interface(ifaces); |
| 498 » » exit(EXIT_FAILURE); |
| 495 } | 499 } |
| 496 return return_dbus_error(con, msg, S_EINVAL, S_ARGS); | 500 return return_dbus_error(con, msg, S_EINVAL, S_ARGS); |
| 497 #undef IsMethod | 501 #undef IsMethod |
| 498 } | 502 } |
| 499 | 503 |
| 500 static void | 504 static void |
| 501 dbus_event(int revents, void *watch) | 505 dbus_event(int revents, void *watch) |
| 502 { | 506 { |
| 503 int flags; | 507 int flags; |
| 504 | 508 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 571 connection = dbus_bus_get(DBUS_BUS_SYSTEM, &err); | 575 connection = dbus_bus_get(DBUS_BUS_SYSTEM, &err); |
| 572 if (connection == NULL) { | 576 if (connection == NULL) { |
| 573 if (dbus_error_is_set(&err)) | 577 if (dbus_error_is_set(&err)) |
| 574 syslog(LOG_ERR, "%s", err.message); | 578 syslog(LOG_ERR, "%s", err.message); |
| 575 else | 579 else |
| 576 syslog(LOG_ERR, "failed to get a dbus connection"); | 580 syslog(LOG_ERR, "failed to get a dbus connection"); |
| 577 return -1; | 581 return -1; |
| 578 } | 582 } |
| 579 atexit(dhcpcd_dbus_close); | 583 atexit(dhcpcd_dbus_close); |
| 580 | 584 |
| 581 #if 0 | |
| 582 ret = dbus_bus_request_name(connection, DHCPCD_SERVICE, | |
| 583 DBUS_NAME_FLAG_REPLACE_EXISTING, &err); | |
| 584 if (dbus_error_is_set(&err)) { | |
| 585 syslog(LOG_ERR, "%s", err.message); | |
| 586 return -1; | |
| 587 } | |
| 588 #endif | |
| 589 if (!dbus_connection_set_watch_functions(connection, | 585 if (!dbus_connection_set_watch_functions(connection, |
| 590 add_watch, remove_watch, NULL, NULL, NULL)) | 586 add_watch, remove_watch, NULL, NULL, NULL)) |
| 591 { | 587 { |
| 592 syslog(LOG_ERR, "dbus: failed to set watch functions"); | 588 syslog(LOG_ERR, "dbus: failed to set watch functions"); |
| 593 return -1; | 589 return -1; |
| 594 } | 590 } |
| 595 if (!dbus_connection_register_object_path(connection, | 591 if (!dbus_connection_register_object_path(connection, |
| 596 DHCPCD_PATH, &vt, NULL)) | 592 DHCPCD_PATH, &vt, NULL)) |
| 597 { | 593 { |
| 598 syslog(LOG_ERR, "dbus: failed to register object path"); | 594 syslog(LOG_ERR, "dbus: failed to register object path"); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 610 | 606 |
| 611 if (write_lease(ifp, ifp->state->new) == -1) | 607 if (write_lease(ifp, ifp->state->new) == -1) |
| 612 syslog(LOG_ERR, "write_lease: %m"); | 608 syslog(LOG_ERR, "write_lease: %m"); |
| 613 } | 609 } |
| 614 return 0; | 610 return 0; |
| 615 } | 611 } |
| 616 | 612 |
| 617 int | 613 int |
| 618 run_script(const struct interface *ifp) | 614 run_script(const struct interface *ifp) |
| 619 { | 615 { |
| 620 syslog(LOG_DEBUG, "executing `%s', reason %s", | |
| 621 ifp->name, ifp->state->reason); | |
| 622 #if 0 | |
| 623 /* push state over d-bus */ | |
| 624 dhcpcd_dbus_configure(ifp, ifp->state->reason); | |
| 625 #endif | |
| 626 return 0; | 616 return 0; |
| 627 } | 617 } |
| OLD | NEW |