//------------------------------------------------------------------------------------------------------- // DATE: January 10 2014 // AUTHOR: RAMZI CHENNAFI // // FUNCTION: void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) // RETURNS: Nothing // DESCRIPTION: // Deals with menu items and handles messages that are sent by the "OK" buttons. // NOTES: // OK buttons cause the respective resolution relevant to that button. //------------------------------------------------------------------------------------------------------- void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify){ switch (id) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hwnd, About); break; case ID_CLEAR: SendMessage(GetDlgItem(hwnd, ID_EDIT_BOX), LB_RESETCONTENT, 0, 0); break; case IDB_OK_IP: resolve_IP(hwnd); break; case IDB_OK_HST: resolve_host(hwnd); break; case IDB_PRT_OK: resolve_port(hwnd); break; case IDB_SRV_OK: resolve_service(hwnd); break; case IDM_EXIT: DestroyWindow(hwnd); break; } }
/** Prepare the conninfo string to connect to the Postgresql server. * * \param host server hostname * \param port server port or service name * \param user username * \param pass password * \param extra_conninfo additional connection parameters * \return a dynamically allocated MString containing the connection information; the caller must take care of freeing it * * \see mstring_delete */ static MString *psql_prepare_conninfo(const char *database, const char *host, const char *port, const char *user, const char *pass, const char *extra_conninfo) { MString *conninfo; int portnum; portnum = resolve_service(port, 5432); conninfo = mstring_create(); mstring_sprintf (conninfo, "host='%s' port='%d' user='******' password='******' dbname='%s' %s", host, portnum, user, pass, database, extra_conninfo); return conninfo; }
void signal_ServiceBrowser_item(char *path){ DBusMessage* msg; DBusMessageIter args; DBusConnection* conn; DBusError err; dbus_error_init(&err); conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err); if (dbus_error_is_set(&err)) { fprintf(stderr, "Connection Error (%s)\n", err.message); dbus_error_free(&err); } if (NULL == conn) { exit(1); } gchar* filter_itemnew = g_new(gchar, strlen("type='signal',interface='org.freedesktop.Avahi.ServiceBrowser',member='ItemNew', path=''") + strlen(path) + 2); sprintf(filter_itemnew, "type='signal',interface='org.freedesktop.Avahi.ServiceBrowser',member='ItemNew', path='%s'", path); gchar* filter_itemremove = g_new(gchar, strlen("type='signal',interface='org.freedesktop.Avahi.ServiceBrowser',member='ItemRemove', path=''") + strlen(path) + 2); sprintf(filter_itemremove, "type='signal',interface='org.freedesktop.Avahi.ServiceBrowser',member='ItemRemove', path='%s'", path); //printf("signal_filter:%s", signal_filter); // add a rule for which messages we want to see dbus_bus_add_match(conn, filter_itemnew, &err); dbus_bus_add_match(conn, filter_itemremove, &err); dbus_connection_flush(conn); if (dbus_error_is_set(&err)) { fprintf(stderr, "Match Error (%s)\n", err.message); exit(1); } printf("Match rule sent\n"); int interface; int protocol; char *name; char *stype; char *domain; unsigned int flags; //int cnt = 0; // loop listening for signals being emmitted while (true) { // non blocking read of the next available message dbus_connection_read_write(conn, 0); msg = dbus_connection_pop_message(conn); // loop again if we haven't read a message if (NULL == msg) { //g_message("cnt: %d", cnt++); sleep(1); continue; } // check if the message is a signal from the correct interface and with the correct name if (dbus_message_is_signal(msg, "org.freedesktop.Avahi.ServiceBrowser", "ItemNew")) { // read the parameters //g_message("is the message we need.%d", cnt++); //g_message("Message Has No Parameters\n"); if (!dbus_message_iter_init(msg, &args)) g_message("dbus_message_iter_init fail\n"); else { if (DBUS_TYPE_INT32 != dbus_message_iter_get_arg_type(&args)) g_message( "Argument is not error!\n"); else dbus_message_iter_get_basic(&args, &interface); if (!dbus_message_iter_next(&args)) g_message( "Message has too few arguments!\n"); else if (DBUS_TYPE_INT32 != dbus_message_iter_get_arg_type(&args)) g_message("Argument is not error!\n"); else dbus_message_iter_get_basic(&args, &protocol); if (!dbus_message_iter_next(&args)) g_message("Message has too few arguments!\n"); else if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&args)) g_message("Argument is not error!\n"); else dbus_message_iter_get_basic(&args, &name); if (!dbus_message_iter_next(&args)) g_message("Message has too few arguments!\n"); else if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&args)) g_message("Argument is not error!\n"); else dbus_message_iter_get_basic(&args, &stype); if (!dbus_message_iter_next(&args)) g_message("Message has too few arguments!\n"); else if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&args)) g_message("Argument is not error!\n"); else dbus_message_iter_get_basic(&args, &domain); if (!dbus_message_iter_next(&args)) g_message("Message has too few arguments!\n"); else if (DBUS_TYPE_UINT32 != dbus_message_iter_get_arg_type(&args)) g_message("Argument is not error!\n"); else dbus_message_iter_get_basic(&args, &flags); printf("\n"); printf("discovered:%d, %d, %s, %s, %s, %d.\n", interface, protocol, name, stype, domain, flags); resolve_service(interface, protocol, name, stype, domain); //printf("Got Signal with value %s\n", sigvalue); } }else if(dbus_message_is_signal(msg, "org.freedesktop.Avahi.ServiceBrowser", "ItemRemove")){ if (!dbus_message_iter_init(msg, &args)) g_message("dbus_message_iter_init fail\n"); else { if (DBUS_TYPE_INT32 != dbus_message_iter_get_arg_type(&args)) g_message( "Argument is not error!\n"); else dbus_message_iter_get_basic(&args, &interface); if (!dbus_message_iter_next(&args)) g_message( "Message has too few arguments!\n"); else if (DBUS_TYPE_INT32 != dbus_message_iter_get_arg_type(&args)) g_message("Argument is not error!\n"); else dbus_message_iter_get_basic(&args, &protocol); if (!dbus_message_iter_next(&args)) g_message("Message has too few arguments!\n"); else if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&args)) g_message("Argument is not error!\n"); else dbus_message_iter_get_basic(&args, &name); if (!dbus_message_iter_next(&args)) g_message("Message has too few arguments!\n"); else if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&args)) g_message("Argument is not error!\n"); else dbus_message_iter_get_basic(&args, &stype); if (!dbus_message_iter_next(&args)) g_message("Message has too few arguments!\n"); else if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&args)) g_message("Argument is not error!\n"); else dbus_message_iter_get_basic(&args, &domain); if (!dbus_message_iter_next(&args)) g_message("Message has too few arguments!\n"); else if (DBUS_TYPE_UINT32 != dbus_message_iter_get_arg_type(&args)) g_message("Argument is not error!\n"); else dbus_message_iter_get_basic(&args, &flags); printf("\n"); printf("removed:%d, %d, %s, %s, %s, %d.\n", interface, protocol, name, stype, domain, flags); //resolve_service(interface, protocol, name, stype, domain); //printf("Got Signal with value %s\n", sigvalue); } } // free the message dbus_message_unref(msg); } }
/** Build a URI for this database. * * \param db Database object * \param uri output string buffer * \param size length of uri * \return uri on success, NULL otherwise (e.g., uri buffer too small) */ char* psql_get_uri(Database *db, char *uri, size_t size) { if(snprintf(uri, size, "postgresql://%s@%s:%d/%s", pg_user, pg_host, resolve_service(pg_port, 5432), db->name) >= size) return NULL; return uri; }