Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
NetworkManager
NetworkManager
Commits
096a1fcd
Commit
096a1fcd
authored
Jun 08, 2011
by
Jiří Klimeš
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
examples: add a Qt example for setting manual IPv4 addresses into a connection
parent
9cba854f
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
156 additions
and
3 deletions
+156
-3
configure.ac
configure.ac
+1
-1
examples/C/qt/Makefile.am
examples/C/qt/Makefile.am
+9
-2
examples/C/qt/change-ipv4-addresses.cpp
examples/C/qt/change-ipv4-addresses.cpp
+146
-0
No files found.
configure.ac
View file @
096a1fcd
...
...
@@ -268,7 +268,7 @@ AC_SUBST(GIO_LIBS)
GOBJECT_INTROSPECTION_CHECK([0.9.6])
# Qt4
PKG_CHECK_MODULES(QT, [Qt >= 4 QtCore QtDBus], [have_qt=yes],[have_qt=no])
PKG_CHECK_MODULES(QT, [Qt >= 4 QtCore QtDBus
QtNetwork
], [have_qt=yes],[have_qt=no])
AC_ARG_ENABLE(qt, AS_HELP_STRING([--enable-qt], [enable Qt examples]),
[enable_qt=${enableval}], [enable_qt=${have_qt}])
if (test "${enable_qt}" = "yes"); then
...
...
examples/C/qt/Makefile.am
View file @
096a1fcd
...
...
@@ -6,7 +6,8 @@ AM_CPPFLAGS = \
noinst_PROGRAMS
=
\
add-connection-wired
\
list-connections
list-connections
\
change-ipv4-addresses
add_connection_wired_SOURCES
=
add-connection-wired.cpp
add_connection_wired_LDADD
=
\
...
...
@@ -18,7 +19,13 @@ list_connections_LDADD = \
$(DBUS_LIBS)
\
$(QT_LIBS)
change_ipv4_addresses_SOURCES
=
change-ipv4-addresses.cpp
change_ipv4_addresses_LDADD
=
\
$(DBUS_LIBS)
\
$(QT_LIBS)
EXTRA_DIST
=
\
add-connection-wired.cpp
\
list-connections.cpp
list-connections.cpp
\
change-ipv4-addresses.cpp
examples/C/qt/change-ipv4-addresses.cpp
0 → 100644
View file @
096a1fcd
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* (C) Copyright 2011 Red Hat, Inc.
*/
/*
* This example shows how to set manual IPv4 addresses to a connection.
* It uses Qt and D-Bus libraries to do that.
*
* Standalone compilation:
* g++ -Wall `pkg-config --libs --cflags NetworkManager QtCore QtDBus QtNetwork` change-ipv4-addresses.cpp -o change-ipv4-addresses
*
* You don't need to have NetworkManager devel package installed; you can just
* grab NetworkManager.h and put it in the path
*/
#include <QtDBus/QDBusConnection>
#include <QtDBus/QDBusInterface>
#include <QtDBus/QDBusMetaType>
#include <QtDBus/QDBusReply>
#include <QtCore/QList>
#include <QtCore/QMap>
#include <QtCore/QString>
#include <QtCore/QDebug>
#include <QtNetwork/QHostAddress>
#include "arpa/inet.h"
#include "NetworkManager.h"
typedef
QMap
<
QString
,
QMap
<
QString
,
QVariant
>
>
Connection
;
Q_DECLARE_METATYPE
(
Connection
)
Q_DECLARE_METATYPE
(
QList
<
uint
>
);
Q_DECLARE_METATYPE
(
QList
<
QList
<
uint
>
>
);
const
QString
NM_SETTING_CONNECTION_SETTING_NAME
=
"connection"
;
const
QString
NM_SETTING_CONNECTION_ID
=
"id"
;
const
QString
NM_SETTING_CONNECTION_UUID
=
"uuid"
;
const
QString
getConnection
(
const
QString
&
connectionUuid
,
Connection
*
found_connection
)
{
Connection
settings
;
QDBusInterface
*
ifaceForSettings
;
// Create a D-Bus proxy; NM_DBUS_* defined in NetworkManager.h
QDBusInterface
interface
(
NM_DBUS_SERVICE
,
NM_DBUS_PATH_SETTINGS
,
NM_DBUS_IFACE_SETTINGS
,
QDBusConnection
::
systemBus
());
// Get connection list and find the connection with 'connectionUuid'
QDBusReply
<
QList
<
QDBusObjectPath
>
>
result1
=
interface
.
call
(
"ListConnections"
);
foreach
(
const
QDBusObjectPath
&
connection
,
result1
.
value
())
{
ifaceForSettings
=
new
QDBusInterface
(
NM_DBUS_SERVICE
,
connection
.
path
(),
NM_DBUS_IFACE_SETTINGS_CONNECTION
,
QDBusConnection
::
systemBus
());
QDBusReply
<
Connection
>
result2
=
ifaceForSettings
->
call
(
"GetSettings"
);
delete
ifaceForSettings
;
settings
=
result2
.
value
();
QVariantMap
connectionSettings
=
settings
.
value
(
NM_SETTING_CONNECTION_SETTING_NAME
);
QString
uuid
=
connectionSettings
.
value
(
NM_SETTING_CONNECTION_UUID
).
toString
();
if
(
uuid
==
connectionUuid
)
{
// Connection found; set the settings to found_connection
// connection object path
*
found_connection
=
settings
;
return
connection
.
path
();
}
}
return
QString
();
}
void
changeConnection
(
const
QString
&
uuid
)
{
// Register types with D-Bus
qDBusRegisterMetaType
<
Connection
>
();
qDBusRegisterMetaType
<
QList
<
uint
>
>
();
qDBusRegisterMetaType
<
QList
<
QList
<
uint
>
>
>
();
Connection
connection
;
QString
conPath
;
// Find connection by provided UUID
conPath
=
getConnection
(
uuid
,
&
connection
);
if
(
!
conPath
.
isEmpty
())
{
QList
<
QList
<
uint
>
>
addresses
;
QList
<
uint
>
addr1
,
addr2
;
// Add some addresses
addr1
<<
htonl
(
QHostAddress
(
"192.168.100.4"
).
toIPv4Address
())
<<
24
<<
htonl
(
QHostAddress
(
"192.168.100.1"
).
toIPv4Address
());
addr2
<<
htonl
(
QHostAddress
(
"10.0.1.222"
).
toIPv4Address
())
<<
8
<<
htonl
(
QHostAddress
(
"10.0.1.254"
).
toIPv4Address
());
addresses
<<
addr1
<<
addr2
;
// Set method to "Manual" and put addresses to the connection map
connection
[
"ipv4"
][
"method"
]
=
"manual"
;
connection
[
"ipv4"
][
"addresses"
]
=
QVariant
::
fromValue
(
addresses
);
QDBusInterface
interface
(
NM_DBUS_SERVICE
,
conPath
,
NM_DBUS_IFACE_SETTINGS_CONNECTION
,
QDBusConnection
::
systemBus
());
// Call Update() D-Bus method to update connection
QDBusReply
<
void
>
result
=
interface
.
call
(
"Update"
,
QVariant
::
fromValue
(
connection
));
if
(
result
.
isValid
())
{
qDebug
()
<<
QString
(
"Connection successfully updated (path %1)"
).
arg
(
conPath
);
}
else
{
qDebug
()
<<
QString
(
"Error: could not update connection: %1 %2"
).
arg
(
result
.
error
().
name
()).
arg
(
result
.
error
().
message
());
}
}
else
{
qDebug
()
<<
QString
(
"Error: connection with UUID '%1' not found"
).
arg
(
uuid
);
}
}
int
main
(
int
argc
,
char
*
argv
[])
{
if
(
argc
!=
2
)
{
qDebug
()
<<
QString
(
"Usage: %1 <UUID>"
).
arg
(
argv
[
0
]);
return
-
1
;
}
changeConnection
(
argv
[
1
]);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment