wip: port all enums, add signals
This commit is contained in:
parent
91c5225e55
commit
cc4e304418
@ -28,6 +28,20 @@ struct _SsbScuttler {
|
|||||||
GSocketConnection *connection;
|
GSocketConnection *connection;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
SSB_PACKET_TYPE_BUFFER = 0,
|
||||||
|
SSB_PACKET_TYPE_STRING = 1,
|
||||||
|
SSB_PACKET_TYPE_JSON = 2,
|
||||||
|
} SsbPacketType;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
SSB_PACKET_FLAGS_BUFFER = 0,
|
||||||
|
SSB_PACKET_FLAGS_STRING = 1,
|
||||||
|
SSB_PACKET_FLAGS_JSON = 2,
|
||||||
|
SSB_PACKET_FLAGS_END = 4,
|
||||||
|
SSB_PACKET_FLAGS_STREAM = 8,
|
||||||
|
} SsbPacketFlags;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SSB_RPC_ASYNC,
|
SSB_RPC_ASYNC,
|
||||||
SSB_RPC_SOURCE,
|
SSB_RPC_SOURCE,
|
||||||
@ -36,10 +50,10 @@ typedef enum {
|
|||||||
} SsbRPCType;
|
} SsbRPCType;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SSB_PACKET_TYPE_BUFFER = 0,
|
SSB_STREAM_STATE_OPEN,
|
||||||
SSB_PACKET_TYPE_STRING = 1,
|
SSB_STREAM_STATE_ENDED_OK,
|
||||||
SSB_PACKET_TYPE_JSON = 2,
|
SSB_STREAM_STATE_ENDED_ERROR,
|
||||||
} SsbPacketType;
|
} SsbStreamState;
|
||||||
|
|
||||||
#define MAX_MESSAGE_SIZE 32768
|
#define MAX_MESSAGE_SIZE 32768
|
||||||
#define BOXS_MAXLEN 4096
|
#define BOXS_MAXLEN 4096
|
||||||
@ -72,6 +86,15 @@ static const guchar ssb_cap[] = {
|
|||||||
0x08, 0x39, 0xb7, 0x55, 0x84, 0x5a, 0x9f, 0xfb
|
0x08, 0x39, 0xb7, 0x55, 0x84, 0x5a, 0x9f, 0xfb
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
SIGNAL_INITIALISED,
|
||||||
|
SIGNAL_CONNECTED,
|
||||||
|
SIGNAL_LAST
|
||||||
|
};
|
||||||
|
|
||||||
|
static guint ssb_scuttler_signals[SIGNAL_LAST] = {0
|
||||||
|
};
|
||||||
|
|
||||||
GMainLoop *scuttle_loop = NULL;
|
GMainLoop *scuttle_loop = NULL;
|
||||||
SsbScuttler *singleton = NULL;
|
SsbScuttler *singleton = NULL;
|
||||||
|
|
||||||
@ -202,6 +225,12 @@ parse_commented_json(gchar *json_data, GError **error)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
emit_initialised(SsbScuttler *scuttler, gboolean success)
|
||||||
|
{
|
||||||
|
g_signal_emit(scuttler, ssb_scuttler_signals[SIGNAL_INITIALISED], 0, success);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
initialise(SsbScuttler *scuttler, gchar *ssb_dir)
|
initialise(SsbScuttler *scuttler, gchar *ssb_dir)
|
||||||
{
|
{
|
||||||
@ -221,6 +250,8 @@ initialise(SsbScuttler *scuttler, gchar *ssb_dir)
|
|||||||
|
|
||||||
g_free(config_data);
|
g_free(config_data);
|
||||||
|
|
||||||
|
emit_initialised(scuttler, FALSE);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,6 +271,8 @@ initialise(SsbScuttler *scuttler, gchar *ssb_dir)
|
|||||||
|
|
||||||
g_free(config_data);
|
g_free(config_data);
|
||||||
|
|
||||||
|
emit_initialised(scuttler, FALSE);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,6 +281,8 @@ initialise(SsbScuttler *scuttler, gchar *ssb_dir)
|
|||||||
if ((private_key = g_strdup(json_object_get_string_member(secret_object, "private"))) == NULL) {
|
if ((private_key = g_strdup(json_object_get_string_member(secret_object, "private"))) == NULL) {
|
||||||
g_critical("Could not read private key, can not continue");
|
g_critical("Could not read private key, can not continue");
|
||||||
|
|
||||||
|
emit_initialised(scuttler, FALSE);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -262,6 +297,8 @@ initialise(SsbScuttler *scuttler, gchar *ssb_dir)
|
|||||||
g_critical("Could not decode private key, can not continue");
|
g_critical("Could not decode private key, can not continue");
|
||||||
g_free(private_key);
|
g_free(private_key);
|
||||||
|
|
||||||
|
emit_initialised(scuttler, FALSE);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,6 +314,8 @@ initialise(SsbScuttler *scuttler, gchar *ssb_dir)
|
|||||||
memcpy(scuttler->app_key, ssb_cap, sizeof(ssb_cap));
|
memcpy(scuttler->app_key, ssb_cap, sizeof(ssb_cap));
|
||||||
|
|
||||||
scuttler->initialised = TRUE;
|
scuttler->initialised = TRUE;
|
||||||
|
|
||||||
|
emit_initialised(scuttler, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -313,6 +352,7 @@ second_hook_cb()
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// was: write_all
|
||||||
static gboolean
|
static gboolean
|
||||||
ssb_scuttler_send_plain(SsbScuttler *scuttler, gpointer data, gsize data_len, GError **error)
|
ssb_scuttler_send_plain(SsbScuttler *scuttler, gpointer data, gsize data_len, GError **error)
|
||||||
{
|
{
|
||||||
@ -328,6 +368,7 @@ ssb_scuttler_send_plain(SsbScuttler *scuttler, gpointer data, gsize data_len, GE
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// was: read_all
|
||||||
static gboolean
|
static gboolean
|
||||||
ssb_scuttler_read(SsbScuttler *scuttler, gpointer buffer, gsize buffer_len, GError **error)
|
ssb_scuttler_read(SsbScuttler *scuttler, gpointer buffer, gsize buffer_len, GError **error)
|
||||||
{
|
{
|
||||||
@ -343,6 +384,7 @@ ssb_scuttler_read(SsbScuttler *scuttler, gpointer buffer, gsize buffer_len, GErr
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// was: shs_connect
|
||||||
static gboolean
|
static gboolean
|
||||||
ssb_scuttler_shs_connect(SsbScuttler *scuttler, GError **error)
|
ssb_scuttler_shs_connect(SsbScuttler *scuttler, GError **error)
|
||||||
{
|
{
|
||||||
@ -558,6 +600,13 @@ ssb_scuttler_shs_connect(SsbScuttler *scuttler, GError **error)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
emit_connected(SsbScuttler *scuttler, gboolean success)
|
||||||
|
{
|
||||||
|
g_signal_emit(scuttler, ssb_scuttler_signals[SIGNAL_CONNECTED], 0, success);
|
||||||
|
}
|
||||||
|
|
||||||
|
// extracted from main
|
||||||
static gboolean
|
static gboolean
|
||||||
ssb_scuttler_connect(SsbScuttler *scuttler, GError **error)
|
ssb_scuttler_connect(SsbScuttler *scuttler, GError **error)
|
||||||
{
|
{
|
||||||
@ -603,6 +652,7 @@ increment_nonce(guchar nonce[24])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// was: bs_write_packet
|
||||||
static gboolean
|
static gboolean
|
||||||
ssb_scuttler_write_packet(SsbScuttler *scuttler, const guchar *data, guint16 data_len, GError **error)
|
ssb_scuttler_write_packet(SsbScuttler *scuttler, const guchar *data, guint16 data_len, GError **error)
|
||||||
{
|
{
|
||||||
@ -642,6 +692,7 @@ ssb_scuttler_write_packet(SsbScuttler *scuttler, const guchar *data, guint16 dat
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// was: bs_write
|
||||||
static gboolean
|
static gboolean
|
||||||
ssb_scuttler_send_bytes(SsbScuttler *scuttler, const guchar *data, gsize data_len, GError **error)
|
ssb_scuttler_send_bytes(SsbScuttler *scuttler, const guchar *data, gsize data_len, GError **error)
|
||||||
{
|
{
|
||||||
@ -663,6 +714,7 @@ ssb_scuttler_send_bytes(SsbScuttler *scuttler, const guchar *data, gsize data_le
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// was: ps_write
|
||||||
static gboolean
|
static gboolean
|
||||||
ssb_scuttler_send_packet(SsbScuttler *scuttler,
|
ssb_scuttler_send_packet(SsbScuttler *scuttler,
|
||||||
SsbPacketType type,
|
SsbPacketType type,
|
||||||
@ -694,6 +746,7 @@ ssb_scuttler_send_packet(SsbScuttler *scuttler,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// was: muxrpc_call
|
||||||
static void
|
static void
|
||||||
ssb_scuttler_muxrpc_call(SsbScuttler *scuttler,
|
ssb_scuttler_muxrpc_call(SsbScuttler *scuttler,
|
||||||
const gchar *method,
|
const gchar *method,
|
||||||
@ -725,9 +778,9 @@ ssb_scuttler_muxrpc_call(SsbScuttler *scuttler,
|
|||||||
g_set_error(error, SSB_SCUTTLER_ERROR, SSB_SCUTTLER_ERROR_REQUEST_TOO_LARGE, "Request too large");
|
g_set_error(error, SSB_SCUTTLER_ERROR, SSB_SCUTTLER_ERROR_REQUEST_TOO_LARGE, "Request too large");
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}zq
|
}
|
||||||
|
|
||||||
if (!ssb_scuttler_send_packet(scuttler, request, request_len, SSB_PACKET_TYPE_JSON, req_id, !is_request, FALSE, &err)) {
|
if (!ssb_scuttler_send_packet(scuttler, SSB_PACKET_TYPE_JSON, request, request_len, req_id, !is_request, FALSE, &err)) {
|
||||||
g_propagate_error(error, err);
|
g_propagate_error(error, err);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -770,6 +823,34 @@ ssb_scuttler_class_init(SsbScuttlerClass *klass)
|
|||||||
|
|
||||||
gobject_class->dispose = ssb_scuttler_dispose;
|
gobject_class->dispose = ssb_scuttler_dispose;
|
||||||
gobject_class->finalize = ssb_scuttler_finalize;
|
gobject_class->finalize = ssb_scuttler_finalize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SsbScuttler::initialised:
|
||||||
|
* @success: if %TRUE, initialisation succeeded
|
||||||
|
*
|
||||||
|
* Emitted when the SsbScuttler object is initialised.
|
||||||
|
*/
|
||||||
|
ssb_scuttler_signals[SIGNAL_INITIALISED] = g_signal_new(
|
||||||
|
"initialised",
|
||||||
|
G_TYPE_FROM_CLASS(klass),
|
||||||
|
G_SIGNAL_RUN_FIRST,
|
||||||
|
0, NULL, NULL,
|
||||||
|
g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1,
|
||||||
|
G_TYPE_BOOLEAN);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SsbScuttler::connected:
|
||||||
|
* @success: if %TRUE, the connection and handshake has succeeded
|
||||||
|
*
|
||||||
|
* Emitted when the SsbScuttler object is connected to the SBOT server.
|
||||||
|
*/
|
||||||
|
ssb_scuttler_signals[SIGNAL_CONNECTED] = g_signal_new(
|
||||||
|
"connected",
|
||||||
|
G_TYPE_FROM_CLASS(klass),
|
||||||
|
G_SIGNAL_RUN_FIRST,
|
||||||
|
0, NULL, NULL,
|
||||||
|
g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1,
|
||||||
|
G_TYPE_BOOLEAN);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user