Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
GNOME
libdmapsharing
Commits
4e8bb573
Commit
4e8bb573
authored
Dec 15, 2010
by
W. Michael Petullo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Change DmapMdnsPub... to DMAPMdnsPub...
Signed-off-by:
W. Michael Petullo
<
mike@flyn.org
>
parent
9f72ed79
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
65 additions
and
65 deletions
+65
-65
libdmapsharing/dmap-mdns-publisher-avahi.c
libdmapsharing/dmap-mdns-publisher-avahi.c
+29
-29
libdmapsharing/dmap-mdns-publisher-dnssd.c
libdmapsharing/dmap-mdns-publisher-dnssd.c
+13
-13
libdmapsharing/dmap-mdns-publisher.h
libdmapsharing/dmap-mdns-publisher.h
+14
-14
libdmapsharing/dmap-share.c
libdmapsharing/dmap-share.c
+5
-5
libdmapsharing/dmap-share.h
libdmapsharing/dmap-share.h
+4
-4
No files found.
libdmapsharing/dmap-mdns-publisher-avahi.c
View file @
4e8bb573
...
...
@@ -40,13 +40,13 @@
#include "dmap-mdns-avahi.h"
#include "dmap-mdns-publisher.h"
static
void
dmap_mdns_publisher_class_init
(
D
map
MdnsPublisherClass
*
klass
);
static
void
dmap_mdns_publisher_init
(
D
map
MdnsPublisher
*
publisher
);
static
void
dmap_mdns_publisher_class_init
(
D
MAP
MdnsPublisherClass
*
klass
);
static
void
dmap_mdns_publisher_init
(
D
MAP
MdnsPublisher
*
publisher
);
static
void
dmap_mdns_publisher_finalize
(
GObject
*
object
);
#define DMAP_MDNS_PUBLISHER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DMAP_MDNS_PUBLISHER, D
map
MdnsPublisherPrivate))
#define DMAP_MDNS_PUBLISHER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DMAP_MDNS_PUBLISHER, D
MAP
MdnsPublisherPrivate))
struct
D
map
MdnsPublisherService
struct
D
MAP
MdnsPublisherService
{
char
*
name
;
guint
port
;
...
...
@@ -55,7 +55,7 @@ struct DmapMdnsPublisherService
gchar
**
txt_records
;
};
struct
D
map
MdnsPublisherPrivate
struct
D
MAP
MdnsPublisherPrivate
{
AvahiClient
*
client
;
AvahiEntryGroup
*
entry_group
;
...
...
@@ -74,7 +74,7 @@ enum {
static
guint
signals
[
LAST_SIGNAL
]
=
{
0
,
};
G_DEFINE_TYPE
(
D
map
MdnsPublisher
,
dmap_mdns_publisher
,
G_TYPE_OBJECT
)
G_DEFINE_TYPE
(
D
MAP
MdnsPublisher
,
dmap_mdns_publisher
,
G_TYPE_OBJECT
)
static
gpointer
publisher_object
=
NULL
;
...
...
@@ -89,7 +89,7 @@ dmap_mdns_publisher_error_quark (void)
}
static
void
emit_published
(
char
*
name
,
D
map
MdnsPublisher
*
publisher
)
emit_published
(
char
*
name
,
D
MAP
MdnsPublisher
*
publisher
)
{
g_signal_emit
(
publisher
,
signals
[
PUBLISHED
],
0
,
name
);
}
...
...
@@ -97,7 +97,7 @@ emit_published (char *name, DmapMdnsPublisher *publisher)
static
void
entry_group_cb
(
AvahiEntryGroup
*
group
,
AvahiEntryGroupState
state
,
D
map
MdnsPublisher
*
publisher
)
D
MAP
MdnsPublisher
*
publisher
)
{
if
(
state
==
AVAHI_ENTRY_GROUP_ESTABLISHED
)
{
g_slist_foreach
(
publisher
->
priv
->
service
,
(
GFunc
)
emit_published
,
publisher
);
...
...
@@ -112,8 +112,8 @@ entry_group_cb (AvahiEntryGroup *group,
}
static
gboolean
create_service
(
struct
D
map
MdnsPublisherService
*
service
,
D
map
MdnsPublisher
*
publisher
,
create_service
(
struct
D
MAP
MdnsPublisherService
*
service
,
D
MAP
MdnsPublisher
*
publisher
,
GError
**
error
)
{
int
ret
;
...
...
@@ -164,7 +164,7 @@ create_service (struct DmapMdnsPublisherService *service,
}
static
gboolean
create_services
(
D
map
MdnsPublisher
*
publisher
,
create_services
(
D
MAP
MdnsPublisher
*
publisher
,
GError
**
error
)
{
GSList
*
ptr
;
...
...
@@ -211,19 +211,19 @@ create_services (DmapMdnsPublisher *publisher,
}
static
gboolean
refresh_services
(
D
map
MdnsPublisher
*
publisher
,
refresh_services
(
D
MAP
MdnsPublisher
*
publisher
,
GError
**
error
)
{
return
create_services
(
publisher
,
error
);
}
static
struct
D
map
MdnsPublisherService
*
static
struct
D
MAP
MdnsPublisherService
*
find_service_by_port
(
GSList
*
list
,
guint
port
)
{
GSList
*
ptr
;
for
(
ptr
=
list
;
ptr
;
ptr
=
g_slist_next
(
ptr
))
{
if
(
port
==
((
struct
D
map
MdnsPublisherService
*
)
ptr
->
data
)
->
port
)
if
(
port
==
((
struct
D
MAP
MdnsPublisherService
*
)
ptr
->
data
)
->
port
)
break
;
}
...
...
@@ -231,12 +231,12 @@ find_service_by_port (GSList *list, guint port)
}
gboolean
dmap_mdns_publisher_rename_at_port
(
D
map
MdnsPublisher
*
publisher
,
dmap_mdns_publisher_rename_at_port
(
D
MAP
MdnsPublisher
*
publisher
,
guint
port
,
const
char
*
name
,
GError
**
error
)
{
struct
D
map
MdnsPublisherService
*
ptr
;
struct
D
MAP
MdnsPublisherService
*
ptr
;
g_return_val_if_fail
(
publisher
!=
NULL
,
FALSE
);
...
...
@@ -262,7 +262,7 @@ dmap_mdns_publisher_rename_at_port (DmapMdnsPublisher *publisher,
}
gboolean
dmap_mdns_publisher_publish
(
D
map
MdnsPublisher
*
publisher
,
dmap_mdns_publisher_publish
(
D
MAP
MdnsPublisher
*
publisher
,
const
char
*
name
,
guint
port
,
const
char
*
type_of_service
,
...
...
@@ -270,7 +270,7 @@ dmap_mdns_publisher_publish (DmapMdnsPublisher *publisher,
gchar
**
txt_records
,
GError
**
error
)
{
struct
D
map
MdnsPublisherService
*
service
;
struct
D
MAP
MdnsPublisherService
*
service
;
if
(
publisher
->
priv
->
client
==
NULL
)
{
g_set_error
(
error
,
...
...
@@ -282,7 +282,7 @@ dmap_mdns_publisher_publish (DmapMdnsPublisher *publisher,
}
service
=
g_new
(
struct
D
map
MdnsPublisherService
,
1
);
service
=
g_new
(
struct
D
MAP
MdnsPublisherService
,
1
);
service
->
name
=
g_strdup
(
name
);
service
->
port
=
port
;
...
...
@@ -296,7 +296,7 @@ dmap_mdns_publisher_publish (DmapMdnsPublisher *publisher,
}
static
void
free_service
(
struct
D
map
MdnsPublisherService
*
service
,
gpointer
user_data
)
free_service
(
struct
D
MAP
MdnsPublisherService
*
service
,
gpointer
user_data
)
{
g_free
(
service
->
name
);
g_free
(
service
->
type_of_service
);
...
...
@@ -304,11 +304,11 @@ free_service (struct DmapMdnsPublisherService *service, gpointer user_data)
}
gboolean
dmap_mdns_publisher_withdraw
(
D
map
MdnsPublisher
*
publisher
,
dmap_mdns_publisher_withdraw
(
D
MAP
MdnsPublisher
*
publisher
,
guint
port
,
GError
**
error
)
{
struct
D
map
MdnsPublisherService
*
ptr
;
struct
D
MAP
MdnsPublisherService
*
ptr
;
if
(
publisher
->
priv
->
client
==
NULL
)
{
g_set_error
(
error
,
...
...
@@ -390,7 +390,7 @@ dmap_mdns_publisher_constructor (GType type,
}
static
void
dmap_mdns_publisher_class_init
(
D
map
MdnsPublisherClass
*
klass
)
dmap_mdns_publisher_class_init
(
D
MAP
MdnsPublisherClass
*
klass
)
{
GObjectClass
*
object_class
=
G_OBJECT_CLASS
(
klass
);
...
...
@@ -403,7 +403,7 @@ dmap_mdns_publisher_class_init (DmapMdnsPublisherClass *klass)
g_signal_new
(
"published"
,
G_TYPE_FROM_CLASS
(
object_class
),
G_SIGNAL_RUN_LAST
,
G_STRUCT_OFFSET
(
D
map
MdnsPublisherClass
,
published
),
G_STRUCT_OFFSET
(
D
MAP
MdnsPublisherClass
,
published
),
NULL
,
NULL
,
g_cclosure_marshal_VOID__STRING
,
...
...
@@ -413,18 +413,18 @@ dmap_mdns_publisher_class_init (DmapMdnsPublisherClass *klass)
g_signal_new
(
"name-collision"
,
G_TYPE_FROM_CLASS
(
object_class
),
G_SIGNAL_RUN_LAST
,
G_STRUCT_OFFSET
(
D
map
MdnsPublisherClass
,
name_collision
),
G_STRUCT_OFFSET
(
D
MAP
MdnsPublisherClass
,
name_collision
),
NULL
,
NULL
,
g_cclosure_marshal_VOID__STRING
,
G_TYPE_NONE
,
1
,
G_TYPE_STRING
);
g_type_class_add_private
(
klass
,
sizeof
(
D
map
MdnsPublisherPrivate
));
g_type_class_add_private
(
klass
,
sizeof
(
D
MAP
MdnsPublisherPrivate
));
}
static
void
dmap_mdns_publisher_init
(
D
map
MdnsPublisher
*
publisher
)
dmap_mdns_publisher_init
(
D
MAP
MdnsPublisher
*
publisher
)
{
publisher
->
priv
=
DMAP_MDNS_PUBLISHER_GET_PRIVATE
(
publisher
);
...
...
@@ -436,7 +436,7 @@ dmap_mdns_publisher_init (DmapMdnsPublisher *publisher)
static
void
dmap_mdns_publisher_finalize
(
GObject
*
object
)
{
D
map
MdnsPublisher
*
publisher
;
D
MAP
MdnsPublisher
*
publisher
;
g_return_if_fail
(
object
!=
NULL
);
g_return_if_fail
(
IS_DMAP_MDNS_PUBLISHER
(
object
));
...
...
@@ -468,7 +468,7 @@ dmap_mdns_publisher_finalize (GObject *object)
G_OBJECT_CLASS
(
dmap_mdns_publisher_parent_class
)
->
finalize
(
object
);
}
D
map
MdnsPublisher
*
D
MAP
MdnsPublisher
*
dmap_mdns_publisher_new
(
void
)
{
if
(
publisher_object
)
{
...
...
libdmapsharing/dmap-mdns-publisher-dnssd.c
View file @
4e8bb573
...
...
@@ -25,9 +25,9 @@
#include "dmap-mdns-publisher.h"
#define DMAP_MDNS_PUBLISHER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DMAP_MDNS_PUBLISHER, D
map
MdnsPublisherPrivate))
#define DMAP_MDNS_PUBLISHER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DMAP_MDNS_PUBLISHER, D
MAP
MdnsPublisherPrivate))
struct
D
map
MdnsPublisherPrivate
struct
D
MAP
MdnsPublisherPrivate
{
DNSServiceRef
sdref
;
char
*
name
;
...
...
@@ -41,7 +41,7 @@ enum {
static
guint
signals
[
LAST_SIGNAL
]
=
{
0
,
};
G_DEFINE_TYPE
(
D
map
MdnsPublisher
,
dmap_mdns_publisher
,
G_TYPE_OBJECT
)
G_DEFINE_TYPE
(
D
MAP
MdnsPublisher
,
dmap_mdns_publisher
,
G_TYPE_OBJECT
)
static
gpointer
publisher_object
=
NULL
;
...
...
@@ -55,7 +55,7 @@ dmap_mdns_publisher_error_quark (void)
}
gboolean
dmap_mdns_publisher_rename_at_port
(
D
map
MdnsPublisher
*
publisher
,
dmap_mdns_publisher_rename_at_port
(
D
MAP
MdnsPublisher
*
publisher
,
guint
port
,
const
char
*
name
,
GError
**
error
)
...
...
@@ -66,7 +66,7 @@ dmap_mdns_publisher_rename_at_port (DmapMdnsPublisher *publisher,
}
gboolean
dmap_mdns_publisher_publish
(
D
map
MdnsPublisher
*
publisher
,
dmap_mdns_publisher_publish
(
D
MAP
MdnsPublisher
*
publisher
,
const
char
*
name
,
guint
port
,
const
char
*
type_of_service
,
...
...
@@ -110,7 +110,7 @@ dmap_mdns_publisher_publish (DmapMdnsPublisher *publisher,
}
gboolean
dmap_mdns_publisher_withdraw
(
D
map
MdnsPublisher
*
publisher
,
dmap_mdns_publisher_withdraw
(
D
MAP
MdnsPublisher
*
publisher
,
guint
port
,
GError
**
error
)
{
...
...
@@ -148,7 +148,7 @@ dmap_mdns_publisher_get_property (GObject *object,
static
void
dmap_mdns_publisher_finalize
(
GObject
*
object
)
{
D
map
MdnsPublisher
*
publisher
;
D
MAP
MdnsPublisher
*
publisher
;
g_return_if_fail
(
object
!=
NULL
);
g_return_if_fail
(
IS_DMAP_MDNS_PUBLISHER
(
object
));
...
...
@@ -163,7 +163,7 @@ dmap_mdns_publisher_finalize (GObject *object)
}
static
void
dmap_mdns_publisher_class_init
(
D
map
MdnsPublisherClass
*
klass
)
dmap_mdns_publisher_class_init
(
D
MAP
MdnsPublisherClass
*
klass
)
{
GObjectClass
*
object_class
=
G_OBJECT_CLASS
(
klass
);
...
...
@@ -175,7 +175,7 @@ dmap_mdns_publisher_class_init (DmapMdnsPublisherClass *klass)
g_signal_new
(
"published"
,
G_TYPE_FROM_CLASS
(
object_class
),
G_SIGNAL_RUN_LAST
,
G_STRUCT_OFFSET
(
D
map
MdnsPublisherClass
,
published
),
G_STRUCT_OFFSET
(
D
MAP
MdnsPublisherClass
,
published
),
NULL
,
NULL
,
g_cclosure_marshal_VOID__STRING
,
...
...
@@ -185,23 +185,23 @@ dmap_mdns_publisher_class_init (DmapMdnsPublisherClass *klass)
g_signal_new
(
"name-collision"
,
G_TYPE_FROM_CLASS
(
object_class
),
G_SIGNAL_RUN_LAST
,
G_STRUCT_OFFSET
(
D
map
MdnsPublisherClass
,
name_collision
),
G_STRUCT_OFFSET
(
D
MAP
MdnsPublisherClass
,
name_collision
),
NULL
,
NULL
,
g_cclosure_marshal_VOID__STRING
,
G_TYPE_NONE
,
1
,
G_TYPE_STRING
);
g_type_class_add_private
(
klass
,
sizeof
(
D
map
MdnsPublisherPrivate
));
g_type_class_add_private
(
klass
,
sizeof
(
D
MAP
MdnsPublisherPrivate
));
}
static
void
dmap_mdns_publisher_init
(
D
map
MdnsPublisher
*
publisher
)
dmap_mdns_publisher_init
(
D
MAP
MdnsPublisher
*
publisher
)
{
publisher
->
priv
=
DMAP_MDNS_PUBLISHER_GET_PRIVATE
(
publisher
);
}
D
map
MdnsPublisher
*
D
MAP
MdnsPublisher
*
dmap_mdns_publisher_new
(
void
)
{
if
(
publisher_object
)
{
...
...
libdmapsharing/dmap-mdns-publisher.h
View file @
4e8bb573
...
...
@@ -32,36 +32,36 @@
G_BEGIN_DECLS
#define TYPE_DMAP_MDNS_PUBLISHER (dmap_mdns_publisher_get_type ())
#define DMAP_MDNS_PUBLISHER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_DMAP_MDNS_PUBLISHER, D
map
MdnsPublisher))
#define DMAP_MDNS_PUBLISHER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), TYPE_DMAP_MDNS_PUBLISHER, D
map
MdnsPublisherClass))
#define DMAP_MDNS_PUBLISHER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_DMAP_MDNS_PUBLISHER, D
MAP
MdnsPublisher))
#define DMAP_MDNS_PUBLISHER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), TYPE_DMAP_MDNS_PUBLISHER, D
MAP
MdnsPublisherClass))
#define IS_DMAP_MDNS_PUBLISHER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_DMAP_MDNS_PUBLISHER))
#define IS_DMAP_MDNS_PUBLISHER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_DMAP_MDNS_PUBLISHER))
#define DMAP_MDNS_PUBLISHER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_DMAP_MDNS_PUBLISHER, D
map
MdnsPublisherClass))
#define DMAP_MDNS_PUBLISHER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_DMAP_MDNS_PUBLISHER, D
MAP
MdnsPublisherClass))
typedef
struct
D
map
MdnsPublisherPrivate
D
map
MdnsPublisherPrivate
;
typedef
struct
D
MAP
MdnsPublisherPrivate
D
MAP
MdnsPublisherPrivate
;
typedef
struct
{
GObject
object
;
D
map
MdnsPublisherPrivate
*
priv
;
}
D
map
MdnsPublisher
;
D
MAP
MdnsPublisherPrivate
*
priv
;
}
D
MAP
MdnsPublisher
;
typedef
struct
{
GObjectClass
parent_class
;
void
(
*
published
)
(
D
map
MdnsPublisher
*
publisher
,
void
(
*
published
)
(
D
MAP
MdnsPublisher
*
publisher
,
const
char
*
name
);
void
(
*
name_collision
)
(
D
map
MdnsPublisher
*
publisher
,
void
(
*
name_collision
)
(
D
MAP
MdnsPublisher
*
publisher
,
const
char
*
name
);
}
D
map
MdnsPublisherClass
;
}
D
MAP
MdnsPublisherClass
;
typedef
enum
{
DMAP_MDNS_PUBLISHER_ERROR_NOT_RUNNING
,
DMAP_MDNS_PUBLISHER_ERROR_FAILED
,
}
D
map
MdnsPublisherError
;
}
D
MAP
MdnsPublisherError
;
#define DMAP_MDNS_PUBLISHER_ERROR dmap_mdns_publisher_error_quark ()
...
...
@@ -69,19 +69,19 @@ GQuark dmap_mdns_publisher_error_quark (void);
GType
dmap_mdns_publisher_get_type
(
void
);
D
map
MdnsPublisher
*
dmap_mdns_publisher_new
(
void
);
gboolean
dmap_mdns_publisher_publish
(
D
map
MdnsPublisher
*
publisher
,
D
MAP
MdnsPublisher
*
dmap_mdns_publisher_new
(
void
);
gboolean
dmap_mdns_publisher_publish
(
D
MAP
MdnsPublisher
*
publisher
,
const
char
*
name
,
guint
port
,
const
char
*
type_of_service
,
gboolean
password_required
,
gchar
**
txt_records
,
GError
**
error
);
gboolean
dmap_mdns_publisher_rename_at_port
(
D
map
MdnsPublisher
*
publisher
,
gboolean
dmap_mdns_publisher_rename_at_port
(
D
MAP
MdnsPublisher
*
publisher
,
guint
port
,
const
char
*
name
,
GError
**
error
);
gboolean
dmap_mdns_publisher_withdraw
(
D
map
MdnsPublisher
*
publisher
,
gboolean
dmap_mdns_publisher_withdraw
(
D
MAP
MdnsPublisher
*
publisher
,
guint
port
,
GError
**
error
);
...
...
libdmapsharing/dmap-share.c
View file @
4e8bb573
...
...
@@ -75,7 +75,7 @@ struct DMAPSharePrivate {
/* mDNS/DNS-SD publishing things */
gboolean
server_active
;
gboolean
published
;
D
map
MdnsPublisher
*
publisher
;
D
MAP
MdnsPublisher
*
publisher
;
/* HTTP server things */
SoupServer
*
server
;
...
...
@@ -669,14 +669,14 @@ dmap_share_class_init (DMAPShareClass *klass)
g_type_class_add_private
(
klass
,
sizeof
(
DMAPSharePrivate
));
}
static
void
published_adapter
(
D
map
MdnsPublisher
*
publisher
,
static
void
published_adapter
(
D
MAP
MdnsPublisher
*
publisher
,
const
char
*
name
,
DMAPShare
*
share
)
{
DMAP_SHARE_GET_CLASS
(
share
)
->
published
(
share
,
publisher
,
name
);
}
static
void
name_collision_adapter
(
D
map
MdnsPublisher
*
publisher
,
static
void
name_collision_adapter
(
D
MAP
MdnsPublisher
*
publisher
,
const
char
*
name
,
DMAPShare
*
share
)
{
...
...
@@ -908,7 +908,7 @@ _dmap_share_soup_auth_filter (SoupAuthDomain *auth_domain,
void
_dmap_share_published
(
DMAPShare
*
share
,
D
map
MdnsPublisher
*
publisher
,
D
MAP
MdnsPublisher
*
publisher
,
const
char
*
name
)
{
gchar
*
nameprop
;
...
...
@@ -930,7 +930,7 @@ _dmap_share_published (DMAPShare *share,
void
_dmap_share_name_collision
(
DMAPShare
*
share
,
D
map
MdnsPublisher
*
publisher
,
D
MAP
MdnsPublisher
*
publisher
,
const
char
*
name
)
{
gchar
*
nameprop
;
...
...
libdmapsharing/dmap-share.h
View file @
4e8bb573
...
...
@@ -154,11 +154,11 @@ typedef struct {
/* Virtual methods: MDNS callbacks */
void
(
*
published
)
(
DMAPShare
*
share
,
D
map
MdnsPublisher
*
publisher
,
D
MAP
MdnsPublisher
*
publisher
,
const
char
*
name
);
void
(
*
name_collision
)(
DMAPShare
*
share
,
D
map
MdnsPublisher
*
publisher
,
D
MAP
MdnsPublisher
*
publisher
,
const
char
*
name
);
/* Virtual methods: */
...
...
@@ -272,11 +272,11 @@ void _dmap_share_ctrl_int (DMAPShare *share,
/* Virtual methods: MDNS callbacks */
void
_dmap_share_published
(
DMAPShare
*
share
,
D
map
MdnsPublisher
*
publisher
,
D
MAP
MdnsPublisher
*
publisher
,
const
char
*
name
);
void
_dmap_share_name_collision
(
DMAPShare
*
share
,
D
map
MdnsPublisher
*
publisher
,
D
MAP
MdnsPublisher
*
publisher
,
const
char
*
name
);
...
...
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