1 #include <stdio.h>
2 #include <stdlib.h>
3
4 #include <string.h>
5
6 #include <glib.h>
7
8 #include <gio/gio.h>
9 #include <wocky/wocky.h>
10
11 GMainLoop *mainloop;
12 char *recipient;
13 char *message;
14
15 static void
closed_cb(GObject * source,GAsyncResult * res,gpointer user_data)16 closed_cb (
17 GObject *source,
18 GAsyncResult *res,
19 gpointer user_data)
20 {
21 WockyPorter *porter = WOCKY_PORTER (source);
22 WockySession *session = WOCKY_SESSION (user_data);
23 GError *error = NULL;
24
25 if (wocky_porter_close_finish (porter, res, &error))
26 {
27 g_print ("Signed out\n");
28 }
29 else
30 {
31 g_warning ("Couldn't sign out cleanly: %s\n", error->message);
32 g_clear_error (&error);
33 }
34
35 /* Either way, we're done. */
36 g_object_unref (session);
37 g_main_loop_quit (mainloop);
38 }
39
40 static void
message_sent_cb(GObject * source,GAsyncResult * res,gpointer user_data)41 message_sent_cb (
42 GObject *source,
43 GAsyncResult *res,
44 gpointer user_data)
45 {
46 WockyPorter *porter = WOCKY_PORTER (source);
47 WockySession *session = WOCKY_SESSION (user_data);
48 GError *error = NULL;
49
50 if (wocky_porter_send_finish (porter, res, &error))
51 {
52 g_print ("Sent '%s' to %s\n", message, recipient);
53 }
54 else
55 {
56 g_warning ("Couldn't send message: %s\n", error->message);
57 g_clear_error (&error);
58 }
59
60 /* Sign out. */
61 wocky_porter_close_async (porter, NULL, closed_cb, session);
62 }
63
64 static void
connected_cb(GObject * source,GAsyncResult * res,gpointer user_data)65 connected_cb (
66 GObject *source,
67 GAsyncResult *res,
68 gpointer user_data)
69 {
70 WockyConnector *connector = WOCKY_CONNECTOR (source);
71 WockyXmppConnection *connection;
72 gchar *jid = NULL;
73 GError *error = NULL;
74
75 connection = wocky_connector_connect_finish (connector, res, &jid, NULL,
76 &error);
77
78 if (connection == NULL)
79 {
80 g_warning ("Couldn't connect: %s", error->message);
81 g_clear_error (&error);
82 g_main_loop_quit (mainloop);
83 }
84 else
85 {
86 WockySession *session = wocky_session_new_with_connection (connection, jid);
87 WockyPorter *porter = wocky_session_get_porter (session);
88 WockyStanza *stanza = wocky_stanza_build (WOCKY_STANZA_TYPE_MESSAGE,
89 WOCKY_STANZA_SUB_TYPE_NONE, NULL, recipient,
90 '(', "body",
91 '$', message,
92 ')', NULL);
93
94 g_print ("Connected as %s\n", jid);
95
96 wocky_porter_start (porter);
97 wocky_porter_send_async (porter, stanza, NULL, message_sent_cb, session);
98
99 g_object_unref (stanza);
100 g_free (jid);
101 }
102 }
103
104 int
main(int argc,char ** argv)105 main (int argc,
106 char **argv)
107 {
108 char *jid, *password;
109 WockyConnector *connector;
110
111 g_type_init ();
112 wocky_init ();
113
114 if (argc != 5)
115 {
116 printf ("Usage: %s <jid> <password> <recipient> <message>\n", argv[0]);
117 return -1;
118 }
119
120 jid = argv[1];
121 password = argv[2];
122 recipient = argv[3];
123 message = argv[4];
124
125 mainloop = g_main_loop_new (NULL, FALSE);
126 connector = wocky_connector_new (jid, password, NULL, NULL, NULL);
127 wocky_connector_connect_async (connector, NULL, connected_cb, NULL);
128
129 g_main_loop_run (mainloop);
130
131 g_object_unref (connector);
132 g_main_loop_unref (mainloop);
133 return 0;
134 }
135