[refactor] fix intent in some files

This commit is contained in:
Julian Sparber
2017-10-02 19:59:42 +02:00
parent da1d515482
commit a44f896fcd
8 changed files with 302 additions and 299 deletions

View File

@@ -10,16 +10,16 @@
void save_file_callback (GSimpleAction *simple, void save_file_callback (GSimpleAction *simple,
GVariant *parameter, GVariant *parameter,
gpointer user_data); gpointer user_data);
void do_nothing_callback (GSimpleAction *simple, void do_nothing_callback (GSimpleAction *simple,
GVariant *parameter, GVariant *parameter,
gpointer user_data); gpointer user_data);
void open_file_callback (GSimpleAction *simple, void open_file_callback (GSimpleAction *simple,
GVariant *parameter, GVariant *parameter,
gpointer user_data); gpointer user_data);
enum { enum {
@@ -28,10 +28,10 @@ enum {
static GActionEntry app_entries[] = static GActionEntry app_entries[] =
{ {
{ "save", save_file_callback, "as", NULL, NULL }, { "save", save_file_callback, "as", NULL, NULL },
{ "decline", do_nothing_callback, "as", NULL, NULL }, { "decline", do_nothing_callback, "as", NULL, NULL },
{ "do-nothing", do_nothing_callback, "as", NULL, NULL }, { "do-nothing", do_nothing_callback, "as", NULL, NULL },
{ "open-file", open_file_callback, "as", NULL, NULL } { "open-file", open_file_callback, "as", NULL, NULL }
}; };
static TeleportAppWindow *win; static TeleportAppWindow *win;
@@ -46,38 +46,38 @@ G_DEFINE_TYPE (TeleportApp, teleport_app, GTK_TYPE_APPLICATION);
void save_file_callback (GSimpleAction *simple, void save_file_callback (GSimpleAction *simple,
GVariant *parameter, GVariant *parameter,
gpointer user_data) { gpointer user_data) {
do_downloading(g_variant_get_string (g_variant_get_child_value (parameter, 0), NULL), teleport_get_do_downloading(g_variant_get_string (g_variant_get_child_value (parameter, 0), NULL),
g_variant_get_string (g_variant_get_child_value (parameter, 1), NULL), g_variant_get_string (g_variant_get_child_value (parameter, 1), NULL),
g_variant_get_string (g_variant_get_child_value (parameter, 2), NULL)); g_variant_get_string (g_variant_get_child_value (parameter, 2), NULL));
} }
void do_nothing_callback (GSimpleAction *simple, void do_nothing_callback (GSimpleAction *simple,
GVariant *parameter, GVariant *parameter,
gpointer user_data) { gpointer user_data) {
} }
void open_file_callback (GSimpleAction *simple, void open_file_callback (GSimpleAction *simple,
GVariant *parameter, GVariant *parameter,
gpointer user_data) { gpointer user_data) {
g_print("Open file\n %s%s", g_print("Open file\n %s%s",
g_variant_get_string (g_variant_get_child_value (parameter, 3), NULL), g_variant_get_string (g_variant_get_child_value (parameter, 3), NULL),
g_variant_get_string (g_variant_get_child_value (parameter, 2), NULL)); g_variant_get_string (g_variant_get_child_value (parameter, 2), NULL));
g_spawn_command_line_async(g_strdup_printf("xdg-open %s/%s", g_spawn_command_line_async(g_strdup_printf("xdg-open %s/%s",
g_variant_get_string (g_variant_get_child_value (parameter, 3), NULL), g_variant_get_string (g_variant_get_child_value (parameter, 3), NULL),
g_variant_get_string (g_variant_get_child_value (parameter, 2), NULL)), NULL); g_variant_get_string (g_variant_get_child_value (parameter, 2), NULL)), NULL);
} }
void create_user_notification (const char *file_name, const int file_size, const char *origin_device, GVariant *target) { void create_user_notification (const char *file_name, const int file_size, const char *origin_device, GVariant *target) {
GIcon *icon; GIcon *icon;
GNotification *notification = g_notification_new ("Teleport"); GNotification *notification = g_notification_new ("Teleport");
g_notification_set_body (notification, g_notification_set_body (notification,
g_strdup_printf("%s is sending %s (%s)", g_strdup_printf("%s is sending %s (%s)",
origin_device, origin_device,
file_name, file_name,
g_format_size (file_size))); g_format_size (file_size)));
icon = g_themed_icon_new ("dialog-information"); icon = g_themed_icon_new ("dialog-information");
g_notification_set_icon (notification, icon); g_notification_set_icon (notification, icon);
g_notification_set_default_action_and_target_value (notification, "app.do-nothing", target); g_notification_set_default_action_and_target_value (notification, "app.do-nothing", target);
@@ -144,8 +144,8 @@ teleport_app_activate (GApplication *app) {
gtk_window_present (GTK_WINDOW (win)); gtk_window_present (GTK_WINDOW (win));
g_action_map_add_action_entries (G_ACTION_MAP (app), g_action_map_add_action_entries (G_ACTION_MAP (app),
app_entries, G_N_ELEMENTS (app_entries), app_entries, G_N_ELEMENTS (app_entries),
app); app);
g_signal_connect (peerList, "addpeer", (GCallback)callback_add_peer, win); g_signal_connect (peerList, "addpeer", (GCallback)callback_add_peer, win);
g_signal_connect (peerList, "removepeer", (GCallback)callback_remove_peer, win); g_signal_connect (peerList, "removepeer", (GCallback)callback_remove_peer, win);
@@ -157,27 +157,27 @@ teleport_app_activate (GApplication *app) {
*/ */
/*GVariantBuilder *builder; /*GVariantBuilder *builder;
GVariant *value; GVariant *value;
builder = g_variant_builder_new (G_VARIANT_TYPE ("as")); builder = g_variant_builder_new (G_VARIANT_TYPE ("as"));
g_variant_builder_add (builder, "s", "devicename"); g_variant_builder_add (builder, "s", "devicename");
g_variant_builder_add (builder, "s", "https://downloadlink"); g_variant_builder_add (builder, "s", "https://downloadlink");
g_variant_builder_add (builder, "s", "filename"); g_variant_builder_add (builder, "s", "filename");
value = g_variant_new ("as", builder); value = g_variant_new ("as", builder);
g_variant_builder_unref (builder); g_variant_builder_unref (builder);
create_finished_notification ("USER", 2000, "FILENAME", value); create_finished_notification ("USER", 2000, "FILENAME", value);
*/ */
run_http_server(); run_http_server();
run_avahi_publish_service((char *) g_get_host_name()); run_avahi_publish_service((char *) g_get_host_name());
run_avahi_service(peerList); run_avahi_service(peerList);
} }
static void static void
teleport_app_open (GApplication *app, teleport_app_open (GApplication *app,
GFile **files, GFile **files,
gint n_files, gint n_files,
const gchar *hint) const gchar *hint)
{ {
GList *windows; GList *windows;
int i; int i;
@@ -194,29 +194,29 @@ teleport_app_open (GApplication *app,
gtk_window_present (GTK_WINDOW (win)); gtk_window_present (GTK_WINDOW (win));
} }
static void static void
teleport_app_class_init (TeleportAppClass *class) teleport_app_class_init (TeleportAppClass *class)
{ {
G_APPLICATION_CLASS (class)->activate = teleport_app_activate; G_APPLICATION_CLASS (class)->activate = teleport_app_activate;
G_APPLICATION_CLASS (class)->open = teleport_app_open; G_APPLICATION_CLASS (class)->open = teleport_app_open;
signalIds[NOTIFY_USER] = g_signal_new ("notify_user", signalIds[NOTIFY_USER] = g_signal_new ("notify_user",
G_TYPE_OBJECT, G_TYPE_OBJECT,
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
0, 0,
NULL /* accumulator */, NULL /* accumulator */,
NULL /* accumulator data */, NULL /* accumulator data */,
NULL /* C marshaller */, NULL /* C marshaller */,
G_TYPE_NONE /* return_type */, G_TYPE_NONE /* return_type */,
1, 1,
G_TYPE_STRING); G_TYPE_STRING);
} }
TeleportApp * TeleportApp *
teleport_app_new (void) teleport_app_new (void)
{ {
return g_object_new (TELEPORT_APP_TYPE, return g_object_new (TELEPORT_APP_TYPE,
"application-id", "com.frac_tion.teleport", "application-id", "com.frac_tion.teleport",
"flags", G_APPLICATION_HANDLES_OPEN, "flags", G_APPLICATION_HANDLES_OPEN,
NULL); NULL);
} }

View File

@@ -22,96 +22,95 @@ static AvahiThreadedPoll *threaded_poll = NULL;
static AvahiClient *client = NULL; static AvahiClient *client = NULL;
static TeleportPeer *peerList = NULL; static TeleportPeer *peerList = NULL;
static void resolve_callback( static void resolve_callback (AvahiServiceResolver *r,
AvahiServiceResolver *r, AVAHI_GCC_UNUSED AvahiIfIndex interface,
AVAHI_GCC_UNUSED AvahiIfIndex interface, AVAHI_GCC_UNUSED AvahiProtocol protocol,
AVAHI_GCC_UNUSED AvahiProtocol protocol, AvahiResolverEvent event,
AvahiResolverEvent event, const char *name,
const char *name, const char *type,
const char *type, const char *domain,
const char *domain, const char *host_name,
const char *host_name, const AvahiAddress *address,
const AvahiAddress *address, uint16_t port,
uint16_t port, AvahiStringList *txt,
AvahiStringList *txt, AvahiLookupResultFlags flags,
AvahiLookupResultFlags flags, AVAHI_GCC_UNUSED void* userdata) {
AVAHI_GCC_UNUSED void* userdata) {
assert(r); assert(r);
/* Called whenever a service has been resolved successfully or timed out */ /* Called whenever a service has been resolved successfully or timed out */
switch (event) { switch (event) {
case AVAHI_RESOLVER_FAILURE: case AVAHI_RESOLVER_FAILURE:
fprintf(stderr, "(Resolver) Failed to resolve service '%s' of type '%s' in domain '%s': %s\n", name, type, domain, avahi_strerror(avahi_client_errno(avahi_service_resolver_get_client(r)))); fprintf(stderr, "(Resolver) Failed to resolve service '%s' of type '%s' in domain '%s': %s\n", name, type, domain, avahi_strerror(avahi_client_errno(avahi_service_resolver_get_client(r))));
break; break;
case AVAHI_RESOLVER_FOUND: { case AVAHI_RESOLVER_FOUND: {
char a[AVAHI_ADDRESS_STR_MAX], *t; char a[AVAHI_ADDRESS_STR_MAX], *t;
fprintf(stderr, "Service '%s' of type '%s' in domain '%s':\n", name, type, domain); fprintf(stderr, "Service '%s' of type '%s' in domain '%s':\n", name, type, domain);
avahi_address_snprint(a, sizeof(a), address); avahi_address_snprint(a, sizeof(a), address);
t = avahi_string_list_to_string(txt); t = avahi_string_list_to_string(txt);
teleport_peer_add_peer(peerList, g_strdup(name), g_strdup(a), port); teleport_peer_add_peer(peerList, g_strdup(name), g_strdup(a), port);
//teleport_app_add_peer(name, port, a); //teleport_app_add_peer(name, port, a);
/*fprintf(stderr, /*fprintf(stderr,
"\t%s:%u (%s)\n" "\t%s:%u (%s)\n"
"\tTXT=%s\n" "\tTXT=%s\n"
"\tcookie is %u\n" "\tcookie is %u\n"
"\tis_local: %i\n" "\tis_local: %i\n"
"\tour_own: %i\n" "\tour_own: %i\n"
"\twide_area: %i\n" "\twide_area: %i\n"
"\tmulticast: %i\n" "\tmulticast: %i\n"
"\tcached: %i\n", "\tcached: %i\n",
host_name, port, a, host_name, port, a,
t, t,
avahi_string_list_get_service_cookie(txt), avahi_string_list_get_service_cookie(txt),
!!(flags & AVAHI_LOOKUP_RESULT_LOCAL), !!(flags & AVAHI_LOOKUP_RESULT_LOCAL),
!!(flags & AVAHI_LOOKUP_RESULT_OUR_OWN), !!(flags & AVAHI_LOOKUP_RESULT_OUR_OWN),
!!(flags & AVAHI_LOOKUP_RESULT_WIDE_AREA), !!(flags & AVAHI_LOOKUP_RESULT_WIDE_AREA),
!!(flags & AVAHI_LOOKUP_RESULT_MULTICAST), !!(flags & AVAHI_LOOKUP_RESULT_MULTICAST),
!!(flags & AVAHI_LOOKUP_RESULT_CACHED)); !!(flags & AVAHI_LOOKUP_RESULT_CACHED));
*/ */
avahi_free(t); avahi_free(t);
} }
} }
avahi_service_resolver_free(r); avahi_service_resolver_free(r);
} }
static void browse_callback( static void browse_callback(
AvahiServiceBrowser *b, AvahiServiceBrowser *b,
AvahiIfIndex interface, AvahiIfIndex interface,
AvahiProtocol protocol, AvahiProtocol protocol,
AvahiBrowserEvent event, AvahiBrowserEvent event,
const char *name, const char *name,
const char *type, const char *type,
const char *domain, const char *domain,
AVAHI_GCC_UNUSED AvahiLookupResultFlags flags, AVAHI_GCC_UNUSED AvahiLookupResultFlags flags,
void* userdata) { void* userdata) {
AvahiClient *c = userdata; AvahiClient *c = userdata;
assert(b); assert(b);
/* Called whenever a new services becomes available on the LAN or is removed from the LAN */ /* Called whenever a new services becomes available on the LAN or is removed from the LAN */
switch (event) { switch (event) {
case AVAHI_BROWSER_FAILURE: case AVAHI_BROWSER_FAILURE:
fprintf(stderr, "(Browser) %s\n", avahi_strerror(avahi_client_errno(avahi_service_browser_get_client(b)))); fprintf(stderr, "(Browser) %s\n", avahi_strerror(avahi_client_errno(avahi_service_browser_get_client(b))));
avahi_shutdown(); avahi_shutdown();
//avahi_simple_poll_quit(simple_poll); //avahi_simple_poll_quit(simple_poll);
return; return;
case AVAHI_BROWSER_NEW: case AVAHI_BROWSER_NEW:
fprintf(stderr, "(Browser) NEW: service '%s' of type '%s' in domain '%s'\n", name, type, domain); fprintf(stderr, "(Browser) NEW: service '%s' of type '%s' in domain '%s'\n", name, type, domain);
if (flags & AVAHI_LOOKUP_RESULT_LOCAL) if (flags & AVAHI_LOOKUP_RESULT_LOCAL)
break;
/* We ignore the returned resolver object. In the callback
function we free it. If the server is terminated before
the callback function is called the server will free
the resolver for us. */
if (!(avahi_service_resolver_new(c, interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, 0, resolve_callback, c)))
//if (!(avahi_service_resolver_new(c, interface, protocol, name, type, domain, AVAHI_PROTO_INET, 0, resolve_callback, c)))
fprintf(stderr, "Failed to resolve service '%s': %s\n", name, avahi_strerror(avahi_client_errno(c)));
break;
case AVAHI_BROWSER_REMOVE:
fprintf(stderr, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'\n", name, type, domain);
//teleport_app_remove_peer(name);
teleport_peer_remove_peer_by_name(peerList, g_strdup(name));
break;
case AVAHI_BROWSER_ALL_FOR_NOW:
case AVAHI_BROWSER_CACHE_EXHAUSTED:
fprintf(stderr, "(Browser) %s\n", event == AVAHI_BROWSER_CACHE_EXHAUSTED ? "CACHE_EXHAUSTED" : "ALL_FOR_NOW");
break; break;
/* We ignore the returned resolver object. In the callback
function we free it. If the server is terminated before
the callback function is called the server will free
the resolver for us. */
if (!(avahi_service_resolver_new(c, interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, 0, resolve_callback, c)))
//if (!(avahi_service_resolver_new(c, interface, protocol, name, type, domain, AVAHI_PROTO_INET, 0, resolve_callback, c)))
fprintf(stderr, "Failed to resolve service '%s': %s\n", name, avahi_strerror(avahi_client_errno(c)));
break;
case AVAHI_BROWSER_REMOVE:
fprintf(stderr, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'\n", name, type, domain);
//teleport_app_remove_peer(name);
teleport_peer_remove_peer_by_name(peerList, g_strdup(name));
break;
case AVAHI_BROWSER_ALL_FOR_NOW:
case AVAHI_BROWSER_CACHE_EXHAUSTED:
fprintf(stderr, "(Browser) %s\n", event == AVAHI_BROWSER_CACHE_EXHAUSTED ? "CACHE_EXHAUSTED" : "ALL_FOR_NOW");
break;
} }
} }
static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UNUSED void * userdata) { static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UNUSED void * userdata) {

View File

@@ -2,39 +2,41 @@
#include <config.h> #include <config.h>
#endif #endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libsoup/soup.h> #include <libsoup/soup.h>
#include "teleport-app.h" #include "teleport-app.h"
#include "teleport-get.h" #include "teleport-get.h"
static int saveFile (SoupMessage *, const gchar *, const gchar *);
static gchar * getFilePath (const gchar *, const gchar *);
static int get (const gchar *, const gchar *, const gchar *, const gchar *);
static gboolean debug; static gboolean debug;
static void static void
finished (SoupSession *session, SoupMessage *msg, gpointer target) finished (SoupSession *session,
SoupMessage *msg,
gpointer target)
{ {
//GVariant *target array: {originDevice, url, filename, downloadDirectory} //GVariant *target array: {originDevice, url, filename, downloadDirectory}
if ((char *) g_variant_get_string ( if ((char *) g_variant_get_string (
g_variant_get_child_value ((GVariant *) target, 2), NULL) != NULL) { g_variant_get_child_value ((GVariant *) target, 2), NULL) != NULL) {
saveFile(msg, saveFile(msg,
(char *) g_variant_get_string ( (char *) g_variant_get_string (
g_variant_get_child_value ((GVariant *) target, 3), NULL), g_variant_get_child_value ((GVariant *) target, 3), NULL),
(char *) g_variant_get_string ( (char *) g_variant_get_string (
g_variant_get_child_value ((GVariant *) target, 2), NULL)); g_variant_get_child_value ((GVariant *) target, 2), NULL));
create_finished_notification ((char *) g_variant_get_string ( create_finished_notification ((char *) g_variant_get_string (
g_variant_get_child_value ((GVariant *) target, 0), NULL), g_variant_get_child_value ((GVariant *) target, 0), NULL),
0, 0,
g_variant_get_string ( g_variant_get_string (
g_variant_get_child_value ((GVariant *) target, 2), NULL), g_variant_get_child_value ((GVariant *) target, 2), NULL),
target); target);
} }
} }
int static int
get (char *url, get (const gchar *url,
const gchar *originDevice, const gchar *originDevice,
const gchar *downloadDirectory, const gchar *downloadDirectory,
const gchar *outputFilename) { const gchar *outputFilename) {
@@ -48,10 +50,13 @@ get (char *url,
} }
session = g_object_new (SOUP_TYPE_SESSION, session = g_object_new (SOUP_TYPE_SESSION,
SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_DECODER, SOUP_SESSION_ADD_FEATURE_BY_TYPE,
SOUP_SESSION_USER_AGENT, "teleport ", SOUP_TYPE_CONTENT_DECODER,
SOUP_SESSION_ACCEPT_LANGUAGE_AUTO, TRUE, SOUP_SESSION_USER_AGENT,
NULL); "teleport ",
SOUP_SESSION_ACCEPT_LANGUAGE_AUTO,
TRUE,
NULL);
if (debug) { if (debug) {
logger = soup_logger_new (SOUP_LOGGER_LOG_BODY, -1); logger = soup_logger_new (SOUP_LOGGER_LOG_BODY, -1);
@@ -85,7 +90,7 @@ get (char *url,
return 0; return 0;
} }
int static int
saveFile (SoupMessage *msg, saveFile (SoupMessage *msg,
const gchar *outputDirectory, const gchar *outputDirectory,
const gchar *outputFilename) { const gchar *outputFilename) {
@@ -112,9 +117,9 @@ saveFile (SoupMessage *msg,
if (outputFile) { if (outputFile) {
fwrite (msg->response_body->data, fwrite (msg->response_body->data,
1, 1,
msg->response_body->length, msg->response_body->length,
outputFile); outputFile);
fclose (outputFile); fclose (outputFile);
} }
@@ -123,24 +128,25 @@ saveFile (SoupMessage *msg,
return 0; return 0;
} }
static gchar *
getFilePath (const gchar *outputDirectory,
const gchar *outputFilename) {
return g_strdup_printf("%s/%s", outputDirectory,
g_uri_escape_string(outputFilename, NULL, TRUE));
}
int int
do_client_notify (char *url) { teleport_get_do_client_notify (const gchar *url) {
get (g_strdup(url), NULL, NULL, NULL); get (g_strdup(url), NULL, NULL, NULL);
g_print("Offering selected file to other machine.\n"); g_print("Offering selected file to other machine.\n");
return 0; return 0;
} }
gchar *
getFilePath (const gchar *outputDirectory,
const gchar *outputFilename) {
return g_strdup_printf("%s/%s", outputDirectory,
g_uri_escape_string(outputFilename, NULL, TRUE));
}
int int
do_downloading (const char *originDevice, teleport_get_do_downloading (const char *originDevice,
const char *url, const char *url,
const char *filename) { const char *filename) {
const gchar *outputDirectory = g_get_user_special_dir(G_USER_DIRECTORY_DOWNLOAD); const gchar *outputDirectory = g_get_user_special_dir(G_USER_DIRECTORY_DOWNLOAD);
g_print("Downloading %s to %s\n", url, g_uri_escape_string(filename, NULL, TRUE)); g_print("Downloading %s to %s\n", url, g_uri_escape_string(filename, NULL, TRUE));
get (g_strdup(url), originDevice, outputDirectory, filename); get (g_strdup(url), originDevice, outputDirectory, filename);

View File

@@ -3,11 +3,9 @@
#include <libsoup/soup.h> #include <libsoup/soup.h>
extern int do_downloading(const char *, const char *, const char *); int teleport_get_do_downloading (const gchar *,
extern int do_client_notify(char *); const gchar *,
const gchar *);
int saveFile (SoupMessage *, const gchar *, const gchar *); int teleport_get_do_client_notify (const gchar *);
gchar * getFilePath (const gchar *, const gchar *);
int get (char *, const gchar *, const gchar *, const gchar *);
#endif /* __TELEPORT_GET_H */ #endif /* __TELEPORT_GET_H */

View File

@@ -29,26 +29,26 @@ teleport_peer_class_init (TeleportPeerClass *klass)
object_class->constructed = teleport_peer_constructed; object_class->constructed = teleport_peer_constructed;
signalIds[ADD] = g_signal_new ("addpeer", signalIds[ADD] = g_signal_new ("addpeer",
G_TYPE_OBJECT, G_TYPE_OBJECT,
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
0, 0,
NULL /* accumulator */, NULL /* accumulator */,
NULL /* accumulator data */, NULL /* accumulator data */,
NULL /* C marshaller */, NULL /* C marshaller */,
G_TYPE_NONE /* return_type */, G_TYPE_NONE /* return_type */,
1, 1,
G_TYPE_POINTER); G_TYPE_POINTER);
signalIds[REMOVE] = g_signal_new ("removepeer", signalIds[REMOVE] = g_signal_new ("removepeer",
G_TYPE_OBJECT, G_TYPE_OBJECT,
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
0, 0,
NULL /* accumulator */, NULL /* accumulator */,
NULL /* accumulator data */, NULL /* accumulator data */,
NULL /* C marshaller */, NULL /* C marshaller */,
G_TYPE_NONE /* return_type */, G_TYPE_NONE /* return_type */,
1, 1,
G_TYPE_POINTER); G_TYPE_POINTER);
} }

View File

@@ -37,39 +37,39 @@ static void entry_group_callback(AvahiEntryGroup *g, AvahiEntryGroupState state,
/* Called whenever the entry group state changes */ /* Called whenever the entry group state changes */
switch (state) { switch (state) {
case AVAHI_ENTRY_GROUP_ESTABLISHED : case AVAHI_ENTRY_GROUP_ESTABLISHED :
/* The entry group has been established successfully */ /* The entry group has been established successfully */
fprintf(stderr, "Service '%s' successfully established.\n", name); fprintf(stderr, "Service '%s' successfully established.\n", name);
break; break;
case AVAHI_ENTRY_GROUP_COLLISION : { case AVAHI_ENTRY_GROUP_COLLISION : {
char *n; char *n;
/* A service name collision with a remote service /* A service name collision with a remote service
* happened. Let's pick a new name */ * happened. Let's pick a new name */
n = avahi_alternative_service_name(name); n = avahi_alternative_service_name(name);
avahi_free(name); avahi_free(name);
name = n; name = n;
fprintf(stderr, "Service name collision, renaming service to '%s'\n", name); fprintf(stderr, "Service name collision, renaming service to '%s'\n", name);
/* And recreate the services */ /* And recreate the services */
create_services(avahi_entry_group_get_client(g)); create_services(avahi_entry_group_get_client(g));
break;
}
case AVAHI_ENTRY_GROUP_FAILURE :
fprintf(stderr, "Entry group failure: %s\n", avahi_strerror(avahi_client_errno(avahi_entry_group_get_client(g))));
/* Some kind of failure happened while we were registering our services */
//avahi_simple_poll_quit(simple_poll);
shutdown_avahi_publish_service();
break; break;
}
case AVAHI_ENTRY_GROUP_UNCOMMITED: case AVAHI_ENTRY_GROUP_FAILURE :
case AVAHI_ENTRY_GROUP_REGISTERING:
; fprintf(stderr, "Entry group failure: %s\n", avahi_strerror(avahi_client_errno(avahi_entry_group_get_client(g))));
/* Some kind of failure happened while we were registering our services */
//avahi_simple_poll_quit(simple_poll);
shutdown_avahi_publish_service();
break;
case AVAHI_ENTRY_GROUP_UNCOMMITED:
case AVAHI_ENTRY_GROUP_REGISTERING:
;
} }
} }
@@ -146,41 +146,41 @@ static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UN
/* Called whenever the client or server state changes */ /* Called whenever the client or server state changes */
switch (state) { switch (state) {
case AVAHI_CLIENT_S_RUNNING: case AVAHI_CLIENT_S_RUNNING:
/* The server has startup successfully and registered its host /* The server has startup successfully and registered its host
* name on the network, so it's time to create our services */ * name on the network, so it's time to create our services */
create_services(c); create_services(c);
break; break;
case AVAHI_CLIENT_FAILURE: case AVAHI_CLIENT_FAILURE:
fprintf(stderr, "Client failure: %s\n", avahi_strerror(avahi_client_errno(c))); fprintf(stderr, "Client failure: %s\n", avahi_strerror(avahi_client_errno(c)));
//avahi_simple_poll_quit(simple_poll); //avahi_simple_poll_quit(simple_poll);
shutdown_avahi_publish_service(); shutdown_avahi_publish_service();
break; break;
case AVAHI_CLIENT_S_COLLISION: case AVAHI_CLIENT_S_COLLISION:
/* Let's drop our registered services. When the server is back /* Let's drop our registered services. When the server is back
* in AVAHI_SERVER_RUNNING state we will register them * in AVAHI_SERVER_RUNNING state we will register them
* again with the new host name. */ * again with the new host name. */
case AVAHI_CLIENT_S_REGISTERING: case AVAHI_CLIENT_S_REGISTERING:
/* The server records are now being established. This /* The server records are now being established. This
* might be caused by a host name change. We need to wait * might be caused by a host name change. We need to wait
* for our own records to register until the host name is * for our own records to register until the host name is
* properly esatblished. */ * properly esatblished. */
if (group) if (group)
avahi_entry_group_reset(group); avahi_entry_group_reset(group);
break; break;
case AVAHI_CLIENT_CONNECTING: case AVAHI_CLIENT_CONNECTING:
; ;
} }
} }

View File

@@ -15,7 +15,7 @@ static int port;
static SoupServer *glob_server; static SoupServer *glob_server;
//static const char *tls_cert_file, *tls_key_file; //static const char *tls_cert_file, *tls_key_file;
static int static int
compare_strings (gconstpointer a, gconstpointer b) compare_strings (gconstpointer a, gconstpointer b)
{ {
const char **sa = (const char **)a; const char **sa = (const char **)a;
@@ -24,7 +24,7 @@ compare_strings (gconstpointer a, gconstpointer b)
return strcmp (*sa, *sb); return strcmp (*sa, *sb);
} }
static GString * static GString *
get_directory_listing (const char *path) get_directory_listing (const char *path)
{ {
GPtrArray *entries; GPtrArray *entries;
@@ -57,8 +57,8 @@ get_directory_listing (const char *path)
g_free (escaped); g_free (escaped);
for (i = 0; i < entries->len; i++) { for (i = 0; i < entries->len; i++) {
g_string_append_printf (listing, "<a href=\"%s\">%s</a><br>\r\n", g_string_append_printf (listing, "<a href=\"%s\">%s</a><br>\r\n",
(char *)entries->pdata[i], (char *)entries->pdata[i],
(char *)entries->pdata[i]); (char *)entries->pdata[i]);
g_free (entries->pdata[i]); g_free (entries->pdata[i]);
} }
g_string_append (listing, "</body>\r\n</html>\r\n"); g_string_append (listing, "</body>\r\n</html>\r\n");
@@ -67,7 +67,7 @@ get_directory_listing (const char *path)
return listing; return listing;
} }
static void static void
do_get (SoupServer *server, SoupMessage *msg, const char *path) do_get (SoupServer *server, SoupMessage *msg, const char *path)
{ {
char *slash; char *slash;
@@ -94,7 +94,7 @@ do_get (SoupServer *server, SoupMessage *msg, const char *path)
redir_uri = g_strdup_printf ("%s/", soup_message_get_uri (msg)->path); redir_uri = g_strdup_printf ("%s/", soup_message_get_uri (msg)->path);
soup_message_set_redirect (msg, SOUP_STATUS_MOVED_PERMANENTLY, soup_message_set_redirect (msg, SOUP_STATUS_MOVED_PERMANENTLY,
redir_uri); redir_uri);
g_free (redir_uri); g_free (redir_uri);
return; return;
} }
@@ -109,8 +109,8 @@ do_get (SoupServer *server, SoupMessage *msg, const char *path)
listing = get_directory_listing (path); listing = get_directory_listing (path);
soup_message_set_response (msg, "text/html", soup_message_set_response (msg, "text/html",
SOUP_MEMORY_TAKE, SOUP_MEMORY_TAKE,
listing->str, listing->len); listing->str, listing->len);
soup_message_set_status (msg, SOUP_STATUS_OK); soup_message_set_status (msg, SOUP_STATUS_OK);
g_string_free (listing, FALSE); g_string_free (listing, FALSE);
return; return;
@@ -127,8 +127,8 @@ do_get (SoupServer *server, SoupMessage *msg, const char *path)
} }
buffer = soup_buffer_new_with_owner (g_mapped_file_get_contents (mapping), buffer = soup_buffer_new_with_owner (g_mapped_file_get_contents (mapping),
g_mapped_file_get_length (mapping), g_mapped_file_get_length (mapping),
mapping, (GDestroyNotify)g_mapped_file_unref); mapping, (GDestroyNotify)g_mapped_file_unref);
soup_message_body_append_buffer (msg->response_body, buffer); soup_message_body_append_buffer (msg->response_body, buffer);
soup_buffer_free (buffer); soup_buffer_free (buffer);
} else /* msg->method == SOUP_METHOD_HEAD */ { } else /* msg->method == SOUP_METHOD_HEAD */ {
@@ -140,7 +140,7 @@ do_get (SoupServer *server, SoupMessage *msg, const char *path)
*/ */
length = g_strdup_printf ("%lu", (gulong)st.st_size); length = g_strdup_printf ("%lu", (gulong)st.st_size);
soup_message_headers_append (msg->response_headers, soup_message_headers_append (msg->response_headers,
"Content-Length", length); "Content-Length", length);
g_free (length); g_free (length);
} }
@@ -160,7 +160,7 @@ static void handle_incoming_file(const char *hash, const char *filename, const i
origin, origin,
port, port,
hash)), hash)),
g_variant_builder_add (builder, "s", filename); g_variant_builder_add (builder, "s", filename);
value = g_variant_new ("as", builder); value = g_variant_new ("as", builder);
g_variant_builder_unref (builder); g_variant_builder_unref (builder);
@@ -169,10 +169,10 @@ static void handle_incoming_file(const char *hash, const char *filename, const i
create_user_notification(filename, size, origin, value); create_user_notification(filename, size, origin, value);
} }
static void static void
server_callback (SoupServer *server, SoupMessage *msg, server_callback (SoupServer *server, SoupMessage *msg,
const char *path, GHashTable *query, const char *path, GHashTable *query,
SoupClientContext *context, gpointer data) SoupClientContext *context, gpointer data)
{ {
char *file_path; char *file_path;
SoupMessageHeadersIter iter; SoupMessageHeadersIter iter;
@@ -182,7 +182,7 @@ server_callback (SoupServer *server, SoupMessage *msg,
origin_addr = soup_client_context_get_host (context); origin_addr = soup_client_context_get_host (context);
g_print ("%s %s HTTP/1.%d\n", msg->method, path, g_print ("%s %s HTTP/1.%d\n", msg->method, path,
soup_message_get_http_version (msg)); soup_message_get_http_version (msg));
soup_message_headers_iter_init (&iter, msg->request_headers); soup_message_headers_iter_init (&iter, msg->request_headers);
while (soup_message_headers_iter_next (&iter, &name, &value)) while (soup_message_headers_iter_next (&iter, &name, &value))
g_print ("%s: %s\n", name, value); g_print ("%s: %s\n", name, value);
@@ -223,8 +223,8 @@ server_callback (SoupServer *server, SoupMessage *msg,
do_get (server, msg, file_path); do_get (server, msg, file_path);
else { else {
soup_message_set_response (msg, "application/json", soup_message_set_response (msg, "application/json",
SOUP_MEMORY_TAKE, SOUP_MEMORY_TAKE,
response->str, response->len); response->str, response->len);
soup_message_set_status (msg, SOUP_STATUS_OK); soup_message_set_status (msg, SOUP_STATUS_OK);
g_print("Handle response\n"); g_print("Handle response\n");
} }
@@ -245,19 +245,19 @@ int addRouteToServer(char *name, char *file_to_send, char *destination) {
GFile *file; GFile *file;
GFileInfo *fileInfo; GFileInfo *fileInfo;
soup_server_add_handler (glob_server, g_strdup_printf("/transfer/%s", name), soup_server_add_handler (glob_server, g_strdup_printf("/transfer/%s", name),
server_callback, g_strdup(file_to_send), NULL); server_callback, g_strdup(file_to_send), NULL);
//send notification of available file to the client //send notification of available file to the client
//For getting file size //For getting file size
//https://developer.gnome.org/gio/stable/GFile.html#g-file-query-info //https://developer.gnome.org/gio/stable/GFile.html#g-file-query-info
file = g_file_new_for_path(file_to_send); file = g_file_new_for_path(file_to_send);
//G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME, G_FILE_ATTRIBUTE_STANDARD_SIZE //G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME, G_FILE_ATTRIBUTE_STANDARD_SIZE
fileInfo = g_file_query_info(file, "standard::display-name,standard::size", G_FILE_QUERY_INFO_NONE, NULL, NULL); fileInfo = g_file_query_info(file, "standard::display-name,standard::size", G_FILE_QUERY_INFO_NONE, NULL, NULL);
do_client_notify(g_strdup_printf("http://%s:%d/?token=%s&size=%jd&name=%s\n", teleport_get_do_client_notify(g_strdup_printf("http://%s:%d/?token=%s&size=%jd&name=%s\n",
destination, destination,
port, port,
name, name,
g_file_info_get_size(fileInfo), g_file_info_get_size(fileInfo),
g_file_info_get_display_name(fileInfo))); g_file_info_get_display_name(fileInfo)));
g_object_unref(fileInfo); g_object_unref(fileInfo);
g_object_unref(file); g_object_unref(file);
return 0; return 0;
@@ -271,11 +271,11 @@ extern int run_http_server(void) {
port = 3000; port = 3000;
glob_server = soup_server_new (SOUP_SERVER_SERVER_HEADER, "teleport-httpd ", glob_server = soup_server_new (SOUP_SERVER_SERVER_HEADER, "teleport-httpd ",
NULL); NULL);
soup_server_listen_all (glob_server, port, 0, &error); soup_server_listen_all (glob_server, port, 0, &error);
soup_server_add_handler (glob_server, NULL, soup_server_add_handler (glob_server, NULL,
server_callback, NULL, NULL); server_callback, NULL, NULL);
uris = soup_server_get_uris (glob_server); uris = soup_server_get_uris (glob_server);
for (u = uris; u; u = u->next) { for (u = uris; u; u = u->next) {

View File

@@ -26,7 +26,7 @@ struct _TeleportAppWindowPrivate
G_DEFINE_TYPE_WITH_PRIVATE(TeleportAppWindow, teleport_app_window, GTK_TYPE_APPLICATION_WINDOW); G_DEFINE_TYPE_WITH_PRIVATE(TeleportAppWindow, teleport_app_window, GTK_TYPE_APPLICATION_WINDOW);
static void static void
teleport_app_window_init (TeleportAppWindow *win) teleport_app_window_init (TeleportAppWindow *win)
{ {
TeleportAppWindowPrivate *priv; TeleportAppWindowPrivate *priv;
@@ -62,29 +62,29 @@ open_file_picker(GtkButton *btn, Peer *device) {
g_print("Open file chooser for submitting a file to %s with Address %s\n", device->name, device->ip); g_print("Open file chooser for submitting a file to %s with Address %s\n", device->name, device->ip);
dialog = gtk_file_chooser_dialog_new ("Open File", dialog = gtk_file_chooser_dialog_new ("Open File",
GTK_WINDOW(mainWin), GTK_WINDOW(mainWin),
action, action,
("_Cancel"), ("_Cancel"),
GTK_RESPONSE_CANCEL, GTK_RESPONSE_CANCEL,
("_Open"), ("_Open"),
GTK_RESPONSE_ACCEPT, GTK_RESPONSE_ACCEPT,
NULL); NULL);
res = gtk_dialog_run (GTK_DIALOG (dialog)); res = gtk_dialog_run (GTK_DIALOG (dialog));
if (res == GTK_RESPONSE_ACCEPT) if (res == GTK_RESPONSE_ACCEPT)
{ {
char *filename; char *filename;
GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog); GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog);
filename = gtk_file_chooser_get_filename (chooser); filename = gtk_file_chooser_get_filename (chooser);
g_print("Choosen file is %s\n", filename); g_print("Choosen file is %s\n", filename);
gtk_widget_destroy (dialog); gtk_widget_destroy (dialog);
addRouteToServer(g_compute_checksum_for_string (G_CHECKSUM_SHA256, filename, -1), filename, device->ip); addRouteToServer(g_compute_checksum_for_string (G_CHECKSUM_SHA256, filename, -1), filename, device->ip);
g_free (filename); g_free (filename);
} }
else else
{ {
gtk_widget_destroy (dialog); gtk_widget_destroy (dialog);
} }
} }
void update_remote_device_list(TeleportAppWindow *win, Peer *device) { void update_remote_device_list(TeleportAppWindow *win, Peer *device) {
@@ -140,7 +140,7 @@ void update_remote_device_list_remove(TeleportAppWindow *win, Peer *device) {
} }
} }
GtkWidget * GtkWidget *
find_child(GtkWidget *parent, const gchar *name) find_child(GtkWidget *parent, const gchar *name)
{ {
if (g_strcmp0(gtk_widget_get_name((GtkWidget *)parent), (gchar *)name) == 0) { if (g_strcmp0(gtk_widget_get_name((GtkWidget *)parent), (gchar *)name) == 0) {
@@ -166,7 +166,7 @@ find_child(GtkWidget *parent, const gchar *name)
} }
static void static void
teleport_app_window_dispose (GObject *object) teleport_app_window_dispose (GObject *object)
{ {
//TeleportAppWindow *win; //TeleportAppWindow *win;
@@ -180,13 +180,13 @@ teleport_app_window_dispose (GObject *object)
G_OBJECT_CLASS (teleport_app_window_parent_class)->dispose (object); G_OBJECT_CLASS (teleport_app_window_parent_class)->dispose (object);
} }
static void static void
teleport_app_window_class_init (TeleportAppWindowClass *class) teleport_app_window_class_init (TeleportAppWindowClass *class)
{ {
G_OBJECT_CLASS (class)->dispose = teleport_app_window_dispose; G_OBJECT_CLASS (class)->dispose = teleport_app_window_dispose;
gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class), gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
"/com/frac_tion/teleport/window.ui"); "/com/frac_tion/teleport/window.ui");
gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (class), TeleportAppWindow, gears); gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (class), TeleportAppWindow, gears);
gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (class), TeleportAppWindow, this_device_name_label); gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (class), TeleportAppWindow, this_device_name_label);
@@ -194,15 +194,15 @@ teleport_app_window_class_init (TeleportAppWindowClass *class)
gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (class), TeleportAppWindow, remote_devices_list); gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (class), TeleportAppWindow, remote_devices_list);
} }
TeleportAppWindow * TeleportAppWindow *
teleport_app_window_new (TeleportApp *app) teleport_app_window_new (TeleportApp *app)
{ {
return g_object_new (TELEPORT_APP_WINDOW_TYPE, "application", app, NULL); return g_object_new (TELEPORT_APP_WINDOW_TYPE, "application", app, NULL);
} }
void void
teleport_app_window_open (TeleportAppWindow *win, teleport_app_window_open (TeleportAppWindow *win,
GFile *file) GFile *file)
{ {
//TeleportAppWindowPrivate *priv; //TeleportAppWindowPrivate *priv;
//priv = teleport_app_window_get_instance_private (win); //priv = teleport_app_window_get_instance_private (win);