static DBusHandlerResult handle_get(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_server_lookup *sl) { DBusHandlerResult r = DBUS_HANDLER_RESULT_HANDLED; const char* interface; const char* property; DBusMessage *reply = NULL; pa_assert(conn); pa_assert(msg); pa_assert(sl); if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID)) { if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_INVALID_ARGS, "Invalid arguments"))) { r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; goto finish; } if (!dbus_connection_send(conn, reply, NULL)) { r = DBUS_HANDLER_RESULT_NEED_MEMORY; goto finish; } r = DBUS_HANDLER_RESULT_HANDLED; goto finish; } if (*interface && !pa_streq(interface, INTERFACE)) { r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; goto finish; } if (!pa_streq(property, "Address")) { if (!(reply = dbus_message_new_error_printf(msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "%s: No such property", property))) { r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; goto finish; } if (!dbus_connection_send(conn, reply, NULL)) { r = DBUS_HANDLER_RESULT_NEED_MEMORY; goto finish; } r = DBUS_HANDLER_RESULT_HANDLED; goto finish; } r = handle_get_address(conn, msg, sl); finish: if (reply) dbus_message_unref(reply); return r; }
std::string get_address(const UUID& uuid) const { if (down_context_.empty()) return handle_get_address(uuid); else return (*down_context_.begin())->get_address(uuid); }
int main(int argc, char **argv) { if(argc < 2) { fprintf(stderr, "Usage: %s [port]\n", argv[0]); return 1; } int socket_server, socket_client; struct sockaddr_in address_server, address_client; handle_put_address(&address_server, "0.0.0.0", atoi(argv[1])); handle_socket_open_tcp(&socket_server); handle_socket_bind(socket_server, &address_server); handle_socket_listen(socket_server, 10); while(true) { handle_socket_accept(&socket_client, socket_server, &address_client); char request[HANDLE_HTTP_BUFFER_SIZE]; read(socket_client, request, sizeof(request)); if(! strncmp(request, "GET", 3)) { handle_http_header_status(socket_client, 200); handle_http_header(socket_client); socklen_t address_len = sizeof(address_client); char remote_addr[HANDLE_HTTP_BUFFER_SIZE]; getpeername(socket_client, (struct sockaddr *)&address_client, &address_len); handle_get_address(remote_addr, &address_client); char time_local[HANDLE_HTTP_BUFFER_SIZE]; time_t ct = time(NULL); struct tm *lt = localtime(&ct); strftime(time_local, sizeof(time_local), "%d/%b/%Y:%H:%M:%S %z", lt); FILE *log_f = fopen(log_fname, "a"); int status = 0, byte_sent = 0; char remote_user[] = "-", request_head[] = "-", http_referer[] = "-", http_user_agent[] = "-"; fprintf(log_f, "%s - %s [%s] \"%s\" %d %d \"%s\" \"%s\"\n" , remote_addr , remote_user , time_local , request_head , status , byte_sent , http_referer , http_user_agent ); fclose(log_f); char *output[3] = { remote_addr, http_user_agent, request }; output_html(socket_client, output); handle_socket_close(socket_client); } else { handle_http_header_status(socket_client, 400); handle_socket_close(socket_client); } } return 0; }