[refactor] fix intent in some files
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user