# ------------------------------------------------------------------------------
-if CURL_HAS_WEBSOCKETS
bin_PROGRAMS += \
pakfire-daemon
-endif
dist_pakfire_daemon_SOURCES = \
src/cli/pakfire-daemon.c
LIBS="$save_LIBS"
-# Check if cURL has support for WebSockets
-AC_CHECK_PROG(CURL_CONFIG, curl-config, curl-config)
-if test "$CURL_CONFIG" != ""; then
- # Check for WebSocket support
- AC_MSG_CHECKING([for curl WebSocket support])
- CURL_PROTOCOLS=$($CURL_CONFIG --protocols)
-
- if echo "$CURL_PROTOCOLS" | grep -qw "WSS"; then
- AC_DEFINE(CURL_HAS_WEBSOCKETS, [1], [cURL has WebSocket Support])
-
- AC_MSG_RESULT([yes])
- CURL_HAS_WEBSOCKETS=yes
- else
- AC_MSG_RESULT([no])
- CURL_HAS_WEBSOCKETS=no
- fi
-else
- AC_MSG_ERROR([curl-config not found])
-fi
-
-AM_CONDITIONAL(CURL_HAS_WEBSOCKETS, [test "x$CURL_HAS_WEBSOCKETS" = "xyes"])
-
AC_DEFINE_UNQUOTED([PAKFIRE_CONFIG_DIR], ["${sysconfdir}/${PACKAGE_NAME}"],
[The path where Pakfire stores configuration files])
AC_DEFINE_UNQUOTED([PAKFIRE_CACHE_DIR], ["/var/cache/${PACKAGE_NAME}"],
# #
#############################################################################*/
-#ifdef CURL_HAS_WEBSOCKETS
-
#include <pakfire/ctx.h>
#include <pakfire/daemon.h>
return r;
}
-
-#endif /* CURL_HAS_WEBSOCKETS */
#ifndef PAKFIRE_CLI_DAEMON_H
#define PAKFIRE_CLI_DAEMON_H
-#ifdef CURL_HAS_WEBSOCKETS
-
#include <pakfire/ctx.h>
int cli_daemon_main(struct pakfire_ctx* ctx);
-#endif /* CURL_HAS_WEBSOCKETS */
#endif /* PAKFIRE_CLI_DAEMON_H */
# #
#############################################################################*/
-#ifdef CURL_HAS_WEBSOCKETS
-
#include <errno.h>
#include <stdlib.h>
return 0;
}
-
-#endif /* CURL_HAS_WEBSOCKETS */
#ifndef PAKFIRE_DAEMON_H
#define PAKFIRE_DAEMON_H
-#ifdef CURL_HAS_WEBSOCKETS
-
struct pakfire_daemon;
#include <pakfire/buildservice.h>
// Send message
int pakfire_daemon_send_message(struct pakfire_daemon* self, struct json_object* message);
-#endif /* CURL_HAS_WEBSOCKETS */
#endif /* PAKFIRE_DAEMON_H */
# #
#############################################################################*/
-#ifdef CURL_HAS_WEBSOCKETS
-
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
return 0;
}
-
-#endif /* CURL_HAS_WEBSOCKETS */
#ifndef PAKFIRE_JOB_H
#define PAKFIRE_JOB_H
-#ifdef CURL_HAS_WEBSOCKETS
-
#include <pakfire/ctx.h>
#include <pakfire/daemon.h>
// Message Received
int pakfire_job_handle_message(struct pakfire_job* self, struct json_object* message);
-#endif /* CURL_HAS_WEBSOCKETS */
#endif /* PAKFIRE_JOB_H */
enum {
PAKFIRE_XFER_DOWNLOAD = 0,
PAKFIRE_XFER_UPLOAD = 1,
-#ifdef CURL_HAS_WEBSOCKETS
PAKFIRE_XFER_SOCKET = 2,
-#endif /* CURL_HAS_WEBSOCKETS */
} direction;
// Size
// Event Loop
sd_event_source* event;
-#ifdef CURL_HAS_WEBSOCKETS
// Callbacks
struct pakfire_xfer_callbacks {
pakfire_xfer_open_callback open;
char* data;
size_t size;
} buffer;
-#endif /* CURL_HAS_WEBSOCKETS */
};
static void pakfire_xfer_free(struct pakfire_xfer* xfer) {
if (xfer->event)
sd_event_source_unref(xfer->event);
-#ifdef CURL_HAS_WEBSOCKETS
// Buffer
if (xfer->buffer.data)
free(xfer->buffer.data);
-#endif /* CURL_HAS_WEBSOCKETS */
// Query Arguments
if (xfer->queries)
return -EAGAIN;
}
-#ifdef CURL_HAS_WEBSOCKETS
// Call the close callback for WebSockets
if (xfer->direction == PAKFIRE_XFER_SOCKET) {
if (xfer->callbacks.close) {
return r;
}
}
-#endif /* CURL_HAS_WEBSOCKETS */
return code;
}
return "unknown";
}
-#ifdef CURL_HAS_WEBSOCKETS
static int pakfire_xfer_allocate(struct pakfire_xfer* xfer, size_t size) {
// Otherwise, we resize the buffer
return r;
}
-#endif /* CURL_HAS_WEBSOCKETS */
/*
This function checks if the hashes match (if set up)
return r;
break;
-#ifdef CURL_HAS_WEBSOCKETS
case PAKFIRE_XFER_SOCKET:
r = pakfire_xfer_done_socket(xfer, loop, code);
if (r < 0)
return r;
-#endif /* CURL_HAS_WEBSOCKETS */
default:
break;
xfer->xferred = ulnow;
break;
-#ifdef CURL_HAS_WEBSOCKETS
case PAKFIRE_XFER_SOCKET:
break;
-#endif /* CURL_HAS_WEBSOCKETS */
}
// Do nothing if no progress indicator has been set up
goto ERROR;
}
-#ifdef CURL_HAS_WEBSOCKETS
// Replace the schema if we are using SOCKET
if (xfer->direction == PAKFIRE_XFER_SOCKET) {
r = curl_url_set(xfer->fullurl, CURLUPART_SCHEME, "wss", 0);
goto ERROR;
}
}
-#endif /* CURL_HAS_WEBSOCKETS */
// Append any query arguments
if (xfer->queries) {
}
break;
-#ifdef CURL_HAS_WEBSOCKETS
case PAKFIRE_XFER_SOCKET:
// Ask cURL to connect and let us handle the rest
r = curl_easy_setopt(xfer->handle, CURLOPT_CONNECT_ONLY, 2L);
}
break;
-#endif /* CURL_HAS_WEBSOCKETS */
}
// Compose the URL
return 0;
}
-#ifdef CURL_HAS_WEBSOCKETS
int pakfire_xfer_socket(struct pakfire_xfer* xfer, pakfire_xfer_open_callback open,
pakfire_xfer_recv_callback recv, pakfire_xfer_send_callback send,
pakfire_xfer_close_callback close, void* data) {
return 0;
}
-#endif /* CURL_HAS_WEBSOCKETS */
pakfire_xfer_error_code_t pakfire_xfer_run(struct pakfire_xfer* xfer, int flags) {
int r;
struct pakfire_xfer* xfer, struct json_object** response);
// WebSocket
-#ifdef CURL_HAS_WEBSOCKETS
typedef int (*pakfire_xfer_open_callback)(struct pakfire_xfer* xfer, void* data);
typedef int (*pakfire_xfer_recv_callback)(struct pakfire_xfer* xfer, const char* message, const size_t size, void* data);
typedef int (*pakfire_xfer_send_callback)(struct pakfire_xfer* xfer, void* data);
pakfire_xfer_recv_callback recv, pakfire_xfer_send_callback send, pakfire_xfer_close_callback close, void* data);
int pakfire_xfer_send_message(struct pakfire_xfer* xfer, const char* message, const size_t length);
-#endif /* CURL_HAS_WEBSOCKETS */
#endif /* PAKFIRE_XFER_H */